Linux运维自学坊

Linux运维自学坊

Docker容器化部署实践

发布于 2023年11月20日 | 预计阅读时间 6 分钟

容器化就像给应用穿上统一的"宇航服",让它们在任何环境中都能正常运行。Docker作为容器技术的代表,彻底改变了应用部署的方式。本文将带你从零开始,掌握Docker容器化部署的核心实践。

Docker核心概念

在开始实践之前,先了解几个核心概念:

Docker安装与配置

在Ubuntu系统上安装Docker:

# 更新软件包索引
sudo apt update

# 安装依赖包
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 添加Docker仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

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

# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker

# 验证安装
sudo docker --version

第一个Docker应用

让我们从运行一个简单的Nginx容器开始:

# 拉取Nginx镜像
docker pull nginx:latest

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

# 查看运行中的容器
docker ps

# 访问Nginx
curl http://localhost

编写Dockerfile

Dockerfile是构建自定义镜像的关键。以下是一个Node.js应用的Dockerfile示例:

# 使用官方Node.js镜像作为基础
FROM node:16-alpine

# 设置工作目录
WORKDIR /app

# 复制package.json和package-lock.json
COPY package*.json ./

# 安装依赖
RUN npm ci --only=production

# 复制应用代码
COPY . .

# 暴露端口
EXPOSE 3000

# 定义启动命令
CMD ["node", "server.js"]

构建并运行镜像:

# 构建镜像
docker build -t my-node-app .

# 运行容器
docker run -d --name node-app -p 3000:3000 my-node-app

Docker Compose多容器编排

对于复杂的多服务应用,使用Docker Compose进行编排:

version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
    environment:
      - DATABASE_URL=postgres://user:password@db:5432/mydb
    volumes:
      - ./app:/app
      - /app/node_modules

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

volumes:
  postgres_data:

启动服务:

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

# 查看服务状态
docker-compose ps

# 停止服务
docker-compose down

最佳实践建议

容器化的本质是将应用与环境解耦,实现"一次构建,到处运行"。掌握Docker不仅提高部署效率,更是迈向云原生架构的重要一步。

常见问题排查

遇到问题时,可以使用以下命令进行排查:

# 查看容器日志
docker logs [容器名]

# 进入容器内部
docker exec -it [容器名] /bin/bash

# 查看容器资源使用情况
docker stats

# 检查镜像层信息
docker history [镜像名]

# 清理无用资源
docker system prune -a

通过本文的实践,你应该已经掌握了Docker容器化部署的基本技能。下一步可以探索Kubernetes等容器编排平台,构建更强大的云原生应用架构。