LIVE_STREAM_CONNECTED
Docker 安装使用与日常命令指南
A
Mastermind
admin
Dimension
Docker
Timestamp
2025年12月20日
Docker 是一个开源的容器化平台,让应用及其依赖打包成轻量级容器,实现"一次构建,到处运行"。
安装
Windows
- 下载 Docker Desktop
- 运行安装程序,启用 WSL 2 后端
- 重启电脑,启动 Docker Desktop
Linux (Ubuntu/Debian)
# 卸载旧版本
sudo apt remove docker docker-engine docker.io containerd runc
# 安装依赖
sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release
# 添加 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
# 设置仓库
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
# 安装 Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 将当前用户加入 docker 组(免 sudo)
sudo usermod -aG docker $USER
macOS
下载 Docker Desktop for Mac,拖入应用程序文件夹即可。
验证安装
docker --version
docker run hello-world
镜像管理
搜索与拉取
# 搜索镜像
docker search nginx
# 拉取镜像
docker pull nginx
docker pull nginx:1.24 # 指定版本
docker pull mysql:8.0
# 查看本地镜像
docker images
docker image ls
镜像操作
# 删除镜像
docker rmi nginx
docker rmi -f nginx # 强制删除
# 删除所有未使用镜像
docker image prune
docker image prune -a # 删除所有未被容器使用的镜像
# 查看镜像详情
docker inspect nginx
# 镜像导出/导入
docker save -o nginx.tar nginx
docker load -i nginx.tar
容器管理
创建与运行
# 运行容器
docker run nginx
# 后台运行
docker run -d nginx
# 指定名称
docker run -d --name my-nginx nginx
# 端口映射
docker run -d -p 8080:80 nginx # 主机8080 -> 容器80
# 挂载目录
docker run -d -v /host/path:/container/path nginx
docker run -d -v $(pwd)/html:/usr/share/nginx/html nginx
# 环境变量
docker run -d -e MYSQL_ROOT_PASSWORD=123456 mysql
# 交互式运行
docker run -it ubuntu /bin/bash
# 自动删除(退出后)
docker run --rm -it ubuntu /bin/bash
# 完整示例
docker run -d \
--name my-mysql \
-p 3306:3306 \
-v /data/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--restart unless-stopped \
mysql:8.0
容器操作
# 查看运行中的容器
docker ps
# 查看所有容器
docker ps -a
# 启动/停止/重启
docker start <container>
docker stop <container>
docker restart <container>
# 进入容器
docker exec -it <container> /bin/bash
docker exec -it <container> sh # 无 bash 时
# 查看日志
docker logs <container>
docker logs -f <container> # 实时追踪
docker logs --tail 100 <container> # 最后 100 行
# 查看容器详情
docker inspect <container>
# 查看资源占用
docker stats
docker stats <container>
# 复制文件
docker cp file.txt <container>:/path/
docker cp <container>:/path/file.txt ./
# 删除容器
docker rm <container>
docker rm -f <container> # 强制删除运行中的
# 删除所有停止的容器
docker container prune
Docker Compose
用于定义和运行多容器应用。
安装
Docker Desktop 已内置。Linux 单独安装:
sudo apt install docker-compose-plugin
# 或
docker compose version
配置文件示例
# docker-compose.yml
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- app
app:
build: ./app
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DB_HOST=db
depends_on:
- db
db:
image: mysql:8.0
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: myapp
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
Compose 命令
# 启动所有服务
docker compose up
docker compose up -d # 后台运行
# 停止服务
docker compose down
docker compose down -v # 同时删除卷
# 查看服务状态
docker compose ps
# 查看日志
docker compose logs
docker compose logs -f app
# 重新构建
docker compose build
docker compose up -d --build
# 进入服务容器
docker compose exec app /bin/bash
# 扩展服务实例
docker compose up -d --scale app=3
Dockerfile 编写
基础示例
# Node.js 应用
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
多阶段构建
# 构建阶段
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# 生产阶段
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
CMD ["node", "dist/main.js"]
构建镜像
# 构建
docker build -t my-app .
docker build -t my-app:v1.0 .
# 指定 Dockerfile
docker build -f Dockerfile.prod -t my-app .
# 推送到仓库
docker tag my-app username/my-app:v1.0
docker push username/my-app:v1.0
网络管理
# 查看网络
docker network ls
# 创建网络
docker network create my-network
# 容器加入网络
docker run -d --network my-network --name app nginx
# 查看网络详情
docker network inspect my-network
# 删除网络
docker network rm my-network
数据卷管理
# 创建卷
docker volume create my-volume
# 查看卷
docker volume ls
# 查看卷详情
docker volume inspect my-volume
# 删除卷
docker volume rm my-volume
# 清理未使用的卷
docker volume prune
系统清理
# 查看磁盘占用
docker system df
# 清理所有未使用资源
docker system prune
# 深度清理(包括未使用的镜像和卷)
docker system prune -a --volumes
常用镜像速查
# Web 服务器
docker run -d -p 80:80 nginx
docker run -d -p 80:80 httpd
# 数据库
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=123456 postgres
docker run -d -p 27017:27017 mongo
# 缓存
docker run -d -p 6379:6379 redis
# 消息队列
docker run -d -p 5672:5672 -p 15672:15672 rabbitmq:management
常见问题
镜像拉取慢
配置国内镜像源,编辑 /etc/docker/daemon.json:
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
重启 Docker:sudo systemctl restart docker
容器时区问题
docker run -e TZ=Asia/Shanghai -v /etc/localtime:/etc/localtime:ro nginx
权限问题
# Linux 下无权限
sudo chmod 666 /var/run/docker.sock
# 或重新登录使 docker 组生效
总结
Docker 核心概念:
- 镜像:应用的只读模板
- 容器:镜像的运行实例
- 卷:持久化数据存储
- 网络:容器间通信
掌握这些命令,足以应对日常开发和部署需求。