1.熟悉Dockerfile

        一般,Dockerfile分为四个部分:基本镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。其中基本镜像信息必须放在第一行。

        常见指令:

1.FROM <image> :必须为第一条指令,同一个Dockerfile中可以使用多个From指令,代表多个基本镜像。

2.MAINTAINER <name>:维护者信息

3.RUN <command> 或RUN ["executable","param1","param2"]:前者在shell终端中运行命令,后者则使用exec执行。每条RUN指令将在当前镜像基础上执行指定命令,并提交为新的镜像。

4.CMD

CMD ["executable","param1","param2"]:使用exec执行,推荐使用

CMD command param1 param2:在/bin/sh中执行,提供给需要交互的应用。

CMD ["param1","param2"]:提供给ENTRYPOINT的默认参数

注意:指定启动容器时执行的命令,每个Dockerfile只能有一条CMD命令,如果执行了多条命令,只有最后一条会被执行。

    一般的,有以上四个主要指令即可完成Dockerfile的编写。

2.实践操作

       1. 本示例操作环境是在Ubuntu 18.04上,首先创建一个文件夹(建议创建一个空文件夹单独放Dockerfile文件),然后创建一个Dockerfile文件,主要指令如下:

mkdir mydocker
cd mydocker
touch Dockerfile

2.然后输入指令:sudo vim Dockerfile进入文件,以下是文件内容。

#基础镜像
FROM ubuntu
#维护者信息
MAINTAINER carson carson@email.com
#镜像的操作指令
RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server
#容器启动时的执行命令
CMD /user/sbin/nginx

3.编辑完Dockerfile后使用docker build 指令来生成镜像

docker build -t myngix .

运行过程如下所示:

Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM ubuntu
latest: Pulling from library/ubuntu
898c46f3b1a1: Pull complete 
63366dfa0a50: Pull complete 
041d4cd74a92: Pull complete 
6e1bee0f8701: Pull complete 
Digest: sha256:017eef0b616011647b269b5c65826e2e2ebddbe5d1f8c1e56b3599fb14fabec8
Status: Downloaded newer image for ubuntu:latest
 ---> 94e814e2efa8
Step 2/4 : MAINTAINER carson carson@email.com
 ---> Running in 249b9906df1e
Removing intermediate container 249b9906df1e
 ---> 52405a1c5e86
Step 3/4 : RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server
 ---> Running in 632aecb6a805
.......
Processing triggers for systemd (237-3ubuntu10.15) ...
Removing intermediate container 632aecb6a805
 ---> 32a53712c6a7
Step 4/4 : CMD /user/sbin/nginx
 ---> Running in c8f5c7bea2e4
Removing intermediate container c8f5c7bea2e4
 ---> ee7eb130c4f8
Successfully built ee7eb130c4f8
Successfully tagged mynginx:latest

        由上面过程可以看出,主要分为4步,Dockerfile每一条指令为一步,并且每一步都会创建一个容器中,在容器中执行指令并提交修改,所有指令都执行完之后,返回了最终的镜像id(上面最后返回的镜像id为ee7eb130c4f8),中间的容器都被清理。

4.最后查看镜像:sudo docker images,如下图所示,最终只有一个需要的mynginx镜像,而且镜像id也是ee7eb130c4f8。

 

 

        以上讲述了通过Dockerfile文件来创建镜像,其实docker commit也可以创建镜像。但是通过国Dockerfile文件创建镜像可以实现共享。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐