Docker容器化入门:从零基础到实战部署

· 阅读约需12分钟

一、什么是Docker?

Docker是一个开源的容器化平台,它可以让开发者将应用及其依赖打包到一个轻量级、可移植的容器中,然后发布到任何支持Docker的环境中运行。

Docker的核心优势:

  • 一致的运行环境:从开发到生产,环境完全一致
  • 快速部署:容器启动仅需数秒
  • 资源隔离:应用之间互不干扰
  • 轻量级:共享主机内核,占用资源少
  • 可移植性:一次构建,到处运行

二、Docker核心概念

1. 镜像(Image)

Docker镜像是一个只读的模板,包含运行应用所需的代码、运行时、库、环境变量和配置文件。

2. 容器(Container)

容器是镜像的运行实例,是一个独立运行的应用或一组应用,以及它们的运行环境。

3. 仓库(Repository)

Docker仓库用于存储镜像,Docker Hub是官方的公共仓库。


三、Docker安装

Ubuntu系统安装:

# 更新软件包索引
sudo apt update

# 安装必要依赖
sudo apt install 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 install docker-ce

# 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

CentOS系统安装:

# 安装依赖
sudo yum install -y yum-utils

# 添加Docker仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装Docker
sudo yum install docker-ce docker-ce-cli containerd.io

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

四、常用Docker命令

镜像操作:

# 搜索镜像
docker search nginx

# 拉取镜像
docker pull nginx:latest

# 查看本地镜像
docker images

# 删除镜像
docker rmi nginx:latest

容器操作:

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

# 查看运行中的容器
docker ps

# 查看所有容器(包括停止的)
docker ps -a

# 停止容器
docker stop my-nginx

# 启动容器
docker start my-nginx

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

# 删除容器
docker rm my-nginx

日志与信息查看:

# 查看容器日志
docker logs my-nginx

# 查看容器详情
docker inspect my-nginx

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

五、Dockerfile实战

Dockerfile是用于构建Docker镜像的文本文件,包含一系列指令。

示例:构建一个Node.js应用镜像

# 基础镜像
FROM node:18-alpine

# 设置工作目录
WORKDIR /app

# 复制package文件
COPY package*.json ./

# 安装依赖
RUN npm install --production

# 复制应用代码
COPY . .

# 暴露端口
EXPOSE 3000

# 启动命令
CMD ["node", "app.js"]

构建并运行:

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

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

六、Docker Compose编排

Docker Compose用于定义和运行多容器Docker应用。

docker-compose.yml示例:

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - db

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: my-secret-pw
      MYSQL_DATABASE: mydb
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mysql_data:

Compose常用命令:

# 启动服务
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs

# 停止服务
docker-compose down

七、实战:部署WordPress

version: '3.8'

services:
  wordpress:
    image: wordpress:latest
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wordpress_data:/var/www/html
    depends_on:
      - db

  db:
    image: mysql:8.0
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
      MYSQL_ROOT_PASSWORD: rootpassword
    volumes:
      - db_data:/var/lib/mysql

volumes:
  wordpress_data:
  db_data:

八、最佳实践

  1. 使用官方基础镜像:优先选择Docker官方维护的镜像
  2. 多阶段构建:减小最终镜像体积
  3. 合理使用缓存:优化构建速度
  4. 不要在镜像中存储敏感信息:使用环境变量或密钥管理
  5. 定期更新基础镜像:修复安全漏洞
  6. 使用.dockerignore:排除不必要的文件

总结

Docker作为现代容器化技术的标准,已经成为DevOps和云原生应用开发的必备技能。掌握Docker可以显著提升开发效率和部署一致性。

希望这篇入门教程能帮助你快速上手Docker容器化技术!