016、Dockerfile 常用命令(2019-01-07 周一)
Dokcerfile常见命令
FROM
指定base镜像
MAINTAINER
标记镜像的作者,可以是任意字符串
COPY
将文件从 build context 复制到镜像
COPY支持两种形式:
1、 COPY src dest
2、 COPY ["src","dest"]
ps: src 只能指定 build context 中的文件或者目录
ADD
与COPY类似,从 build context 复制文件到镜像
不同的是如果src是归档文件(tar、zip、tgz、xz等),文件会被自动解压到dest
ENV
设置环境变量,环境变量可以被后面的指定使用
EXPOSE
指定容器中的进程会监听哪个端口,Docker 可以将该端口暴露出来
VOLUME
将文件或者目录声明为VOLUME
WORKDIR
为后面的 RUN、CMD、ENTRYPOINT、ADD和COPY指令设置镜像中的当前工作目录
RUN
在容器中运行指定的命令
CMD
容器启动时运行指定的命令
Dockerfile 中可以有多个CMD指令,但是只有最后一个生效。CMD可以被docker run之后的参数替换
ENTYRPOINT
设置容器启动时运行的命令
Dockerfile中可以有多个ENTYRPOINT指令,但只有最后一个生效。CMD或docker run后的参数会被当做参数传递给ENTRYPOINT
root@docker-lab:~/016# ls -l # 查看build context内容
total 12
-rw-r--r-- 1 root root 216 Jan 7 14:19 Dockerfile
-rw-r--r-- 1 root root 157 Jan 7 14:21 test_add_file.tar.gz
-rw-r--r-- 1 root root 51 Jan 7 14:20 test_copy_file
root@docker-lab:~/016# cat Dockerfile # 查看Dokcerfile内容
# This is my first image # 注释部分
FROM busybox # 以busybox镜像为基础进行构建
MAINTAINER https://www.cnblogs.com/www1707 # 作者信息
WORKDIR /testdir # 设置镜像中的当前目录
RUN touch testfile # 创建一个空文件
COPY test_copy_file . # 从build context拷贝一个文件到镜像中
ADD test_add_file.tar.gz . # 将 tar.gz 文件解压到镜像中
ENV WELCOME "You are in my container , welcome !" # 在镜像中添加一个WELCOME的变量
root@docker-lab:~/016# tar -tvf test_add_file.tar.gz
-rw-r--r-- root/root 0 2019-01-07 14:20 tar_gz_a
-rw-r--r-- root/root 0 2019-01-07 14:20 tar_gz_b
-rw-r--r-- root/root 0 2019-01-07 14:20 tar_gz_c
-rw-r--r-- root/root 0 2019-01-07 14:20 tar_gz_d
root@docker-lab:~/016# cat test_copy_file
-----------------
test_copy_file
-----------------
root@docker-lab:~/016# docker build -t myimage .
Sending build context to Docker daemon 4.096kB
Step 1/7 : FROM busybox
latest: Pulling from library/busybox
57c14dd66db0: Pull complete
Digest: sha256:b6e640a3768c460ad6066a003b6da52034c31aaf8500f9263057ddffcd830ef6
Status: Downloaded newer image for busybox:latest
---> 3a093384ac30
Step 2/7 : MAINTAINER https://www.cnblogs.com/www1707
---> Running in d8b4503fd90d
Removing intermediate container d8b4503fd90d
---> 3de3f5987213
Step 3/7 : WORKDIR /testdir
Removing intermediate container 1ffe55213785
---> acbe13b30785
Step 4/7 : RUN touch testfile
---> Running in 97513a85bf15
Removing intermediate container 97513a85bf15
---> 3299ecfc7cd6
Step 5/7 : COPY test_copy_file .
---> fb808779db38
Step 6/7 : ADD test_add_file.tar.gz .
---> b6a1f8da1796
Step 7/7 : ENV WELCOME "You are in my container , welcome !"
---> Running in b672d00ec977
Removing intermediate container b672d00ec977
---> c67728621bdd
Successfully built c67728621bdd
Successfully tagged myimage:latest
root@docker-lab:~/016# docker run -it myimage
/testdir # echo $WELCOME # 验证ENV变量是否设置成功
You are in my container , welcome !
/testdir # ls # 验证RUN、COPY、ADD是否成功
tar_gz_a tar_gz_b tar_gz_c tar_gz_d test_copy_file testfile
/testdir # pwd # 验证WORKDIR是否成功
/testdir
/testdir # cat test_copy_file # 验证COPY是否成功
-----------------
test_copy_file
-----------------