【读书笔记-首页】基于世界500强的高薪实战Kubernetes课程
docker build 构建镜像时运行
docker run -P 时,会自动随机映射 EXPOSE 的端口。
可以指定多个 EXPOSE
EXPOSE <端口 1> [<端口 2>...]
docker run 时运行
程序运行结束,容器也就结束
CMD 指令指定的程序可被docker run 命令行参数中指定要运行的程序所覆盖
exec 模式 如:CMD [“程序名”,“参数1”,“参数2”]
Shell 模式 如:CMD command
类似于 CMD 指令,但不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。
docker run 时 --entrypoint 选项,将覆盖 entrypoint 指令指定的程序
优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需参数
注意: Dockerfile 中多个 ENTRYPOINT 指令,仅最后一个生效
ENTERYPOINT [“程序名”,“参数1”,“参数2”](exec 模式)
ENTERYPOINT command (shell 模式)
一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参
> 假设已通过 Dockerfile 构建了 nginx:test 镜像:
FROM nginx
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参
$ docker run nginx:test
容器内会默认运行以下命令,启动主进程。
nginx -c /etc/nginx/nginx.conf
$ docker run nginx:test -c /etc/nginx/new.conf
容器内会默认运行以下命令,启动主进程
nginx -c /etc/nginx/new.conf
(/etc/nginx/new.conf:假设容器内已有此文件)
COPY [--chown=
COPY [--chown=
可选参数,用户改变复制到容器内文件的拥有者和属组。
源文件/目录,支持 Go 的 filepath.Match 通配符
例如:
COPY hom* /mydir/
COPY hom?.txt /mydir/
容器内的指定路径,路径不存在,会自动创建
自动解压 为 tar<源文件> 到 <目标路径>
在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。
cd /root/dockerfile/test1
cat dockerfile
FROM centos
MAINTAINER xianchao
RUN yum install wget -y
RUN yum install nginx -y
COPY index.html /usr/share/nginx/html/
EXPOSE 80
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
# 构建镜像,并打标签(-t <标签名> ,其中t为tag)
docker build -t="dockerfile/copy:v1" .
# 根据镜像运行容器,-d <后台运行> ,-p <容器内端口> ,--name <容器名>
docker run -d -p 80 --name html3 dockerfile/copy:v1
# 查看所有镜像 , grep <过滤名称>
docker ps | grep html3
478868402ac4 dockerfile/copy:v1 "/usr/sbin/nginx -
g …" 15 seconds ago Up 12 seconds 0.0.0.0:32771->80/tcp html3
curl 192.168.40.180:32771 显示的就是替换后的页面
避免重要的数据,因容器重启而丢失,这是非常致命的。
避免容器不断变大
docker run 通过 -v 参数修改挂载点
VOLUME ["<路径 1>", "<路径 2>"...]
VOLUME <路径>
用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在
每一个 RUN 命令都是新建的一层
只有通过 WORKDIR 创建的目录才会一直存在
WORKDIR <工作目录路径>
WORKDIR /path/to/workdir
ENV
ENV
以下示例设置 NODE_VERSION =6.6.6,
在后续的指令中可以通过 $NODE_VERSION 引用: ENV NODE_VERSION 6.6.6
RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz"
\
&& curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc"
USER daemon
USER nginx
USER user
USER uid
USER user:group
USER uid:gid
USER user:gid
USER uid:group
Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行(假设镜像为 test-build)。当有新的 Dockerfile 使用了之前构建的镜像 FROM test-build ,构建时会执行 test-build 的 Dockerfile 里的 ONBUILD 指定的命令。
当一个镜像被其他镜像作为基础镜像时需要写上 OBNBUILD ,会在构建时插入触发器指令
LABEL
LABEL org.opencontainers.image.authors="lijiong"
HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况
HEALTHCHECK NONE:屏蔽基础镜像自带的健康检查
HEALTHCHECK [选项] CMD <命令> : 参考 CMD 的用法
作用域:仅对 Dockerfile 内有效,即只有 docker build 中有效
docker build 中用 --build-arg <参数名>=<值> 来覆盖
ARG <参数名>[=<默认值>]