Docker笔记
学习资料
官方安装手册:(Docker官网) - Developers - Documentation - Docker Engin - Install - 找匹配的操作系统
安装Docker
本例为CentOS体系操作系统。
卸载所有docker:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装yum-util并设置为国内阿里下载源:
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker相关软件:
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
部分预装了组件的系统可能会遇到安装冲突,可以卸载预装的一些组件,再重新安装docker,比如:
问题 1: 安装的软件包的问题 podman-2:4.0.2-6.module+an8.6.0+10751+21528717.x86_64
- 软件包 podman-2:4.0.2-6.module+an8.6.0+10751+21528717.x86_64 需要 runc >= 1.0.0-57,但没有提供者可以被安装
以上通过yum remove runc -y删除冲突之后,再重新安装docker
启动Docker服务,设置为自启动:
sudo systemctl start docker
sudo systemctl enable docker
查看Docker信息,如下命令如果能显示信息就算成功:
docker ps
配置国内全局镜像加速器
编辑 Docker 的配置文件,在大多数 Linux 系统中,Docker 的配置文件位于 /etc/docker/daemon.json。如果该文件不存在,则需要手动创建。
sudo mkdir -p /etc/docker
sudo nano /etc/docker/daemon.json
添加镜像加速器配置:在 daemon.json 文件中添加以下内容:
[root@ops multi-install-apps]# cat /etc/docker/daemon.json
{
"insecure-registries": [
"192.168.100.198",
"192.168.100.199",
"192.168.100.240",
"192.168.100.241",
"r.oso.plus",
"r.upx.plus",
"r.seeyon.ren",
"hub.openeeds.com"
],
"exec-opts": [
"native.cgroupdriver=systemd"
],
"registry-mirrors": [
"https://hub.openeeds.com",
"https://dockerproxy.net",
"https://docker.1panel.dev",
"https://dockerpull.com",
"https://dockerproxy.cn",
"https://docker.udayun.com",
"https://docker.1panel.live",
"https://docker.rainbond.cc",
"https://docker.1ms.run",
"https://hub.rat.dev"
],
"data-root": "/data/docker",
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"experimental": true
}
重启 Docker 服务,保存并关闭文件后,重启 Docker 服务以使配置生效:
sudo systemctl daemon-reload
sudo systemctl restart docker
验证配置是否生效:运行以下命令查看 Docker 的配置信息:
sudo docker info
镜像操作
查找nginx镜像,国内连不上是正常的:
docker search nginx
pull下载镜像
从docker hub搜索下载完整镜像:
- 搜索带Official标志的官方镜像
- 通过Tag可以找历史版本
找到拉取镜像的命令执行,示例如下:
docker pull nginx:1.28
正常情况这个连接不通,原因是国内将这个屏蔽了:
docker pull nginx:1.28
Error response from daemon: Get "https://registry-1.docker.io/v2/": read tcp 192.168.94.131:39572->98.85.153.80:443: read: connection reset by peer
解决docker pull网络不通问题,实测有两个方案(当前验证时间2025年6月):
方案一:设置镜像加速器
sudo mkdir -p /etc/docker
sudo nano /etc/docker/daemon.json
daemon.json中填入以下内容后保存:
{
"registry-mirrors": ["https://docker.m.daocloud.io"]
}
保存后执行如下命令重启使配置生效:
sudo systemctl daemon-reload
sudo systemctl restart docker
使用如下命令检查mirrors是否配置生效:
sudo docker info
以上完成后,尝试重新docker pull拉取镜像。
方案二:使用国内个人镜像地址
访问 https://docker.aityp.com/ 这个地址,然后搜索需要拉取的镜像,根据网页下半部分的指引,取对应命令拉取即可。示例如:
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:1.27.0
查看镜像列表
docker images
查看镜像详情
docker inspect <镜像ID> | <镜像名:标签>
删除镜像
docker rmi <IMAGE ID> | <REPOSITORY:TAG>
示例如下:
docker rmi nginx:alpine
或者下方93ad19b5b847是image id
docker rmi 93ad19b5b847
保存镜像
docker save -o <文件名>.tar <镜像ID> | <镜像名:标签>
cd /data
文件默认导出在当前cd的目录:
docker save -o nginx.tar nginx:alpine
或者:
docker save -o nginx.tar 93ad19b5b847
加载镜像
将保存的镜像加载到docker容器中
docker load -i nginx.tar
标记镜像(重命名)
将images中的nginx:alpine改名为myregistry/nginx:alpine
docker tag nginx:alpine myregistry/nginx:alpine
推送镜像
将自己维护的镜像推送到dockerhub:
docker push myregistry/nginx:alpine
容器操作
创建容器:
docker run -d --name my-nginx -p 8080:80 nginx:alpine
解释:
-
-d: 后台运行容器 -
--name: 指定容器名称 -
-p: 映射端口(主机端口:容器端口) -
nginx:alpine: 使用的镜像(也可以IMAGE ID)
查看活动容器
docker ps
重要参数:
-
CONTAINER ID容器ID -
NAMES容器名
查看所有容器(包括已停止的)
docker ps -a
启动容器
也支持根据容器ID操作
docker start nginx
停止容器
也支持根据容器ID操作
docker stop my-container
重启容器
也支持根据容器ID操作
docker restart my-container
进入容器内部:
也支持根据容器ID操作
docker exec -it my-container /bin/bash
查看容器日志:
docker logs my-container
附加参数:
-
-f: 实时跟踪日志。 -
--tail: 显示最近的若干行日志。
查看容器CPU、内存:
docker stats
查看容器详情
docker inspect <容器Names前三位>
docker inspect 87a
删除容器:
docker rm my-container
容器目录挂载
目录挂载:在Docker容器外设定一个目录与Docker容器内部的某个目录进行挂载,后续修改容器外的文件,在容器内也会增加对应文件。
注意:假设容器外的目录没有文件,容器内的目录有文件,使用目录挂载后,Docker读的是容器外的目录(没有文件那个)。即目录挂载以容器外的目录文件为准。
目录挂载,在初始启动时执行,支持设置多个挂载目录:
# -v 容器外的目录:容器内的目录
docker run -d --name my-nginx -p 8080:80 -v /host/path1:/container/path1 -v /host/path2:/container/path2 nginx:alpine
容器卷映射
卷映射:容器内有一个目录下有若干文件,我希望启动容器时,将容器内对应目录的文件同步到容器外,然后修改容器外的文件就让容器内自动生效。
注意:卷映射默认是读取容器内的文件,映射到容器外。
卷默认存放在/var/lib/docker/volumes/目录下,就是一个文件夹的名称,文件夹不用创建,执行docker run 自定义卷后,会自动创建。
# 示例如下-v后面的nginxvolume就是卷名,单docker run之后,/var/lib/docker/volumes/nginxvolume就生成了,进去就是容器内的所有文件
docker run -d --name my-nginx -p 8080:80 -v nginxvolume:/container/nginxconfig nginx:alpine
操作卷命令:
docker volume [option]
自定义网络
创建网络:
docker network create mynet
docker network ls
让容器走自定义网络:
docker run -d --name my_nginx1 -p 8080:80 -network mynet nginx:alpine
docker run -d --name my_nginx2 -p 8081:80 -network mynet nginx:alpine
以上两个容器可以通过如下方式互访:
http://my_nginx1:80
http://my_nginx2:80
Docker-compose组件
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它允许你通过一个 docker-compose.yml 文件来配置应用程序的服务、网络和卷等。
后台启动(在docker-compose.yml目录下执行):
docker-compose up -d
查看日志:
docker-compose logs -f
停止服务:
docker-compose down
查看服务进程:
docker-compose ps
Dockerfile
Dockerfile是构建 Docker 镜像的基础工具,通过它你可以自动化地定义镜像的构建过程。掌握 Dockerfile 的指令和语法,可以帮助你高效地创建和管理 Docker 镜像。
卸载Docker
sudo yum remove -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
删除相关文件:
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd