DockerBuild
Docker Build
#Docker
1 1. 说明
之前介绍过用 commit 的方式生成新的 Docker Image,今天介绍用 Build 方式做 image,Build 方式需要写一个配置文件,然后利用当前是已存在的 image,按照配置文件进行调整生成新的 image。
相对来说,commit 方法更随意,我们用它将现场保存为 image,而 build image 生成的 image 更“干净”。
2 2. 基本操作
2.1 看当前环境
1 | $ docker images |
看一下当前的 image,确定新的 image 是基于哪个 image,记下它的大版本号 (REPOSITORY) 和小版本号 (TAG)。
2.2 写配置文件 Dockerfile
1 | $ vi Dockerfile |
写入以下内容,我这里是安装了一个新 python 包 pyecharts
1 | FROM 基础大版本号:基础小版本号 |
2.3 BUILD 新的 Docker image
1 | $ docker build -t 新的大版本号: 新的小版本号 . |
此时 docker 会从当前目录”.”中读取 Dockerfile,并按其设置建立新的 image
2.4 查看是否 BUILD 成功
1 | $ docker images |
3 3. Dockerfile 常用命令
- FROM: 制作 image 时依据的基本 image
- RUN:制作 image 时执行的命令,一般在 Dockerfile 中多次出现
- CMD:启动 docker 时执行的命令,在 Dockerfile 中只出现一次
- ENV:设置环境变量
- COPY:制作 image 时,将文件系统中的文件复制到 Docker 镜像中
- WORKDIR:设置工作目录
- EXPOSE:设置向外暴露的端口
- VOLUME:设置容器与外界映射的目录
4 docker build 时设代理
4.1 使用 Docker 的系统级配置
Docker系统设置 中代理设置部分
5 BuildKit
BuildKit 是新的构建引擎,默认在 Docker 18.09+ 引入,用来替代旧的构建流程。
BuildKit 默认构建网络隔离,BuildKit 并不会自动继承
--build-arg
到网络请求。有时 DNS
或代理会失效,如果网络有问题导致卡死,可加参数
--network=host
新的 docker compose build
默认就启用了
BuildKit,不再需要手动设
DOCKER_BUILDKIT=1
,如果显示已经不是从前的风格,说明自动开启了
DOCKER_BUILDKIT。
风格示例
1 | #1 [internal] load build definition from Dockerfile |
6 调试
6.1 在 Dockerfile 中查看环境变量
1 | RUN echo "=== Proxy ===" && \ |
注意运行时加参数:--progress=plain
,否则不显示 RUN
的结果,另外,可能还需要加参数
--no-cache
,以免有些结果被缓存不再执行。
6.2 清理 build cache
1 | $ docker builder prune -f |
6.3 测试连接速度
1 | $ curl -o /dev/null -s -w "连接时间: %{time_connect}s\n下载速度: %{speed_download} bytes/s\n总时间: %{time_total}s\n" http://xxx/ |
7 4. 参考
- Docker 入门 02——Dockerfile 详解
- http://www.cnblogs.com/sorex/p/6481407.html
看/sbin/init 由谁提供:
1 | dpkg -L systemd-sysv | grep /sbin/init |
此外,“初始化”仅仅是 systemd 一个符号链接:
1 | $ ls -lthd /sbin/init |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.