Dockerfile

通过使用dockerfile自动构建新的镜像。

常用命令:

FROM 指定新镜像是基于哪个镜像制作(基础镜像)
LABEL 指定镜像的标签名(可选)
RUN 在创建镜像时运行的shell命令
COPY 拷贝文件或目录到该镜像中(推荐!少用ADD)
ADD 解压压缩包并复制
ENV 设置环境变量
USER 为RUN、CMD、ENTRYPOINT指令在执行命令时以什么用户身份执行。
EXPOSE 声明容器运行的服务端口(expose只是声明需要暴露的端口而已,并不是说你运行进行就会自动给你暴露端口,除非使用-p或者-P选项)
WORKDIR RUN、CMD、ENTRYPOINT、COPY、ADD命令的当前工作目录。如该目录不存在,WORKDIR 会帮建立指定的目录。
CMD 运行容器时默认执行的命令,
ENTRYPOINT

RUN 是在 docker build时运行。

CMD 在docker run 时运行。

CMD指令:

作用

为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。

CMD 指令指定的程序可以被 使用命令行docker run 参数中指定要运行的程序所覆盖。

注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。

格式:

CMD <shell 命令> 

CMD ["<可执行文件或命令>","<param1>","<param2>",...] 

CMD ["<param1>","<param2>",...]  # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数

推荐使用第二种格式,执行过程比较明确。

第一种格式实际上在运行的过程中也会自动转换成第二种格式运行,并且默认可执行文件是 sh。

RUN指令:

RUN <命令行命令> # <命令行命令> 等同于,在终端操作的 shell 命令。
  #多行命令可以写成:
  RUN yum -y install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && tar -xvf redis.tar.gz

RUN ["可执行文件", "参数1", "参数2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline

Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如:
FROM centos
RUN yum -y install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz

以上执行会创建 3 层镜像。可简化为以下格式:
FROM centos
RUN yum -y install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && tar -xvf redis.tar.gz

示例:

FROM centos:7
RUN yum install -y epel-release && \
        yum install -y nginx
CMD ["nginx", "-g","daemon off;"]

构建镜像命令docker build

docker build [OPTIONS] PATH|URL|- [上下文路径]
-t # 指定镜像名称和版本,如 mynginx:1.0.0 
-f # 指定Dockerfile文件的位置。Name of the Dockerfile (Default is 'PATH/Dockerfile')

# . 表示当前目录作为上下文路径
docker build -t swq/mynginx:v1 -f /swq/nginx.dockerfile . 

# dockerfile和构建目录不是同一个目录时,可以分开写
docker build -t swq/mynginx:v1 -f /swq/nginx.dockerfile /mypath

# 

上下文路径

上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。

如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。

注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。

posted @ 2023-10-23 11:22  蕝戀  阅读(3)  评论(0编辑  收藏  举报