Docker 的安装部署与基本使用
目录
Docker 安装与部署
卸载旧版本
更新 apt 包索引
添加 Docker 的官方 GPG 密钥
使用以下指令设置稳定版仓库
更新 apt 包索引
安装 Docker Engine-Community
检查版本
Docker 的基本使用
Dockerfile 常见构建指令
Docker 镜像优化方案
Docker 跨平台构建
多阶段构建
Docker 安装与部署
卸载旧版本
Docker 的旧版本被称为 docker,docker.io 或 docker-engine 。如果已安装,请卸载它们:
apt-get remove docker docker-engine docker.io containerd runc
更新 apt 包索引
apt update
apt -y install apt-transport-https ca-certificates curl software-properties-common
添加 Docker 的官方 GPG 密钥
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
使用以下指令设置稳定版仓库
add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
更新 apt 包索引
apt update
安装 Docker Engine-Community
apt -y install docker-ce docker-ce-cli containerd.io
检查版本
docker -v
Docker 的基本使用
-
运行容器 docker run -e 传递环境变量 -v 持久化存储
-
列出容器 docker ps -a 列出当前机器上所有的容器 -q 只列出容器的 id
-
查看容器详情 docker inspect 容器id或者容器名称
-
停止容器 docker stop / docker kill
-
删除容器 docker rm -f(强制删除)
-
进入容器 docker exec -it /bin/bash
-
暂停容器 docker pause
-
从暂停中恢复 docker unpause
-
启动容器 docker start
-
重启容器 docker restart
-
限制 cpu docker run --cpus
-
限制内容 docker run -m
-
拉取镜像 :docker pull
-
列出镜像 :docker image ls
-
查看镜像 : docker image inspect
-
删除镜像 :docker rm -f
-
给镜像打标签 :docker tag source_image dest_image
-
上传镜像 :docker push
Dockerfile 常见构建指令
-
FROM:指定基础镜像,所有后续操作都基于这个镜像。
-
RUN:执行命令,通常用于安装软件包或执行脚本。
-
CMD:容器启动时默认执行的命令。
-
EXPOSE:声明容器运行时监听的端口,不会发布端口,只是作为文档说明使用。
-
ENV:设置环境变量。
-
ADD:将文件、目录或远程文件URL添加到容器中。
-
COPY:复制本地文件或目录到容器中,相比 ADD,COPY 不会解压缩归档文件或处理 URL。
-
ENTRYPOINT:配置容器启动时运行的可执行文件。
-
VOLUME:创建一个可以从本地主机或其他容器挂载的挂载点。
-
USER:指定运行容器时的用户名或 UID。
-
WORKDIR:设置工作目录,即容器内部的当前目录。
-
ARG:定义构建时的变量,可以在构建时通过 --build-arg 指定。
-
LABEL:为镜像添加元数据,通常用于描述信息。
-
STOPSIGNAL:设置停止容器时使用的系统调用信号。
-
HEALTHCHECK:定义如何检查容器是否健康。
-
-- interval 检查周期
-
-- retries 重试次数
-
-- timeout 超时时间
-
Docker 镜像优化方案
-
使用精简的基础镜像: 选择一个精简的基础镜像,如 Alpine Linux,可以显著减小镜像大小。
-
合并 RUN 指令: 多个
RUN
指令可以合并为一个,以减少镜像层数,加速构建和分发。 -
利用缓存: 合理安排 Dockerfile 中的指令顺序,使得不会频繁变动的层可以被缓存。
-
清理工作目录: 使用
RUN apt-get clean
或类似的命令清理临时文件和缓存,减小镜像大小。 -
删除不必要的文件: 在构建过程中删除不需要的文件和目录,例如
.dockerignore
文件中指定的文件。 -
使用多阶段构建: 使用多阶段构建来减小最终镜像大小,编译时使用一个包含所有工具的基础镜像,最终只保留编译产物。
-
优化软件包管理器: 使用
yum
或apt-get
的参数来减小软件包管理器安装软件后产生的缓存和临时文件。 -
使用更小的软件包: 选择更小的软件包或替代品,例如使用
busybox
作为轻量级的一站式解决方案。 -
使用体积优化工具: 使用如
DockerSlim
或dive
等工具来帮助分析和优化镜像大小。 -
避免使用 ADD: 尽量使用
COPY
指令代替ADD
,因为ADD
可以执行解压缩操作,可能会增加镜像大小。 -
优化镜像层: 使用
&&
连接命令,确保它们在同一个层中执行,减少层数。 -
使用 .dockerignore 文件: 创建
.dockerignore
文件来排除不需要添加到镜像的文件和目录。 -
移除设置环境变量的不必要层: 如果环境变量不会影响后续层的构建,可以将其移除以减少层数。
-
使用精简的操作系统: 如果可能,使用精简版的操作系统,如 Debian 的
slim
版本。 -
避免安装不必要的软件包: 仔细审查
RUN
指令中安装的软件包,只安装需要的软件包。 -
使用镜像标签管理: 使用标签来管理不同版本的镜像,确保使用的是优化过的版本。
-
定期更新和优化 Dockerfile: 随着时间的推移,持续更新和优化 Dockerfile,以利用 Docker 引擎和基础镜像的改进。
Docker 跨平台构建
必须在 Dockerfile 当中兼容跨平台的包
配置 Docker 跨平台构建
docker run --privileged --rm tonistiigi/binfmt --install all
{
"features":{
"containerd-snapshotter":true
}
}
systemctl restart docker
多阶段构建
在一个 Dockerfile 中可以出现两个及以上的 FROM ,每一个 FROM 为一个阶段 基本上只有 go 或者 c 语言的构建才会使用 多阶构建