1.docker安装
官方获取教程:getDocker
bash
curl -fsSL https://get.docker.com -o install-docker.sh
sudo sh install-docker.sh
# 下载失败可以使用阿里云镜像
sudo sh install-docker.sh --mirror Aliyun
docker version
2.设置镜像站
bash
# 配置镜像站
sudo vi /etc/docker/daemon.json
# 把以下内容放进去
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.1panel.live",
"https://hub.rat.dev"
]
}
# 重启docker
sudo service docker restart
3.常用docker命令
这些命令覆盖了 90% 以上的日常使用场景。建议结合 --help 参数查看具体命令的详细选项,例如:
bash
docker run --help
3.1.镜像(Image)管理
| 命令 | 说明 |
|---|---|
docker images |
列出本地所有镜像 |
docker pull <image> |
从仓库拉取镜像(如 docker pull nginx) |
docker build -t <name:tag> . |
从当前目录的 Dockerfile 构建镜像 |
docker rmi <image> |
删除本地镜像 |
docker tag <src> <target> |
给镜像打标签(如 docker tag myapp:latest myapp:v1) |
docker history <image> |
查看镜像构建历史 |
docker的pull命令详解
docker pull docker.io/library/nginx:latest
repository(镜像库/存放一个镜像的不同版本):docker.io/library/nginx
registry(仓库地址):docker.io
namespace(命名空间/作者名):library,library是官方仓库命名空间
tag(标签/版本号):latest
官方仓库和最新版本可以省略不写,省略为:docker pull nginx
3.2.容器(Container)管理
| 命令 | 说明 |
|---|---|
docker ps |
查看正在运行的容器 |
docker ps -a |
查看所有容器(包括已停止的) |
docker run [OPTIONS] <image> |
启动新容器常用选项:-d 后台运行-p 8080:80 端口映射-v /host:/container 挂载卷--name mycontainer 指定名称-it 交互式终端 |
docker start <container> |
启动已停止的容器 |
docker stop <container> |
停止运行中的容器(优雅停止) |
docker kill <container> |
强制终止容器 |
docker restart <container> |
重启容器 |
docker rm <container> |
删除已停止的容器(加 -f 可强制删除运行中容器) |
docker logs <container> |
查看容器日志(加 -f 实时跟踪) |
docker exec -it <container> /bin/bash |
进入运行中的容器执行命令 |
docker inspect <container/image> |
查看容器或镜像的详细信息(JSON 格式) |
3.3.批量操作与清理
| 命令 | 说明 |
|---|---|
docker system df |
查看 Docker 磁盘使用情况 |
docker system prune |
清理未使用的容器、网络、镜像(不包括 volume) |
docker system prune -a |
清理所有未使用的镜像(包括悬空和未被容器引用的) |
docker container prune |
删除所有已停止的容器 |
docker image prune |
删除悬空(dangling)镜像 |
docker volume prune |
删除未使用的数据卷 |
3.4.其他实用命令
| 命令 | 说明 |
|---|---|
docker version |
查看 Docker 客户端和服务器版本 |
docker info |
显示 Docker 系统信息(存储驱动、容器数量等) |
docker login |
登录 Docker Hub 或私有仓库 |
docker logout |
退出登录 |
docker push <image> |
推送镜像到仓库(需先 docker tag 打好仓库前缀) |
3.5.常用组合示例
bash
# 后台运行一个 Nginx 容器,映射 8080 端口
docker run -d -p 8080:80 --name web nginx
# 查看容器实时日志
docker logs -f web
# 进入容器内部
docker exec -it web /bin/bash
# 删除所有已停止的容器
docker rm $(docker ps -aq)
# 删除所有未被使用的镜像
docker image prune -a
3.6. 镜像推送 (Push) 到 Docker Hub
如果你想把自己构建的镜像分享给别人或者部署到服务器上,需要推送到镜像仓库(如 Docker Hub)。
操作步骤:
-
登录仓库 :首先需要在终端登录你的 Docker Hub 账号。
bashdocker login -
打标签 (Tag) :推送镜像前,必须按照
用户名/镜像名:版本的格式给镜像重命名。bashdocker tag myapp:latest your-dockerhub-username/myapp:latest -
推送 (Push) :将打完标签的镜像推送到云端。
bashdocker push your-dockerhub-username/myapp:latest
3.7. Docker 网络模式 (Network)
"桥接模式"和"Host 模式"是 Docker 最常用的两种网络驱动。它们决定了容器如何与外界通信。
3.7.1.核心概念解析
| 模式名称 | 驱动名称 (--driver) |
特点 | 适用场景 |
|---|---|---|---|
| Bridge (桥接) | bridge (默认) |
容器通过虚拟网桥连接宿主机,拥有独立的 Network Namespace 和 IP。容器间可通过 容器名 互相访问(需在同用户自定义网络中)。 | 开发环境、微服务架构(服务间需要通信)。 |
| Host (主机) | host |
容器直接复用宿主机的 Network Namespace,不隔离网络。容器没有独立 IP,直接使用宿主机 IP 和端口。 | 对网络性能要求极高、端口冲突较少的场景。 |
3.7.2.常用命令示例
1. 桥接模式 (Bridge) - 构建子网
如果你想让多个容器(例如 Web 服务和数据库)通过名字直接通信,需要创建一个自定义的桥接网络。
bash
# 1. 创建一个自定义的桥接网络 (推荐,比默认 bridge 网络支持自动 DNS 解析)
docker network create my-web-network
# 2. 启动容器时指定网络和名字
# 容器 A
docker run -d --name web-server --network my-web-network nginx
# 容器 B (例如 MySQL)
docker run -d --name mysql-db --network my-web-network mysql:8
# 结果:在 web-server 容器里可以直接 ping 通 mysql-db,无需知道具体 IP。
2. Host 模式 - 共享宿主机网络
bash
# 启动容器时指定 --network host
docker run -d --network host --name my-host-app nginx
# 结果:容器内的 80 端口直接映射到宿主机 80 端口,无需使用 -p 参数映射。
# 注意:此时如果宿主机 80 端口被占用,容器会启动失败。
3.8. Docker Compose (多容器应用)
对于复杂的项目,通常包含 Web 服务、数据库、缓存等多个容器。手动一个个启动非常麻烦。Docker Compose 允许你通过一个 YAML 文件(通常命名为 docker-compose.yml)来定义和运行整个应用。
3.8.1. 安装 Docker Compose (如果未安装)
bash
# 通常 Docker Desktop 已包含,Linux 用户可单独安装
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
3.8.2. 编写 docker-compose.yml 示例
假设我们要部署一个包含 Nginx 和 Redis 的简单应用:
yaml
# docker-compose.yml
version: '3.8' # Docker Compose 文件版本
services: # 定义服务 (即容器)
# 服务 1: Web 服务
web:
image: nginx:alpine # 使用的镜像
ports:
- "8080:80" # 端口映射: 宿主机:容器
volumes:
- ./html:/usr/share/nginx/html # 挂载静态文件目录
networks:
- app-network # 加入自定义网络
# 服务 2: 缓存服务
redis:
image: redis:alpine
ports:
- "6379:6379"
networks:
- app-network
# 定义网络
networks:
app-network:
driver: bridge # 使用桥接模式,让 web 和 redis 可以通过服务名互相访问
# 定义数据卷 (如果需要持久化数据)
volumes:
# 这里可以声明命名卷,或者使用默认的匿名卷
3.8.3. 常用 Compose 命令
在存放 docker-compose.yml 的目录下执行:
| 命令 | 说明 |
|---|---|
docker-compose up -d |
后台启动所有服务 (-d),并自动构建镜像(如果需要)。 |
docker-compose down |
停止并删除所有服务容器、网络。 |
docker-compose ps |
查看当前项目中所有容器的状态。 |
docker-compose logs -f |
查看所有服务的日志(-f 实时跟踪)。 |
docker-compose build |
仅重新构建镜像,不启动容器。 |