docker-compose部署线上项目爬坑记(二)

日期:2021年5月7日 01:25 作者:adminBY 阅读(1962) 评论(0)

上篇介绍了docker-compose文件配置各个服务容器,这篇接着介绍怎样用docker创建自己的镜像。创建自己的镜像文件要用到Dockerfile文件来制作,下面来讲解怎样运用Dockerfile脚本文件。

Dockerfile是什么

我们平时使用的镜像大部分都是从官方镜像仓库或是第三方镜像仓库里拉取下来的。但是当我们想要自定义一个自己的镜像,比如我们需要用自己的项目制作一个镜像要怎么做呢?接下来要讲的这个Dockerfile就跟构建自定义镜像有关。首先它是一个脚本文件,文本内容就是构建镜像的指令和一些说明。

Dockefile基本结构

FROM nginx:latest
ARG project_dir = /var/www/
RUN mkdir -p ${project_dir}
WORKDIR ${project_dir}
COPY ./porject .

上面就是Dockerfile文件的基本样式

指令详解

Dockerfile文件说明

docker是从上到下运行Dockerfile文件的。为了指定基本镜像,开头第一个指令必须是FROM。一个声明以#开头被视为注释。 - FROM:指定基础镜像,必须为第一个命令

FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
注:
  tag或digest是可选的,如果不使用这两个值时,会使用latest版本的基础镜像
  • MAINTAINER:维护者信息
MAINTAINER <name>
示例:
    MAINTAINER Bymeetu
    MAINTAINER From@163.com
    MAINTAINER Bymeetu<From@163.com>
  • RUN:构建镜像时执行的命令
RUN <command>
注:
    RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定--no-cache参数,如:docker build --no-cache
  • ADD:将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
ADD <src>... <dest>
示例:
    ADD hom* /mydir/          # 添加所有以"hom"开头的文件
    ADD hom?.txt /mydir/      # ? 替代一个单字符,例如:"home.txt"
    ADD test relativeDir/     # 添加 "test" 到 `WORKDIR`/relativeDir/
    ADD test /absoluteDir/    # 添加 "test" 到 /absoluteDir/
  • COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
  • CMD:构建容器后调用,也就是在容器启动时才进行调用。
CMD command param1 param2 (执行shell内部命令)
CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数)
CMD ["executable","param1","param2"] (执行可执行文件,优先)
示例:
    CMD echo "This is a test." | wc -
    CMD ["/usr/bin/wc","--help"]
  • ENV:设置环境变量。
ENV <key> <value>
ENV <key>=<value>
示例:
    ENV myCat=fluffy
  • EXPOSE:指定于外界交互的端口
EXPOSE <port> [<port>...]
示例:
    EXPOSE 80 443
    EXPOSE 8080
注:
    EXPOSE并不会让容器的端口访问到主机。要使其可访问,需要在docker run运行容器时通过-p来发布这些端口,或通过-P参数来发布EXPOSE导出的所有端口
  • VOLUME:用于指定持久化目录
VOLUME ["/path/to/dir"]
示例:
    VOLUME ["/data"]
注:
    一个卷可以存在于一个或多个容器的指定目录,该目录可以绕过联合文件系统
  • WORKDIR:工作目录,类似于cd命令
WORKDIR /path/to/workdir
示例:
    WORKDIR /a  (这时工作目录为/a)
    WORKDIR b  (这时工作目录为/a/b)
    WORKDIR c  (这时工作目录为/a/b/c)
注:
    通过WORKDIR设置工作目录后Dockerfile中其后的命令RUNCMDENTRYPOINTADDCOPY等命令都会在该目录下执行。在使用docker run运行容器时,可以通过-w参数覆盖构建时所设置的工作目录
  • USER:指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户
USER user
USER user:group
示例:
USER www
注:
    使用USER指定用户后Dockerfile中其后的命令RUNCMDENTRYPOINT都将使用该用户。镜像构建完成后,通过docker run运行容器时,可以通过-u参数来覆盖所指定的用户
  • ARG:用于指定传递给构建运行时的变量
ARG <name>[=<default value>]
示例:
    ARG site
    ARG build_user=www
  • ONBUILD:用于设置镜像触发器
ONBUILD [INSTRUCTION]
示例
    ONBUILD ADD . /app/src
    ONBUILD RUN /usr/local/bin/python-build --dir /app/src

    当所构建的镜像被用做其它镜像的基础镜像该镜像中的触发器将会被钥触发

开始构建镜像

上一篇文章说过使用docker-compose来构建镜像,使用命令docker-compose build。也可以直接使用docker build -t nginx:latest .
最后的一个.代表了Dockerfile文件所在路径。


您未登录,请登录注册后评论

0 人参与 | 0 评论
暂时没有评论内容,欢迎来尬聊!