HIGH_FREQUENCY_MODE

NextBlog
NEXT.

下一个博客,记录精彩生活

LIVE_STREAM_CONNECTED

Docker 安装使用与日常命令指南

A

Mastermind

admin

Dimension

Docker

Timestamp

2025年12月20日

Docker 是一个开源的容器化平台,让应用及其依赖打包成轻量级容器,实现"一次构建,到处运行"。

安装

Windows

  1. 下载 Docker Desktop
  2. 运行安装程序,启用 WSL 2 后端
  3. 重启电脑,启动 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 核心概念:

  • 镜像:应用的只读模板
  • 容器:镜像的运行实例
  • 卷:持久化数据存储
  • 网络:容器间通信

掌握这些命令,足以应对日常开发和部署需求。

评论

加载评论中...
Spirit Sync

"正在同步你的多巴胺频率,建立高维链接..."