从容器构建-容器经过反复修改,但不知道具体的修改历史;不熟悉dockerfile指令
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c3f279d17e0a ubuntu:12.04 /bin/bash 7 days ago Up 25 hours desperate_dubinsky
197387f1b436 ubuntu:12.04 /bin/bash 7 days ago Up 25 hours focused_hamilton
$ docker commit --change='CMD ["apachectl", "-DFOREGROUND"]' -c "EXPOSE 80" c3f279d17e0a svendowideit/testimage:version4
f5283438590d
$ docker run -d svendowideit/testimage:version4
89373736e2e7f00bc149bd783073ac43d0507da250e999f3f1036e0db60817c0
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
89373736e2e7 testimage:version4 "apachectl -DFOREGROU" 3 seconds ago Up 2 seconds 80/tcp distracted_fermat
c3f279d17e0a ubuntu:12.04 /bin/bash 7 days ago Up 25 hours desperate_dubinsky
197387f1b436 ubuntu:12.04 /bin/bash 7 days ago Up 25 hours
从dockerfile构建-了解镜像的构建步骤;熟悉dockerfile指令
docker build dockerfile
参考dockerfile官方文档
FROM
dockerfile的起点,指定镜像构建依赖的基础镜像。
LABEL
指定镜像的元数据(键值对)(比如指定作者:maintainer=xxl)。
ENV
指定环境变量,推荐键值对(key=value)的方式。
WORKDIR
指定RUN, CMD, ENTRYPOINT, COPY和ADD的工作目录,可多次设置,每次设置后对后面生效。
ADD-可以是远程文件
从源地址复制新的文件,目录或者远程文件url,并把它们添加到镜像的目标路径。
COPY-不能是远程文件
从源目录复制新的文件或者目录,并且把它们添加到容器的目标路径。
EXPOSE
指定容器运行时监听的端口,可以指定协议udp/tcp,不指定的话默认是tcp。
EXPOSE 80/udp
VOLUME
指定容器的挂载点,并把它作为宿主或者其他容器的外部挂载卷。
RUN
执行过程命令,比如创建文件夹,开启配置等,可以有多个,每个都生效。
CMD
指定默认的执行命令,可以有多个,但只最后一个生效,能够被docker run命令行指定的命令重载。
ENTRYPOINT
把镜像配置成可以像可执行文件一样运行,
USER
指定镜像运行时或者执行RUN、CMD、ENTRYPOINT命令时所处的用户名和用户组。