Docker已经成为现代应用部署的标准工具。本教程将从零开始,带你了解Docker的核心概念并完成第一个容器部署。
什么是Docker?
Docker是一个开源的应用容器引擎,让开发者可以打包应用及其依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上。
1. 安装Docker
Ubuntu/Debian系统
# 更新包索引
sudo apt update
# 安装依赖
sudo apt install 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
# 添加仓库
echo "deb [arch=$(dpkg --print-architecture) 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 docker-ce docker-ce-cli containerd.io
# 启动Docker
sudo systemctl start docker
sudo systemctl enable docker
CentOS/RHEL系统
# 安装依赖
sudo yum install -y yum-utils
# 添加仓库
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
2. 验证安装
# 运行测试容器
sudo docker run hello-world
# 查看版本
docker --version
docker-compose --version
3. Docker核心概念
镜像(Image)
镜像是Docker的构建块,类似于虚拟机的模板。镜像是只读的。
容器(Container)
容器是镜像的运行实例。可以把容器理解为轻量级的虚拟机。
仓库(Registry)
Docker Hub是Docker官方维护的公共仓库,包含大量镜像。
4. 常用Docker命令
# 搜索镜像
docker search nginx
# 拉取镜像
docker pull nginx:latest
# 运行容器
docker run -d -p 80:80 --name webserver nginx
# 查看运行中的容器
docker ps
# 查看所有容器(包括停止的)
docker ps -a
# 进入容器
docker exec -it webserver bash
# 停止容器
docker stop webserver
# 删除容器
docker rm webserver
# 删除镜像
docker rmi nginx
5. 部署第一个Nginx网站
步骤1:创建项目目录
mkdir -p ~/docker-nginx/html
cd ~/docker-nginx
步骤2:创建HTML页面
cat > html/index.html << 'EOF'
Docker Nginx Demo
Hello Docker!
This page is served by Nginx in a Docker container.
EOF
步骤3:运行Nginx容器
docker run -d \
-p 8080:80 \
-v ~/docker-nginx/html:/usr/share/nginx/html \
--name my-nginx \
nginx:alpine
步骤4:验证
curl http://localhost:8080
6. 使用Docker Compose管理多容器
创建docker-compose.yml
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
restart: always
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: myapp
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止服务
docker-compose down
7. 数据持久化
容器删除后数据会丢失,需要使用Volume持久化:
# 创建volume
docker volume create my-data
# 使用volume
docker run -d -v my-data:/app/data nginx
# 查看volume
docker volume ls
# 删除volume
docker volume rm my-data
8. 构建自定义镜像
创建Dockerfile
# 使用Python官方镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制文件
COPY requirements.txt .
COPY app.py .
# 安装依赖
RUN pip install -r requirements.txt
# 暴露端口
EXPOSE 5000
# 启动命令
CMD ["python", "app.py"]
构建镜像
docker build -t my-python-app .
9. 常用最佳实践
- 使用精简镜像:选择alpine或slim版本
- 多阶段构建:减少最终镜像大小
- 不要以root运行:创建专用用户
- 使用.dockerignore:排除不需要的文件
- 定期更新镜像:确保安全
10. 故障排查
# 查看容器日志
docker logs my-container
# 进入容器调试
docker exec -it my-container sh
# 查看容器详细信息
docker inspect my-container
# 查看资源使用
docker stats
总结
Docker学习曲线平缓,但功能强大。掌握Docker后,你可以:
- 快速部署应用
- 实现环境一致性
- 简化运维工作
- 提高资源利用率
📖 下一步:建议学习Docker网络、Docker Swarm或Kubernetes,进一步提升容器编排能力。