Docker简单介绍:
Docker是基于Linux的容器化技术,是在Linux内核中运行的一个进程,与其他进程的区别是它制造一个个隔离的独立空间(称为容器)。
开发者将应用程序及其依赖打包到可移植且轻量级的容器中。容器共享主机内核,比虚拟机轻便且节省内存空间。但容器也是相互隔离的,有各自的文件环境、网络、进程等。


Docker的使用过程:
用户在终端输入命令,Docker命令行工具(client)解析命令并格式化为符合Docker API规范的请求,客户端将请求发送给Docker端口,Docker守护进程接收到请求、解析并执行相应的任务。
例如:用户输入:docker run -d 某应用。Docker接收到该命令后,检查本地是否存在相应的镜像、若没有则从Docker仓库(registry)拉取镜像(image)、将镜像存储到本地、创建容器(container)、启动容器。
Docker客户端(Docker CLI):
Docker的主要用户界面,通过它用户在命令行输入各种docker命令,这些命令通过Docker提供的接口(RESTful API)转换为符合RESTful 规范的请求,发送给Docker守护进程。附:API提供http请求的接口,可跨平台。若只下载了Docker客户端,需连接远程Docker守护进程。
Docker守护进程(dockerd):
长期在Docker后台运行的系统服务/进程,进程名通常为dockerd,守护进程的英文为daemon。
在Linux主机启动时由系统管理工具systemd自动运行启动Docker守护进程。
- Docker守护进程提供RESTful API端口,监听端口,接收客户端的指令,
- 管理镜像(拉取pull、构建build等),
- 管理容器生命周期(创建create,启动start,停止stop,重启restart,删除rm),
- 管理网络(创建网络、连接主机和Docker网络),
- 管理数据(创建卷、同步主机和Docker数据),
- 记录日志等。
Docker镜像(image):
镜像是只读的模板,包括代码、运行时环境、配置等。镜像采用分层,即镜像由一系列只读层(layer)组成,每一层代表Dockerfile中的一条指令。附:Dockerfile是一个文本文件,包含一系列用于构建Docker镜像的指令(例如:FROM, COPY, RUN, CMD等)。
镜像被比作面向对象中的类,而容器(container)被比作类的实例,即容器是镜像的实例。一个镜像可以多个实例。
Docker仓库(registry):
Docker仓库负责存储和分发镜像,也可以将自己的镜像上传到仓库,其他人可以下载和使用。
bash
# 将自己的镜像上传到仓库
# 在当前目录构建镜像
docker build -t 用户名/镜像名:版本号 .
# 打开docker hub登录,输入以下命令获得网站和验证码,验证登录
docker login
# 往docker仓库推送镜像:
docker push 用户名/镜像名:版本号
官方仓库是Docker Hub,但几乎打不开,可以使用其他镜像仓库拉取镜像,例如:Docker Hub 镜像搜索,Docker Hub国内无法访问的解决方法 (2025-04-28更新) | 遇见时光-1023.org.cn
修改配置文件设置镜像站:
bash
# 修改文件
sudo vim /etc/docker/daemon.json
# 文件中修改内容
# {
# "registry-mirrors": [
# "https://docker.xuanyuan.me" // 轩辕镜像源,高速节点
# "https://docker.m.daocloud.io"
# ]
# }
# 重启docker
# sudo systemctl daemon-reload
sudo systemctl restart docker
Docker容器(container):
镜像的运行实例。容器是一个隔离的、受限的进程。共享Linux主机内核,又有独立的文件系统、网络、进程、IP地址等,可移植、轻便、速度更快、内存占用更少等。
- 通过namespaces实现隔离,创建独立的空间。
- 通过cgroups实现资源限制,防止过多消耗资源影响主机。
- 通过UnionFS(Union File System)实现高效的镜像管理,依靠分层和写时复制机制,使其具有高效性和轻量性,写时复制(CoW,copy on write)即修改文件时 将文件从只读层复制到可写层进行修改 原文件不变。附:读文件从只读层查找。
容器的生命周期主要有:创建、启动/运行、暂停、停止pause、删除。
Docker主要组件:
- dockerd:Docker守护进程。管理者和协调者。
- containerd:负责管理容器的完整生命周期(创建、启动、停止、删除等)。
- runc:创建容器的工具。
- containerd-shim:runc退出后,接管容器进程,容器继续运行。
注:Docker守护进程dockerd通过gRPC API接口调用containerd,containerd根据OCI标准调用runc,runc根据OCI标准创建和运行容器。
OCI标准:开放容器倡议。定义了容器是什么(镜像规范)和如何运行容器(运行时规范)。
Docker的部分命令:
镜像相关命令:
拉取镜像:docker pull 仓库地址/命名空间(用户名)/镜像名**:**标签名(版本号)
从Docker官方仓库的官方命名空间拉取最新版镜像:docker pull 镜像名
拉取指定CPU架构的镜像:docker pull --platform=linux/amd64 镜像名
注:docker pull可以不使用,docker run命令会在没有对应镜像时自动拉取镜像。
在当前目录构建镜像:docker build -t 镜像名**.**
查看镜像列表:docker images ls
删除镜像:docker rmi 镜像ID
修改镜像别名(tag):docker tag 原镜像名 用户名/新镜像名
容器生命周期相关命令:
创建并运行容器:docker run 镜像名
创建并后台运行容器(并且端口映射):docker run -dp 主机IP地址**:** 主机端口**:**容器端口 镜像名
运行容器并创建文件:docker run --rm 镜像名 touch 文件名
运行容器并检查文件:docker run --rm 镜像名 stat 文件名
|---------------|------------------------------------------------------------|
| -d(--detach) | 后台运行 |
| -p(--publish) | 端口映射(-p 主机端口**:容器端口) |
| -v | 挂载卷(-v 主机目录:** 容器目录 或者 卷名**:**容器目录) |
| -e | 容器环境变量(例如:-e MYSQL_ROOT_USERNAME=root) |
| --name | 自定义容器名字(主机中不能重名) |
| -it | 允许主机控制台与容器交互 |
| --rm | 容器停止时就删除容器 |
| --restart | 设置容器停止时的启动策略(例如:--restart always,--restart unless-stopped) |
| --network | 加入子网 |
[docker run 参数]
注:每执行一次docker run就创建并运行一个容器,若希望在原有容器中启停,可使用start/stop。若只创建容器不运行,可使用create替换run,运行容器则使用start。
查看容器列表:docker ps
查看所有容器(包括已经停止的):docker ps -a
查看容器信息:docker inspect 容器ID
停止容器:docker stop 容器ID
重新启动容器:docker start 容器ID
删除容器:docker rm 容器ID
停止并删除容器(强制删除正在运行的容器):docker rm -f 容器ID
数据持久化相关命令:
说明:容器具有独立的文件系统,容器关闭数据删除,若要数据持久化,有两种方法:卷挂载(voumn mount),绑定挂载(bind mount)。
创建卷:docker volume create 卷名
运行容器并挂载卷:docker run -dp 主机IP地址**:** 主机端口**:**容器端口 --mount type=volume src=文件名 target=容器中地址 镜像名
运行容器并挂载卷:docker run -dp 主机IP地址**:** 主机端口**:** 容器端口 -v 卷名**:**容器目录 镜像名
查看卷路径(主机):docker volume inspect 卷名
查看所有卷:docker volume list
删除卷:docker volume rm 卷名
删除没有容器使用的卷:docker volume prune -a
运行容器并绑定挂载:docker run --it --mount type=bind src="$(pwd)" target=容器中地址 镜像名 bash
运行容器并绑定挂载:docker run -dp 主机IP地址**:** 主机端口**:** 容器端口 -v 主机目录**:**容器目录 镜像名
网络相关命令:
容器具有独立网络,容器之间通信或与外部主机通信,使用docker network。
- docker默认是桥接模式(bridge),创建的子网也是桥接模式,同一子网的容器可以通信,与主机通过端口映射通信。
- host模式中容器共享主机的网络,通过主机的IP地址和端口就可以访问容器,无需端口映射。使用host模式启动容器:docker run -d --network host 镜像名
创建子网:docker network create 子网名
查看容器中所有网络:docker network list
删除自定义的子网:docker network rm 子网ID
容器编排技术(docker compose)相关命令:
使用YAML文件管理多个容器(包括自定义容器启动顺序),通常是docker-compose**.**yaml,也可以使用 -f 指定YAML文件。适合单机个人使用。大规模的编排需要k8s(Kubernetes)。
启动YAML文件中的所有容器:docker compose up
启动YAML文件中的所有容器在后台运行:docker compose up -d
停止并删除YAML文件中的所有容器:docker compose down
停止但不删除YAML文件中的所有容器:docker compose stop
重新启动YAML文件中停止的所有容器:docker compose start
其他相关命令:
查看日志:docker logs -f 容器ID
查看容器内的进程情况:docker exec 容器ID ps -ef
在容器内获得交互式命令环境:docker exec -it 容器ID /bin/sh
管理多节点Docker集群,使用docker swarm。
Docker官网:Docker: Accelerated Container Application Development
官方文档:Get started | Docker Docs
Docker命令:Docker 命令大全 | 菜鸟教程
附:Docker下载说明:
① 可以下载Docker Destop,提供可视化界面,也包含Docker CLI(命令行工具)。需根据操作系统架构下载。
② 也可以只下载Docker CLI。使用时,需连接远程Docker守护进程。
bash
# 网址:https://get.docker.com/,Linux下载Docker CLI
curl -fsSL https://get.docker.com -o install-docker.sh
sudo sh install-docker.sh

注意:若在Windows中使用Docker,实际是先在虚拟机安装Linux,在运行的Linux虚拟机中使用Docker。
安装Docker Destop时需知道Window系统是基于AMD64架构还是基于ARM64架构,查看方法如下:
方法一:
windows键+R --> 输入:cmd --> 输入命令:echo %PROCESSOR_ARCHITECTURE%
方法二:
windows键+R --> 输入:msinfo32 --> 系统摘要中查看系统类型
方法三:
此电脑(或我的电脑)--> 右键点击属性 --> 查看系统类型
