Docker笔记2025

Docker笔记

学习资料

官方安装手册:(Docker官网) - Developers - Documentation - Docker Engin - Install - 找匹配的操作系统

网站Docker学习视频

安装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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Docker应用容器 1. 初识 Docker 我们写的代码会接触到好几个环境:开发环境、测试环境以及生产环境。 ...
    itlu阅读 2,642评论 0 5
  • Docker 和虚拟机 容器内的进程是直接运行于宿主内核的,这点和宿主进程一致,只是容器的 userland 不同...
    Jancd阅读 3,471评论 0 8
  • devops:运维人员会在项目开发期间就介入到开发过程中,了解开发人员使用的系统架构和技术路线,从而制定适当的运维...
    一笑奈何_abe4阅读 2,361评论 0 0
  • Docker概览 运维视角 Docker安装: 先删除以前安装的docker: 添加yum相关工具: 添加阿里yu...
    知道的太少阅读 3,610评论 0 4
  • Docker 简介 这里引用了《第一本 Docker 书》的解释。 Docker 遵循 客户端-服务器(C/S) ...
    UmaruD阅读 1,369评论 0 1

友情链接更多精彩内容