安装配置与常用命令详解
前言
Docker 已经成为现代软件开发和部署的标配工具。无论是本地开发环境搭建、CI/CD 流水线,还是生产环境部署,Docker 都能提供一致且可靠的容器化解决方案。
这篇文章将从零开始,带你掌握 Docker 的核心概念和常用操作。
Docker 核心概念
在开始之前,先理解几个核心概念:
| 概念 | 说明 |
|---|---|
| 镜像 (Image) | 只读的应用模板,包含运行应用所需的代码、依赖、配置 |
| 容器 (Container) | 镜像的运行实例,可以启动、停止、删除 |
| 仓库 (Registry) | 存储和分发镜像的服务,如 Docker Hub、阿里云镜像服务 |
| Dockerfile | 定义镜像构建步骤的文本文件 |
| 数据卷 (Volume) | 持久化容器数据的机制 |
简单类比:
- 镜像 = 类(Class)
- 容器 = 实例(Instance)
- Dockerfile = 构造函数
安装 Docker
macOS
推荐使用 Docker Desktop:
# 使用 Homebrew 安装
brew install --cask docker
# 或者直接下载 DMG
# https://www.docker.com/products/docker-desktop/
安装后启动 Docker Desktop,等待状态变为 “Running”。
Ubuntu / Debian
# 1. 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 2. 安装依赖
sudo apt-get update
sudo apt-get install -y \
ca-certificates \
curl \
gnupg \
lsb-release
# 3. 添加 Docker 官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 4. 添加 Docker 软件源
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 5. 安装 Docker Engine
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 6. 将当前用户加入 docker 组(免 sudo)
sudo usermod -aG docker $USER
newgrp docker
CentOS / RHEL
# 1. 卸载旧版本
sudo yum remove docker docker-client docker-client-latest docker-common \
docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 2. 安装依赖
sudo yum install -y yum-utils
# 3. 添加 Docker 软件源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4. 安装 Docker Engine
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 5. 启动 Docker
sudo systemctl start docker
sudo systemctl enable docker
# 6. 将当前用户加入 docker 组
sudo usermod -aG docker $USER
验证安装
# 查看版本
docker --version
# Docker version 24.0.7, build afdd53b
# 运行测试容器
docker run hello-world
配置镜像加速
国内访问 Docker Hub 较慢,建议配置镜像加速器。
阿里云镜像加速
- 登录 阿里云容器镜像服务
- 获取你的专属加速地址
配置方法
macOS / Windows (Docker Desktop):
Settings → Docker Engine,添加:
{
"registry-mirrors": [
"https://your-id.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
Linux:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://your-id.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
验证配置:
docker info | grep -A 5 "Registry Mirrors"
镜像操作
搜索镜像
# 在 Docker Hub 搜索
docker search nginx
# 限制结果数量
docker search --limit 5 nginx
拉取镜像
# 拉取最新版本
docker pull nginx
# 拉取指定版本
docker pull nginx:1.24
# 拉取指定平台镜像(M1/M2 Mac 可能需要)
docker pull --platform linux/amd64 nginx:1.24
查看本地镜像
# 列出所有镜像
docker images
# 按大小排序
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" | sort -k3 -h
# 查看镜像详情
docker inspect nginx:latest
删除镜像
# 删除指定镜像
docker rmi nginx:1.24
# 删除所有未使用的镜像
docker image prune
# 删除所有镜像(谨慎!)
docker rmi $(docker images -q)
导出/导入镜像
# 导出镜像为 tar 文件
docker save -o nginx.tar nginx:latest
# 从 tar 文件导入镜像
docker load -i nginx.tar
容器操作
创建并启动容器
# 基本启动
docker run nginx
# 后台运行 (-d)
docker run -d nginx
# 指定容器名称 (--name)
docker run -d --name my-nginx nginx
# 端口映射 (-p 宿主机端口:容器端口)
docker run -d -p 8080:80 --name my-nginx nginx
# 环境变量 (-e)
docker run -d -e MYSQL_ROOT_PASSWORD=123456 mysql:8
# 数据卷挂载 (-v 宿主机路径:容器路径)
docker run -d -v /data/nginx:/usr/share/nginx/html nginx
# 交互式启动 (-it)
docker run -it ubuntu:22.04 /bin/bash
常用运行参数
| 参数 | 说明 | 示例 |
|---|---|---|
-d |
后台运行 | docker run -d nginx |
-p |
端口映射 | -p 8080:80 |
-v |
数据卷挂载 | -v /host/path:/container/path |
-e |
环境变量 | -e KEY=value |
--name |
容器名称 | --name my-app |
--rm |
退出时自动删除 | docker run --rm nginx |
--restart |
重启策略 | --restart=always |
--network |
指定网络 | --network my-network |
-m |
内存限制 | -m 512m |
--cpus |
CPU 限制 | --cpus=1.5 |
查看容器
# 查看运行中的容器
docker ps
# 查看所有容器(包括已停止)
docker ps -a
# 只显示容器 ID
docker ps -q
# 查看容器详情
docker inspect my-nginx
# 查看容器日志
docker logs my-nginx
# 实时查看日志
docker logs -f my-nginx
# 查看最近 100 行日志
docker logs --tail 100 my-nginx
# 查看容器资源使用
docker stats
# 查看指定容器资源使用
docker stats my-nginx
容器生命周期管理
# 停止容器
docker stop my-nginx
# 启动已停止的容器
docker start my-nginx
# 重启容器
docker restart my-nginx
# 暂停容器
docker pause my-nginx
# 恢复暂停的容器
docker unpause my-nginx
# 强制停止容器
docker kill my-nginx
# 删除容器
docker rm my-nginx
# 强制删除运行中的容器
docker rm -f my-nginx
# 删除所有已停止的容器
docker container prune
进入容器
# 在运行中的容器内执行命令
docker exec my-nginx ls /etc/nginx
# 进入容器的交互式终端
docker exec -it my-nginx /bin/bash
# 如果容器没有 bash,使用 sh
docker exec -it my-nginx /bin/sh
# 以 root 用户进入
docker exec -it -u root my-nginx /bin/bash
容器与宿主机文件传输
# 从容器复制到宿主机
docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf
# 从宿主机复制到容器
docker cp ./index.html my-nginx:/usr/share/nginx/html/
数据卷管理
数据卷是 Docker 持久化数据的首选方式。
创建和管理数据卷
# 创建数据卷
docker volume create my-data
# 查看所有数据卷
docker volume ls
# 查看数据卷详情
docker volume inspect my-data
# 删除数据卷
docker volume rm my-data
# 删除所有未使用的数据卷
docker volume prune
使用数据卷
# 使用命名数据卷
docker run -d -v my-data:/var/lib/mysql mysql:8
# 使用绑定挂载(宿主机目录)
docker run -d -v /home/user/data:/app/data my-app
# 只读挂载
docker run -d -v /config:/app/config:ro my-app
网络管理
网络类型
| 类型 | 说明 |
|---|---|
bridge |
默认网络,容器间通过 IP 通信 |
host |
容器直接使用宿主机网络 |
none |
禁用网络 |
自定义 bridge |
容器间可通过容器名通信 |
网络操作
# 查看网络列表
docker network ls
# 创建自定义网络
docker network create my-network
# 查看网络详情
docker network inspect my-network
# 容器加入网络
docker run -d --network my-network --name app my-app
# 将运行中的容器连接到网络
docker network connect my-network my-container
# 断开容器与网络的连接
docker network disconnect my-network my-container
# 删除网络
docker network rm my-network
容器间通信示例
# 创建网络
docker network create app-network
# 启动数据库
docker run -d --network app-network --name db mysql:8
# 启动应用(可以通过 "db" 这个名字访问数据库)
docker run -d --network app-network --name app \
-e DATABASE_HOST=db \
my-app
实用技巧
清理系统
# 清理所有未使用的资源(镜像、容器、网络、缓存)
docker system prune
# 包括未使用的数据卷
docker system prune --volumes
# 查看 Docker 磁盘使用情况
docker system df
批量操作
# 停止所有容器
docker stop $(docker ps -q)
# 删除所有容器
docker rm $(docker ps -aq)
# 删除所有镜像
docker rmi $(docker images -q)
# 删除所有 <none> 镜像
docker rmi $(docker images -f "dangling=true" -q)
查看容器 IP
# 查看容器 IP 地址
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-nginx
设置容器自动重启
# 总是重启
docker run -d --restart=always nginx
# 失败时重启(最多 3 次)
docker run -d --restart=on-failure:3 nginx
# 更新已有容器的重启策略
docker update --restart=always my-nginx
常用命令速查表
# 镜像
docker pull <image> # 拉取镜像
docker images # 列出镜像
docker rmi <image> # 删除镜像
docker build -t <tag> . # 构建镜像
# 容器
docker run <image> # 创建并启动容器
docker ps # 列出运行中的容器
docker ps -a # 列出所有容器
docker stop <container> # 停止容器
docker start <container> # 启动容器
docker rm <container> # 删除容器
docker logs <container> # 查看日志
docker exec -it <container> /bin/bash # 进入容器
# 数据卷
docker volume create <name> # 创建数据卷
docker volume ls # 列出数据卷
docker volume rm <name> # 删除数据卷
# 网络
docker network create <name> # 创建网络
docker network ls # 列出网络
docker network rm <name> # 删除网络
# 系统
docker system df # 磁盘使用
docker system prune # 清理未使用资源
下一步
掌握了 Docker 基础操作后,下一篇文章将介绍如何将 Golang 项目打包成 Docker 镜像,实现从开发到部署的完整流程。
参考资料
版权声明: 如无特别声明,本文版权归 sshipanoo 所有,转载请注明本文链接。
(采用 CC BY-NC-SA 4.0 许可协议进行授权)
本文标题:《 Docker 系列——基础入门 》
本文链接:http://localhost:3015/ai/Docker%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8.html
本文最后一次更新为 天前,文章中的某些内容可能已过时!