Ubuntu下利用Dockerfile创建镜像
1.熟悉Dockerfile一般,Dockerfile分为四个部分:基本镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。其中基本镜像信息必须放在第一行。常见指令:1.FROM <image> :必须为第一条指令,同一个Dockerfile中可以使用多个From指令,代表多个基本镜像。2.MAINTAINER <name>...
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文件创建镜像可以实现共享。
更多推荐
所有评论(0)