dockerfile指令
mkdir -p /root/dockerfile/nginx cd /root/dockerfile/nginx echo "Hellow Docker" > index.html vim dockerfile
FROM centos:7 MAINTAINER faberbeta "565441850@qq.com" RUN yum install net-tools epel-release -y RUN yum install nginx -y COPY index.html /usr/share/nginx/html/ VOLUME ["/usr/local/nginx/html/","/usr/local/nginx/logs/"] EXPOSE 80 ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
根据/root/dockerfile/nginx中的dockerfile构建新镜像harbor.zhufunin.com:1443/common/nginx:simple
新的镜像名称是新镜像harbor.zhufunin.com:1443/common/nginx:simple 为什么弄的这么复杂?
因为是为了push到仓库harbor.zhufunin.com:1443/common/方便,具体的自建仓库知识,请参考https://www.cnblogs.com/faberbeta/p/12861032.html
docker build -t "harbor.zhufunin.com:1443/common/nginx:simple" /root/dockerfile/nginx
后台启动docker
docker run --name=hello_nginx -d -P nginx:simple
进入docker
docker ps -a | grep hello_nginx
docker exec -it hello_nginx /bin/bash
(1)FROM
基础镜像,必须是可以下载下来的
(2)MAINTAINER
指定镜像的作者信息
(3)RUN:指定在当前镜像构建过程中运行的命令
包含两种模式
1.shell模式
RUN <command> (shell模式,这个是最常用的,需要记住)
RUN /bin/sh -c command
RUN echo hello
2.exec模式
RUN ["executable", "param1", "param2"](exec模式)
RUN ["/bin/bash","-c","echo hello"]
(4)EXPOSE指令
指定运行该镜像容器使用的端口,可以是一个或者多个端口,也可以指定多个EXPOSE
运行的时候加-P,系统会自动分配一个随机的对外端口
(5) CMD(该指令是在容器运行时执行的命令,docker run 启动的时候如果指定参数,则会覆盖dockerfile中的CMD后面的内容的)
CMD["executable","param1","param2"](exec模式)
CMD command param1 param2 (shell模式)
CMD ["param1","param2"](作为ENTRYPOINT指令的默认参数)
(6) ENTERYPOINT
ENTERYPOINT ["executable","param1","param2"](exec模式)
ENTERYPOINT command param1 param2 (shell模式)
ENTRYPOINT和CMD区别
使用ENTRYPOINT,docker run运行时如果指定参数不会覆盖dockerfile中ENTRYPOINT后面的内容
使用CMD,docker run运行时如果指定参数会覆盖dockerfile中CMD后面的内容
(7) ADD (很少用)
如果ADD的是一个压缩包,会自动解压到目的地
ADD <src>...<dest>
ADD [“<src>”...“<dest>”]
(8) COPY
COPY<src>..<dest>
COPY[“<src>”...“<dest>”]
ADD vs COPY
ADD包含类似tar的解压功能
如果单纯复制文件,docker推荐使用COPY
(9)VOLUME
在镜像系统中添加新的文件夹
VOLUME ["/data","/data2"]
对数据有持久化的功能
(10)WORKDIR(填写绝对路径)
WORKDIR /path/to/workdir
(11)ENV
设置环境变量
ENV <key><value>
ENV <key>=<value>...
(12)USER
USER daemon
USER nginx
USER user
USER uid
USER user:group
USER uid:gid
USER user:gid
USER uid:group
(13)ONBUILD
ONBUILD [INSTRUCTION]
为镜像添加触发器
当一个镜像被其他镜像作为基础镜像时需要写上OBNBUILD
会在构建时插入触发器指令