自定义构建Docker镜像
自定义构建Docker镜像
实际上所有常用的应用程序都有对应的镜像,我们只需要下载这些镜像然后就可以使用了,而不需要自己去手动安装,顶多需要进行一些特别的配置。但是我们程序员在遇到小众项目的时候,可能没有提供镜像,这时就要我们手动去安装,接着我们就来看看如何构建我们自己的Docker镜像。构建镜像有两种方式,一种是使用commit命令来完成,还有一种是使用Dockerfile来完成,我们先来看第一种。
这里我们就做一个简单的例子,比如我们现在想要在Ubuntu的base镜像中安装Java环境,并将其打包为新的镜像(这个新的镜像就是一个包含Java8环境的Ubuntu系统镜像)
第一种:commit命令(不推荐)
拉取Ubuntu镜像1
docker pull ubuntu
接着启动Ubuntu:1
docker run -it ubuntu
更新apt1
apt update
apt安装java环境1
apt install openjdk-8-jdk
安装完成后查看一下1
java -version
退出Ubuntu到Docker环境下1
exit
查看所有容器1
docker ps -a
使用commit命令将容器打包为新的镜像:1
docker commit 容器名称/ID 新的镜像名称
查看镜像1
docker images
可以看到我们的镜像已经被打包好了
这个方式存在一个问题,就是如果这个镜像不是我们构建的或者构建完过了一段时间,我们就不知道具体这个镜像的构建过程,也就是说我们不能确保这个镜像百分百安全,这就引出了下面这种构建方式
第二种:Dockerfile(推荐)
首先新建一个名为Dockerfile的文件:1
touch Dockerfile
vim打开Dockerfile进行编辑1
vi Dockerfile
Dockerfile内部需要我们编写多种指令来告诉Docker我们的镜像的相关信息
首先我们需要使用FROM指令来选择当前镜像的基础镜像(必须以这个指令开始),这里我们直接使用ubuntu作为基础镜像即可,当然如果不需要任何基础镜像的话,直接使用scratch表示从零开始构建:1
FROM ubuntu
在容器中运行RUN命令来安装Java环境了1
2RUN apt update
RUN apt install -y openjdk-8-jdk
每条指令执行之后,都会生成一个新的镜像层
退出并保存,运行build命令构建镜像1
docker build -t 镜像名称 构建目录
执行后,Docker会在构建目录中寻找Dockerfile文件,然后开始依次执行Dockerfile中的指令:
—tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。构建目录的.代表当前目录
构建完成后查看本地镜像1
docker images
我们可以使用history命令来查看构建历史1
docker history ubuntu-java2:latest
我们可以看到每一步我们构建的命令都成为了一个镜像,我们可以清楚地知道这个镜像是如何被构建的,而使用第一种方式构建的镜像是看不到具体构建命令的