@TOC
docker install
dockerfile
FROM
FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
FROM
命令是一个 Dockerfile 的起始命令 创建基本的镜像ARG
命令是唯一 一个可以出现在FROM
命令之前的 命令 通常用来指定 要拉取基础镜像的tag
理解他与FROM
是怎样交互的FROM
命令可以出现多次,可以当作下面FROM
的依赖阶段,需要注意的是 每个FROM
命令 都会清除掉之前FROM
所创建的状态
ARG 与 FROM 的交互
ARG CODE_VERSION=latest
FROM base:${CODE_VERSION}
CMD /code/run-app
FROM extras:${CODE_VERSION}
CMD /code/run-extras
- 定义在 一个
FROM
之前的ARG
是独立于所构建的镜像状态之外的,所以他不能用在FROM
之后的任何命令内 - 但是如果要使用 定义在
FROM
之前的ARG
的默认初始值,那么可以 在FROM
之后再次声
ARG VERSION=latest
FROM busybox:$VERSION
ARG VERSION
RUN echo $VERSION > image_version
实验
Dockerfile
ARG VERSION=5.7.41
FROM mysql:${VERSION}
ARG VERSION
ENV MYSQL_ROOT_PASSWORD=myrootpass \
MYSQL_DATABASE=yq_crawler \
MYSQL_USER=crawler \
MYSQL_PASSWORD=123456
RUN echo $VERSION > version_image
sudo docker build . -t mysql-test:0.1
sudo docker run -d -p 3306:3306 --name mysql-test mysql-test:0.1
sudo docker exec -it mysql-test-1 bash
RUN
docker 以 层 的方式构建镜像.......
RUN
命令有两种form- RUN 在shell中运行 linux上默认为 /bin/sh -c
- exec from
RUN ["executable","p1","p2"]
RUN
命令会在 当前最顶层上提交结果,被提交的新的镜像会被Dockerfile的下一步使用
RUN /bin/bash -c 'source $HOME/.bashrc && echo $HOME' # Shell form
RUN ["/bin/bash","-c","source $HOME/.bashrc && echo $HOME"]
RUN
命令的cache不会被自动消除,除非在构建镜像的时候指定docker build --no-cache .
,- 第一个
ADD
或者COPY
命令中的<src>
内容发生变化,则会使 这以下的 Dockerfile 中的缓存全部失效 包括 对于RUN
生成的cache ,
ARG VERSION=latest
FROM alpine:$VERSION
RUN ["apk", "add", "git"]
RUN ["git","clone", "https://github.com/jyxzwd/jyxzwd.github.io.git"]
--no-cache
ADD https://s2.loli.net/2022/06/19/iO3N8W6V41DZE7a.jpg /tmp/test.jpg
ADD 命令之后的cache全部失效
ARG VERSION=latest
FROM alpine:$VERSION
ADD https://s2.loli.net/2022/06/19/iO3N8W6V41DZE7a.jpg /tmp/test.jpg
RUN ["apk", "add", "git"]
RUN ["git","clone", "https://github.com/jyxzwd/jyxzwd.github.io.git"]