Docker使用Dockerfile构建新的镜像

构建镜像步骤;

1、创建Dockerfile文件,该文件是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

vim Dockerfile

//每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的
FROM    centos:7

//下面的两条指令可以简写为:
//RUN     /bin/echo 'root:123456' | chpasswd   、
//       && /bin/echo -e "LANG=\"en_US.UTF-8\"">/etc/default/local
RUN     /bin/echo 'root:123456' | chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"">/etc/default/local

//声明端口
EXPOSE  22
EXPOSE  80

//类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:
//RUN指令是在构建镜像docker build是生效;
//CMD是在运行镜像Docker run时生效
CMD     /usr/sbin/sshd -D

通过Docker build指令构建新的镜像

docker build -t runoob/centos:7 .
//    -t:指定要创建的目标镜像名
//    runoob/centos:7:镜像名
//    "." :表示Dockerfile文件所在的路径

其它指令说明

1、COPY:从上下文目录中复制文件到容器中的指定位置

格式:
    COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>

例如:
    COPY hom?.txt  /mydir/

注意:可以使用“?”或“*”等通配符。

2、ADD:类似于COPY的功能,可以把本地文件添加到容器中的指定配置

格式:
    ADD [--chown=<user>:<group>] <源路径1>...  <目标路径>
    

3、ENTRYPOINT:类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。但是, 如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 ENTRYPOINT 指令指定的程序。如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。

格式:
    ENTRYPOINT ["<executeable>","<param1>","<param2>",...]
//可以搭配 CMD 命令使用:一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参
FROM nginx
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参 

4、ENV:设置环境变量,后续就可以以 {$变量名}使用它

格式:
    ENV <key> <value>  
//以键值对的形式存在
例如;设置NODE_VERSION = 7.2.0 

ENV NODE_VERSION 7.2.0
RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \
  && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc"

5、ARG:与ENV的作用一致,但作用域仅在Dockerfile内有效,就是说仅在Docker build的过程中有效

格式:
    ARG <参数名>[=<默认值>]

6、VOLUME:定义数据卷,在启动容器时会自动挂载到匿名卷。作用:避免重要的数据丢失。

格式:
    VOLUME ["<路径1>", "<路径2>"...]

7、WORKDIR:指定工作目录。注意:指定的目录必须提前创建好。

格式:
    WORKDIR <工作目录路径>

8、USER:用于指定执行后续命令的用户和用户组。注意:用户和用户组必须提前存在。

格式:
    USER <用户名>[:<用户组>]

9、HEATHCHECK:用来指定某个程序或指令来监控docker容器服务的运行状态。

格式:
    HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令
    HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令

10、ONBUILD:用于延迟构建命令的执行。通俗来说,就是本次使用Dockerfile文件构建镜像(假设本次构建的镜像是Nginx_test)不会执行该命令,当有新的Dockerfile文件中使用FROM Nginx_test构建新的镜像时会执行该命令。

格式:
    ONBUILD <指令>

11、LABEL:以键值对的形式给镜像添加一些元数据。

格式:
    LABEL <key>=<value> <key>=<value> <key>=<value> ...
例如:添加镜像的作者
    LABEL org.opencontainers.image.authors="runoob"

 

posted @ 2022-02-08 23:04  干了这瓶老干妈  阅读(393)  评论(0编辑  收藏  举报
Live2D