拥抱云原生:Dockerfile
拥抱云原生:Dockerfile
先来写个简单的 Dockerfile
FROM alpine
LABEL maintanier='study'
RUN ["/bin/sh", "-c","ping -c 4 www.google.com"]
CMD sleep 10000
构建镜像
Claude-3
docker build --no-cache -t myping:latest .
Dockerfile
构成小析
FROM
docker 镜像一般需要依赖一个基础的环境,一般是
Linux
镜像
ChatGPT回答
LABEL
label 一般是定义一些镜像的诸如版本号,作者信息等元数据信息,我们一般是使用 key = value 的形式进行定义
RUN
在镜像构建构成中执行一些命令和指令
每一个
RUN
指定都会在当前镜像的基础上创建一个新的一层并执行指定的指令
ChatGPT
CMD
指定容器启动的时候默认执行的命令,如果运行容器时执行了其他的指定,
Dockerfile
中的CMD
指令会被覆盖
ChatGPT
ENTRYPOINT
和
CMD
类似,在容器启动的时候默认执行的命令它为构建的镜像提供了一个固定的入口,然容器可以像个可执行程序一样运行,同时接受额外的参数
ChatGPT
CMD
和 ENTRYPOINT
的异同(ChatGPT)
CMD 和 ENTRYPOINT 的组合说明
docker run --help
如何覆盖镜像中默认 CMD
Cladue-3
ChatGPT
ARG
可以定义变量,用户可以在构建的时候通过 --build-arg = 传递
--build-arg 指定的参数会覆盖 Dockerfile 指定的同名变量
arg 只有构建期有效,运行期无效
ChatGPT回答
ENV
Dockerfile
构建镜像的时候,设置的环境变量,可以在启动容器的时候使用-e
参数进行覆盖Dockerfile
中定义的值
Claude-3
ENV的固化问题
FROM nginx
AGR msg = hello
ENV env =$msg
CMD ['/bin/sh','-c','echo $msg','echo $env']
docker run -it --build-arg msg=3 ...
输出的结果
3
hello
Dockerfile 在我们构建镜像的时候,会把 环境变量固化到
ContainerConfig
查看镜像信息
docker image inspect nginx:latest
ADD
将源文件复制到镜像中。每一个指令会在镜像中增加一层
- 支持下载远程文件
- 支持解压压缩包
COPY
功能和
ADD
类似,将源文件复制到镜像中。每个指令都会都会在镜像中增加一层
ADD 和 COPY 的异同
ChatGPT
/dest
和 /dest/
Claude-3
Dockerfile 工作的上下文路径
docker build --no-cache -t myimage:lastest .
.
的意思
Claude-3
WORKDIR
Claude-3
USER
ChatGPT
VOLUME
ChatGPT
是否可以指定卷名称?
ChatGPT
关于 VOLUME
的一点小注意
FROM alpine
RUN echo "aaa" >> /app/a.txt
VOLUME ["/app","/logs"]
RUN echo "bbb" >> /app/a.txt
/app/a.txt 的最后内容是多少?
EXPOSE
ChatGPT
Docker 镜像的瘦身
dockerignore