Docker容器化入门:从零基础到实战部署
一、什么是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 dockerCentOS系统安装:
# 安装依赖
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:八、最佳实践
- 使用官方基础镜像:优先选择Docker官方维护的镜像
- 多阶段构建:减小最终镜像体积
- 合理使用缓存:优化构建速度
- 不要在镜像中存储敏感信息:使用环境变量或密钥管理
- 定期更新基础镜像:修复安全漏洞
- 使用.dockerignore:排除不必要的文件
总结
Docker作为现代容器化技术的标准,已经成为DevOps和云原生应用开发的必备技能。掌握Docker可以显著提升开发效率和部署一致性。
希望这篇入门教程能帮助你快速上手Docker容器化技术!