使用 Ubuntu 和 Java 创建 Docker 镜像

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

这篇简短的文章展示了如何使用 Ubuntu 15.04 创建一个安装了 Java 7 或 8 的 Docker 镜像。它将作为我计划撰写的一些未来文章的基础。

是的,我知道 Docker Hub 上有几个带有 Java 8 的 Docker 镜像。

先决条件

在写这篇文章时,我使用了 Docker 1.7.1 和 Docker-Machine 0.3.0。可以 在此处 找到有关如何安装它们的说明。

码头文件

Docker 文档建议将 Docker 文件放置在专用目录中,该目录仅包含创建 Docker 映像所需的文件。

因此,我为 Java 8 的 Docker 镜像创建了一个名为“krizsan-ubuntu1504java8”的目录,为 Java 7 的镜像创建了另一个名为“krizsan-ubuntu1504java7”的目录。
这些目录中的每一个都包含一个名为“Dockerfile”的文件(注意:没有文件扩展名!)。

Ubuntu 15.04 上 Java 8 的 Docker 文件包含以下内容:


 # Ubuntu 15.04 with Java 8 installed.
# Build image with:  docker build -t krizsan/ubuntu1504java8:v1 .

FROM ubuntu:15.04 MAINTAINER Ivan Krizsan, https://github.com/krizsan RUN apt-get update &&
apt-get upgrade -y &&
apt-get install -y software-properties-common &&
add-apt-repository ppa:webupd8team/java -y &&
apt-get update &&
echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections &&
apt-get install -y oracle-java8-installer &&
apt-get clean

简而言之,这个 Docker 文件将基于 ubuntu:15.04 Docker 镜像创建一个 Docker 镜像,其中安装了 Oracle 的 Java 8。

长版,逐行:

  • FROM ubuntu:15.04
    说明此 Docker 映像基于哪个 Docker 映像。比较面向对象编程中的父类。
  • MAINTAINER Ivan Krizsan, https://github.com/krizsan
    告诉我们谁在维护这个 Docker 镜像。
  • Docker RUN 命令执行 shell 命令来安装程序、配置 Docker 镜像等。
    下面详细介绍了每个 shell 命令的用途。
  • apt-get update
    更新可用包及其版本的列表。
  • apt-get upgrade
    安装当前安装的软件包的任何更新版本。
  • apt-get install -y software-properties-common
    安装软件以允许独立供应商软件源,特别是下一行中使用的“add-apt-repository”命令。
  • add-apt-repository ppa:webupd8team/java -y
    添加包含 Oracle Java 8 的 PPA 存储库,假设对所有查询都是肯定的。
  • apt-get update
    再次更新可用包及其版本的列表。再次运行更新的原因是刚刚添加了一个新的存储库,我们想刷新可用包及其版本的列表,包括新存储库中的那些。
  • echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections
    Java 安装程序要求您在安装开始前接受许可。此行自动接受许可证。
  • apt-get install -y oracle-java8-installer
    终于可以安装Java 8了! -y 标志以非交互模式运行安装,假设所有问题都回答“是”。
  • apt-get clean
    从检索到的包文件中清除本地存储库。

使用一个 Docker RUN 命令并使用 && 链接 shell 命令的原因是 Docker 将为每个 RUN 在图像上创建一个额外的层 命令。 Docker 文件包含的 RUN 命令越少,生成的镜像就越小。

将在 Ubuntu 15.04 上使用 Java 7 创建图像的 Docker 文件如下所示:


 # Ubuntu 15.04 with Java 8 installed.
# Build image with:  docker build -t krizsan/ubuntu1504java8:v1 .

FROM ubuntu:15.04 MAINTAINER Ivan Krizsan, https://github.com/krizsan RUN apt-get update &&
apt-get upgrade -y &&
apt-get install -y software-properties-common &&
add-apt-repository ppa:webupd8team/java -y &&
apt-get update &&
echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections &&
apt-get install -y oracle-java8-installer &&
apt-get clean

与 Java 8 Docker 文件相比,除了注释之外的唯一区别是倒数第二行,其中使用了 Java 7 安装程序。

使用以下步骤构建 Java 8 Docker 映像:

  • 打开一个终端窗口。
  • 如果您没有使用 Linux 操作系统,请创建一个 Docker-Machine(如果您还没有的话):
    docker-machine create dev
  • 如果您使用的不是 Linux 操作系统,请启动 Docker-Machine:
    docker-machine start dev
  • 如果您使用的不是 Linux 操作系统,请通过 ssh 进入 Docker-Machine:
    docker-machine ssh dev
  • 转到包含描述您要构建的映像的 Docker 文件的目录。
    在此示例中,我将构建 Java 8 映像。
  • 构建 Docker 镜像:
    docker build -t krizsan/ubuntu1504java8:v1 .
    注意行尾的句点!
    Linux 用户需要在 Docker 命令之前添加 sudo 命令:
    sudo docker build -t krizsan/ubuntu1504java8:v1 .
    你会看到相当多的控制台输出应该以这样的结尾:

 # Ubuntu 15.04 with Java 8 installed.
# Build image with:  docker build -t krizsan/ubuntu1504java8:v1 .

FROM ubuntu:15.04 MAINTAINER Ivan Krizsan, https://github.com/krizsan RUN apt-get update &&
apt-get upgrade -y &&
apt-get install -y software-properties-common &&
add-apt-repository ppa:webupd8team/java -y &&
apt-get update &&
echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections &&
apt-get install -y oracle-java8-installer &&
apt-get clean

  • 使用新创建的 Docker 镜像启动 Docker 容器:
    docker run -it krizsan/ubuntu1504java8:v1 bash
    同样,Linux 用户需要在 docker 命令之前插入 sudo 命令。
  • 验证安装的 Java 版本:
    java -version
    在我的例子中,我看到安装了 Java 版本 1.8.0_51。
  • 退出 Docker 容器:
    exit

最后,让我们检查创建的图像的大小:

  • 列出本地可用的 Docker 镜像:
    码头图像
    我看到有关我们刚刚创建的 Docker 映像的以下信息已列出:
  • 
     # Ubuntu 15.04 with Java 8 installed.
    # Build image with:  docker build -t krizsan/ubuntu1504java8:v1 .
    

    FROM ubuntu:15.04 MAINTAINER Ivan Krizsan, https://github.com/krizsan RUN apt-get update &&
    apt-get upgrade -y &&
    apt-get install -y software-properties-common &&
    add-apt-repository ppa:webupd8team/java -y &&
    apt-get update &&
    echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections &&
    apt-get install -y oracle-java8-installer &&
    apt-get clean

    图像的大小在右侧的 VIRTUAL SIZE 列中,如您所见,大约为 803MB。

    本文到此结束,我现在准备创建更多包含在 Java 上运行的软件的 Docker 镜像。

    相关文章