3、docker安装及使用
docker安装及使用
本章要点:docker安装、加速器站点、镜像查看类命令,镜像导入导出
安装说明
从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE。
Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但需付费使用。
本文介绍 Docker CE 的安装使用
-
本文安装前说明
架构: X86_64 内核: 3.10 操作系统: centos 7 -
跟官方走,如果有先卸载
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine -
安装一些必要的系统工具
安装所需的软件包。 yum-utils 提供了 yum-config-manager 应用,并 device-mapper-persistent-data 和 lvm2 由需要 devicemapper 存储驱动程序。 # centos基础源: https://developer.aliyun.com/mirror/centos # centos epel源: https://developer.aliyun.com/mirror/epel wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo yum install -y yum-utils device-mapper-persistent-data lvm2 yum-utils -
添加软件源信息
-
官方源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo -
阿里源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -
阿里源-arm架构
[docker-ce-stable] name=Docker CE Stable - aarch64 baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/aarch64/stable enabled=1 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg [c7-docke1r] name=docker baseurl=http://mirror.centos.org/altarch/7/extras/aarch64/ gpgcheck=0 enabled=1
-
-
正式安装, 这里直接用阿里云的参考
# step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils # Step 2: 添加软件源信息 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # Step 3: 安装Docker yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin # Step 4: 开启Docker服务,启动前先配加速站点 systemctl start docker # 注意: # 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。 # vim /etc/yum.repos.d/docker-ce.repo # 将[docker-ce-test]下方的enabled=0修改为enabled=1 # # 安装指定版本的Docker-CE: # Step 1: 查找Docker-CE的版本: # yum list docker-ce.x86_64 --showduplicates | sort -r # Loading mirror speeds from cached hostfile # Loaded plugins: branch, fastestmirror, langpacks # docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable # docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable # docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable # Available Packages # Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos) # sudo yum -y install docker-ce-[VERSION] # 如果一直报 docker-compose-plugin 不存在,则直接下载到本地先安装,然后在安装 # 下载指定版本 RPM(以 2.27.0 为例,兼容性强) wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-compose-plugin-2.27.0-1.el7.x86_64.rpm # 安装本地 RPM sudo yum install -y ./docker-compose-plugin-2.27.0-1.el7.x86_64.rpm -
查看安装版本 - 注意这里有新的架构设计
当使用Docker时,必须要启动Docker Daemon的正常运行,它即要管理容器的运行时,又要负责提供对外部API的响应,而一旦Docker Daemon服务不正常,则已经运行在Docker主机上的容器也往 往 无法继续使用;
所以在1.11.0+版本时,开发团队开始将维护容器运行的任务放到一个单独的组件containerd中来管理,并且支持OCI的runc规范,原先对客户端API的支持仍然放在Docker Daemon,通过解耦,大大减少对Docker Daemon的依赖;
]# docker version
Client: Docker Engine - Community
Version: 26.1.4
API version: 1.45
Go version: go1.21.11
Git commit: 5650f9b
Built: Wed Jun 5 11:32:04 2024
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 26.1.4
API version: 1.45 (minimum version 1.24)
Go version: go1.21.11
Git commit: de5c9cf
Built: Wed Jun 5 11:31:02 2024
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.33
GitCommit: d2d58213f83a351ca8f528a95fbd145f5654e957
runc:
Version: 1.1.12
GitCommit: v1.1.12-0-g51d5e94
docker-init:
Version: 0.19.0
GitCommit: de40ad0
docker加速器
docker镜像加速器配置daemon.json不生效, 加速站点
-
环境配置文件:
/etc/sysconfig/docker-network /etc/sysconfig/docker-storage /etc/sysconfig/docker /etc/docker/ -
Unit File:
/usr/lib/systemd/system/docker.service -
配置文件:
/etc/docker/daemon.json -
docker镜像加速: 获取镜像加速站点,
我这里直接用 Docker镜像代理加速地址:https://dockerproxy.com 支持:Docker Hub、GCR、K8S、GHCR 国内站点好多找不到镜像,直接用加速地址,其它的可参考https://blog.csdn.net/Kiffy_Yam/article/details/151852138 站点2:https://www.kelen.cc/dry/docker-hub-mirror # 评论区翻的 我用的这个:https://docker.gh-proxy.com/配置文件
docker]# cat /etc/docker/daemon.json { "insecure-registries": ["docker.gh-proxy.com"], "exec-opts": ["native.cgroupdriver=systemd"] } systemctl daemon-reload && systemctl restart docker -
外部访问
# 通过指定 tcp 2375端口接收外部的请求 ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock -
检查加速器是否生效
# 查看镜像地址是否匹配,如匹配,说明配置成功 ]# docker info Client: Docker Engine - Community Version: 26.1.4 Server: Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 26.1.4 Storage Driver: overlay2 Backing Filesystem: xfs Logging Driver: json-file Cgroup Driver: cgroupfs Swarm: inactive Runtimes: io.containerd.runc.v2 runc Default Runtime: runc containerd version: d2d58213f83a351ca8f528a95fbd145f5654e957 Kernel Version: 3.10.0-1127.el7.x86_64 Operating System: CentOS Linux 7 (Core) Name: localhost.localdomain ID: eded39a4-2d94-4394-af76-4a3c7bcc17b1 Docker Root Dir: /var/lib/docker Registry Mirrors: https://kws77ppk.mirror.aliyuncs.com/ http://mirrors.tencentyun.com/ http://mirrors.css.tencentyun.com/
docker镜像
官方镜像,镜像加速站点1,镜像加速站点2,镜像加速站点3 或者 百度一下
Docker 获取镜像相关命令
search
语法: docker search 名称
-
搜索镜像:
docker search- 参数:
-s: 指定仅显示评价为指定的星级 默认为0,即所有 docker search -s 3 nginx - -s在1.12已废弃,可使用:
docker search -f stars=100 ubuntu收藏超过百次的
# 完整示例 docker search 名称 # 不过我这里镜像加速一直不成功搜索不到 # 建议使用 https://hub.docker.com/ # 使用通过查到的tag名在pull下来 比如查到的这个 nginx:stable-alpine # docker pull docker.gh-proxy.com/nginx:stable-alpine - 参数:
-
查看本地上存活的容器:
docker ps -a
pull
语法: docker pull 指定网站前缀/tag名
-
拉取镜像
# 如果有梯子,需要自己从dockerhub上看一下tag名 # 我这里下载 tomcat8.5.100做测试 docker pull docker.gh-proxy.com/tomcat:8.5.100-jre8 # docker pull 下载 指定网站前缀/tag名 -
下载也可以指定源
docker pull 镜像名称 -–registry-mirror=国内镜像源地址
image
语法: docker images | docker image -ls
-
列出本地主机上已有的镜像:
docker images | docker image -ls -
虚悬镜像: 由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为空的镜像。这类无标签镜像也被称为 虚悬镜像(danglingimage) 。 一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命令删除:docker image prun
-
删除镜像
语法: docker image rm <镜像1> [<镜像2>.....] 可以用 ID、镜像名、摘要删除镜像 其中,<镜像> 可以是 镜像短 ID、镜像长 ID、镜像名 或者 镜像摘要。 如果要删除本地的镜像,可以使用 docker image rmi / rm 命令 切记: 要删除镜像必须确认此镜像⽬前没有被任何容器使⽤ 删除镜像: `docker [image] rmi ID|或名称` - 如果有多个TAG的则只会删除tag, 否则就会直接删除这个镜像所有层 - `docker rmi -f ID` 强制删除镜像 删除容器: `docker rm ID | 名称`
tag
-
为镜像添加镜像标签:
docker tagdocker tag ubuntu:latest test:latest
# images跟tag的用法 docker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.gh-proxy.com/tomcat 8.5.100-jre8 edf8233555ae 18 months ago 242MB docker]# docker tag edf8233555ae tomcat:8.5.100-jre8 docker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.gh-proxy.com/tomcat 8.5.100-jre8 edf8233555ae 18 months ago 242MB tomcat 8.5.100-jre8 edf8233555ae 18 months ago 242MB
inspect
-
获取镜像的全部信息:
docker inspect- 返回的是一段json格式的信息,如果只需要其中一项,则可以使用 -f:
docker inspect -f {{"Architecture"}}
docker]# docker inspect edf8 [ { "Id": "sha256:edf8233555aef3be2d58eaab5d25f9f95826267db75eb4752dfce673d306f480", "DockerVersion": "20.10.23", "Author": "", "Config": { "ExposedPorts": { "8080/tcp": {} }, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "JAVA_HOME=/opt/java/openjdk", "JAVA_VERSION=jdk8u402-b06", "CATALINA_HOME=/usr/local/tomcat", "GPG_KEYS=05AB33110949707C93A279E3D3EFE6B686867BA6 07E48665A34DCAFAE522E5E6266191C37C037D42 47309207D818FFD8DCD3F83F1931D684307A10A5 541FBE7D8F78B25E055DDEE13C370389288584E7 5C3C5F3E314C866292F359A8F3AD5C94A67F707E 765908099ACF92702C7D949BFA0C35EA8AA299F1 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED 9BA44C2621385CB966EBA586F72C284D731FABEE A27677289986DB50844682F8ACB77FC2E86E29AC A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23", "TOMCAT_MAJOR=8", "TOMCAT_VERSION=8.5.100", "TOMCAT_SHA512=14d8dca911fe9c5b7e636e054ac2e70a532ddc358eda83ed3679e51df8baa7a397cabb8a5777b815014d46064cbc33e8d9ea75b9426dccdae54fb3913d9a54f0" ], "Cmd": [ "catalina.sh", "run" ], "Image": "sha256:e1253d8f3cd0299ef11144fc3c2587bd145f84a24ac41c90e08136d959baa3ab", "WorkingDir": "/usr/local/tomcat", }, "Architecture": "amd64", "Os": "linux", "Size": 242229815, "GraphDriver": { "Name": "overlay2" }, "RootFS": { "Type": "layers", "Layers": [ "sha256:1", "sha256:2", "sha256:3", "sha256:4", "sha256:5", "sha256:6", "sha256:7", "sha256:8", ] }, } ]名词 解释 ExposedPorts 运行时的端口 Env 部分的环境变量,如jdk版本,tomcat版本,运行目录都有显示 Cmd 多次提示:容器最后一定程序要运行在前台,否则会直接退出 WorkingDir 工作目录 Architecture、Os 架构跟系统, 目前架构还是蛮多的:amd,arm,龙芯 RootFS 分层机制,可以看第2章节 - 返回的是一段json格式的信息,如果只需要其中一项,则可以使用 -f:
history
-
查看镜像的构建历史信息:
docker historydocker]# docker history edf8233555ae IMAGE CREATED CREATED BY SIZE COMMENT edf8233555ae 18 months ago /bin/sh -c #(nop) CMD ["catalina.sh" "run"] 0B <missing> 18 months ago /bin/sh -c #(nop) ENTRYPOINT [] 0B <missing> 18 months ago /bin/sh -c #(nop) EXPOSE 8080 0B <missing> 18 months ago /bin/sh -c set -eux; nativeLines="$(catalin… 0B ... 具体自行看一下,这里就是rootfs分层每层的构建历史
docker保存镜像
save
导出镜像, 语法: docker save -o 名称.tar.gz [镜像名称|id]
docker]# docker save --help
Usage: docker save [OPTIONS] IMAGE [IMAGE...]
Options:
-o, --output string Write to a file, instead of STDOUT
# 完整示例
docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.gh-proxy.com/nginx stable-alpine a97d82f709e2 5 months ago 48.2MB
docker]# docker save -o nginx1.28.tar.gz a97d82f709e2
docker]# ls -lh
-rw------- 1 root root 48M 10月 9 16:00 nginx1.28.tar.gz
load
导入镜像,语法: docker load -i nginx1.28.tar.gz
docker ]# docker load --help
Usage: docker load [OPTIONS]
Options:
-i, --input string Read from tar archive file, instead of STDIN
-q, --quiet Suppress the load output
# 完整示例
docker ]# docker images <--刚刚保存好的镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.gh-proxy.com/nginx stable-alpine a97d82f709e2 5 months ago 48.2MB
# 导入, 如果这个镜像存在, sha256一样, 那它就会覆盖不会改变
docker ]# docker load -i nginx1.28.tar.gz
Loaded image ID: sha256:a97d82f709e2e0ef35e48a697aec860e12cbf2a0ffbfd95d7701976e81d470ed
docker ]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.gh-proxy.com/nginx stable-alpine a97d82f709e2 5 months ago 48.2MB
# 继续示例, 我们先将它给删了,然后再导入
docker ]# docker rmi a97d82f709e2
Untagged: docker.gh-proxy.com/nginx:stable-alpine
Untagged: docker.gh-proxy.com/nginx@sha256:618ae69c5193a9af9977b5a2740ebc84fedbd771628934bfdd6476c0be24db5d
.....
docker ]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
空的了。
docker ]# docker load -i nginx1.28.tar.gz
7003d23cc217: Loading layer ......
Loaded image ID: sha256:a97d82f709e2e0ef35e48a697aec860e12cbf2a0ffbfd95d7701976e81d470ed
# 可以发现这里的sha256跟之前导入是一样的,如果不一样那就说明你原始保存就有问题了
docker ]# docker images <-- 可以发现保存的镜像 名称跟tag都是none
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> a97d82f709e2 5 months ago 48.2MB
# 我们需要手动改一下tag, 这里tar.gz就很重要了,一定要见名知意否则到其它环境就不知道是啥。
docker ]# docker tag a97d82f709e2 nginx:1.28
docker ]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.28 a97d82f709e2 5 months ago 48.2MB
import
跟load一样也是导入,推荐使用load,使用import会丢失元数据
# 语法: docker import [OPTIONS] file | URL | - [REPOSITORY] [:TAG]
# 完整示例
docker ]# cat nginx1.28.tar.gz | docker import - nginx1.28-2
sha256:f81d88295fb3ee5b6e33b15c5062189eb2a303204a2a95a30549e92a72b84bf8
# 注意查看sha256值,已经产生变化了,原因查看下章
docker ]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx1.28-2 latest f81d88295fb3 2 seconds ago 49.6MB
load与import对比
本章来源ai, Docker 中
docker load和docker import命令均用于导入文件生成镜像,但核心功能、适用场景和实现机制有显著区别,具体对比如下:
-
核心区别对比表
特性 docker importdocker load输入来源 文件系统层压缩包(如普通 tar 包) Docker 镜像归档文件(需通过 docker save生成)输出结果 生成一个新的空白历史镜像(单层结构) 恢复完整镜像(含所有层、标签、历史记录) 元数据保留 ❌ 丢失所有元数据(层历史、CMD、ENV 等) ✅ 完整保留所有元数据(如分层结构、默认命令) 构建缓存支持 ❌ 无法利用构建缓存(单层结构) ✅ 保留分层结构,可复用缓存提升构建效率 典型用途 从文件系统快速创建镜像(如旧系统备份) 迁移/备份完整 Docker 镜像(含所有配置) -
docker import:从文件系统创建新镜像
-
本质:将普通 tar 包(包含文件系统内容)直接转化为一个新的镜像,仅保留文件系统层,不包含 Docker 镜像特有的元数据。
-
特点
- 单层结构:tar 包内容作为镜像的唯一文件系统层,无分层历史。
- 元数据丢失:导入后的镜像没有默认命令(需手动通过
docker run指定启动进程)、环境变量等配置。 - 轻量快速:适合从离线文件(如服务器备份、旧系统文件)快速构建基础镜像。
-
示例
docker import backup.tar my-custom-image:v1
-
-
docker load:恢复完整镜像归档
-
本质:从
docker save生成的归档文件中恢复完整镜像,包括所有分层结构、标签、历史记录和元数据 -
特点:
- 完整保留:恢复的镜像与原始镜像完全一致,可直接运行(无需重新配置默认命令)。
- 分层复用:保留镜像分层结构,支持 Docker 构建缓存,后续更新镜像时可复用已有层。
- 镜像迁移:常用于跨环境迁移完整镜像(如开发环境 → 生产环境)。
-
示例
# 从 save 生成的归档文件加载镜像 docker load -i saved-image.tar # saved-image.tar 由 `docker save` 导出
-
-
使用场景选择
-
选
docker import:当你只有文件系统内容(如
rootfs.tar),需要快速创建一个基础镜像,且无需保留 Docker 特定配置时(如从虚拟机备份文件构建镜像) -
选
docker load:当你需要迁移或恢复完整的 Docker 镜像(含标签、启动命令、环境变量等)时,例如从其他机器导入已打包好的镜像归档
-
-
总结
docker import是**“文件系统 → 新镜像”**的轻量转换工具,适合快速构建基础镜像,但丢失元数据。docker load是**“镜像归档 → 完整镜像”**的恢复工具,适合迁移完整镜像,保留所有配置和分层结构。
-
两者的核心差异在于是否保留 Docker 镜像特有的元数据和分层结构,需根据实际需求选择
更多推荐


所有评论(0)