什么是 Docker?

Docker 是一个开源的容器化平台,可以将应用程序及其依赖项打包到一个轻量级、可移植的容器中。

核心概念:

  • 镜像(Image):容器的模板,只读
  • 容器(Container):镜像的运行实例
  • 仓库(Registry):存储和分发镜像的地方

安装 Docker

Ubuntu/Debian

# 更新包索引
sudo apt-get update

# 安装必要依赖
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg

# 添加 Docker GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 安装 Docker Engine
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

# 验证安装
docker --version

常用命令

镜像操作

# 拉取镜像
docker pull nginx:latest

# 查看本地镜像
docker images

# 删除镜像
docker rmi nginx:latest

# 构建镜像
docker build -t myapp:v1 .

容器操作

# 运行容器
docker run -d -p 80:80 --name mynginx nginx

# 查看运行中的容器
docker ps

# 查看所有容器
docker ps -a

# 停止容器
docker stop mynginx

# 删除容器
docker rm mynginx

# 进入容器
docker exec -it mynginx /bin/bash

# 查看容器日志
docker logs -f mynginx

编写 Dockerfile

# 使用官方 Go 镜像作为构建环境
FROM golang:1.21-alpine AS builder

WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o main .

# 使用最小化镜像运行
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/main .
EXPOSE 8080
CMD ["./main"]

Docker Compose

使用 docker-compose.yml 管理多容器应用:

version: '3.8'

services:
  web:
    build: .
    ports:
      - "8080:8080"
    depends_on:
      - db
    environment:
      - DB_HOST=db
      - DB_PORT=5432

  db:
    image: postgres:15
    environment:
      POSTGRES_DB: mydb
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:
# 启动所有服务
docker-compose up -d

# 查看服务状态
docker-compose ps

# 停止所有服务
docker-compose down

总结

Docker 大大简化了应用程序的部署流程:

传统部署 Docker 部署
依赖环境配置复杂 一次构建,到处运行
环境差异导致问题 环境一致性保证
扩缩容困难 快速扩缩容
资源利用率低 资源隔离,利用率高

掌握 Docker,是现代开发者必备的技能之一!