dockerfile 详解

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

会在构建时插入触发器指令

 

 

原文地址:https://www.cnblogs.com/faberbeta/p/13395832.html