这篇简短的文章展示了如何使用 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 映像的以下信息已列出:
# 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 镜像。