9、Dockerfile语法与指令

简介

  • Dockfile是由一系列指令和参数构成的脚本,一个Dockerfile里面包含了构建整个镜像的完整命令。通过docker build执行Dockfile中的一系列指令自动构建镜像

Dockfile常用指令

  • FROM:基础镜像,FROM命令必须是Dockerfile的首个命令
  • LABEL:为镜像生成元数据标签信息
  • USER:指定运行容器时的用户名或UID他,后续RUN也会使用指定用户
  • RUN:RUN命令是Dockerfile执行命令的核心部分。它接受命令作为参数并用于创建镜像。每条RUN命令在当前基础镜像上执行,并且会提交一个新镜像层。
  • WORKDIR:设置CMD指明的命令的运行目录。为后续的RUN、CMD、ENTRYPOINT、ADD指令配置工作目录
  • ENV:容器启动的环境变量
  • ARG:构建环境的环境变量
  • COPY:复制文件
  • CMD:容器运行时执行的默认命令
  • ENTRYPOINT:指定容器的”入口“
  • HEALTHCHECK:容器健康状态检查
  • VOLUME: 挂载目录
  • EXPOSE:映射端口
  • STOPSIGNAL: 容器停止时执行的命令

演示

  • 使用Dockerfile构建nginx容器,添加容器健康检查
    Dockerfile文件内容:
# 基于 nginx:latest 镜像构建
FROM nginx:latest

# 指定信息
LABEL maintainer="www.moli.press"

# 设置环境变量
ENV NGINX_VERSION latest
ARG work_pwd=/data/html/

# 切换 root用户
USER root

# 执行命令,安装 curl 软件,设置软连接把 nginx 服务的日志显示到终端输出上
RUN apt-get -yq update && apt-get install -y curl && \
ln -sf /dev/stdout /var/log/nginx/access.log && \
ln -sf /dev/stderr /var/log/nginx/error.log

# 挂载卷
VOLUME ["/data"]

# 设置工作目录
WORKDIR $work_pwd

# 复制 index.html 文件到 WORKDIR目录下
COPY index.html .

# 映射80端口
EXPOSE 80

# 此处 CMD 作为 ENTRYPOINT 的参数
CMD ["nginx", "-g", "daemon off;"]
# CMD ["-g", "deamon off;"]
# CMD nginx -g deamon off
# 设置容器启动的命令
# ENTRYPOINT ["nginx", "-g", "daemon 0ff;"]

STOPSIGNAL SIGRTMAX

# 检查容器健康,通过访问 Nginx 服务 80 端口,来判断容器服务是否正常
HEALTHCHECK --interval=5s --timeout=3s \
  CMD curl -fs http://xxx/ || exit 1
# -t 表示给镜像起标签为n:1
docker build -t n:1 . 
[root@moli learn_dockerfile]# docker build -t n:1 .
Sending build context to Docker daemon  62.46kB
Step 1/13 : FROM nginx:latest
 ---> 605c77e624dd
...
Step 13/13 : HEALTHCHECK --interval=5s --timeout=3s   CMD curl -fs http://www.moli.press/ || exit 1
 ---> Using cache
 ---> e98400210fee
Successfully built e98400210fee
Successfully tagged n:1
[root@moli learn_dockerfile]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
n                             1                   e98400210fee        30 minutes ago      162MB
[root@moli ~]# docker run -d -p 7687:80 n:1
61e946d11512195cd22f0896ed19a5b7becea588abc180c29ac1d939d96a281b

浏览器访问7687端口可以访问页面

你可能感兴趣的:(docker)