拥抱云原生: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



