Docker入门教程:从零开始容器化你的应用

适用人群:开发人员、运维工程师
目标:掌握Docker基础概念和常用命令
前置知识:基本的Linux命令行操作


什么是Docker?

Docker是一个开源的容器化平台,它允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中。容器与虚拟机不同,它共享宿主机的操作系统内核,因此更加轻量和高效。

Docker的核心概念


安装Docker

在Ubuntu/Debian上安装

Terminal window
# 更新包索引
sudo apt update
# 安装依赖
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加Docker仓库
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.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 -y docker-ce docker-ce-cli containerd.io
# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker

验证安装

Terminal window
sudo docker run hello-world

常用Docker命令

镜像管理

Terminal window
# 搜索镜像
docker search nginx
# 拉取镜像
docker pull nginx:latest
# 查看本地镜像
docker images
# 删除镜像
docker rmi nginx:latest

容器管理

Terminal window
# 运行容器
docker run -d -p 80:80 --name my-nginx nginx
# 查看运行中的容器
docker ps
# 查看所有容器(包括停止的)
docker ps -a
# 停止容器
docker stop my-nginx
# 启动容器
docker start my-nginx
# 删除容器
docker rm my-nginx
# 进入容器
docker exec -it my-nginx /bin/bash

创建你的第一个Dockerfile

创建一个简单的Node.js应用的Dockerfile:

# 使用官方Node.js镜像作为基础镜像
FROM node:18-alpine
# 设置工作目录
WORKDIR /app
# 复制package.json和package-lock.json
COPY package*.json ./
# 安装依赖
RUN npm install
# 复制应用代码
COPY . .
# 暴露端口
EXPOSE 3000
# 启动应用
CMD ["npm", "start"]

构建和运行

Terminal window
# 构建镜像
docker build -t my-node-app .
# 运行容器
docker run -d -p 3000:3000 my-node-app

Docker Compose

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

创建 docker-compose.yml 文件:

version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_PASSWORD: example
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:

使用Docker Compose

Terminal window
# 启动服务
docker-compose up -d
# 停止服务
docker-compose down
# 查看日志
docker-compose logs -f

最佳实践

  1. 使用多阶段构建:减小最终镜像大小
  2. 利用缓存:合理安排Dockerfile指令顺序
  3. 使用.dockerignore:排除不必要的文件
  4. 不要以root用户运行:提高安全性
  5. 使用特定版本的镜像标签:避免使用latest标签

总结

Docker是现代开发运维的重要工具,掌握它能大大提高开发效率和应用部署的一致性。建议从简单的单容器应用开始,逐步学习Docker Compose和Kubernetes等更高级的容器编排工具。

参考资源