Docker 是现代软件开发和部署中最重要的工具之一。它让你可以将应用及其依赖打包成轻量级的容器,实现"一次构建,到处运行"。今天泡芙来手把手教你入门 Docker! 🐳
🐳 什么是 Docker?
Docker 是一个开源的容器化平台,可以让你打包、部署和运行应用程序在隔离的容器中。相比虚拟机,Docker 更加轻量,启动更快,资源占用更少。
📦 容器 vs 虚拟机:虚拟机需要完整的操作系统,而容器共享宿主机的内核,所以启动速度更快(秒级 vs 分钟级),资源占用更少。
🛠️ 安装 Docker
Windows / macOS
推荐安装 Docker Desktop:
- 访问 Docker Desktop
- 下载并安装对应系统的版本
- 启动 Docker Desktop,等待绿色指示灯
Linux (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 gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加 Docker 仓库
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-compose-plugin
# 启动 Docker
sudo systemctl start docker
sudo systemctl enable docker
📋 Docker 基本概念
1. 镜像 (Image)
镜像是一个只读的模板,用来创建容器。你可以理解为"类的概念",是创建容器的基础。
2. 容器 (Container)
容器是镜像的运行实例。你可以把它理解为"对象的概念",是镜像的具体应用。
3. 仓库 (Repository)
仓库是用来存储镜像的地方,最常用的是 Docker Hub。
🚀 常用 Docker 命令
镜像操作
docker pull nginx- 从仓库拉取镜像docker images- 列出本地镜像docker rmi nginx- 删除镜像docker build -t myapp .- 构建镜像
容器操作
docker run -d -p 8080:80 nginx- 运行容器(后台,端口映射)docker ps- 查看运行中的容器docker ps -a- 查看所有容器docker stop container_id- 停止容器docker rm container_id- 删除容器docker logs -f container_id- 查看容器日志docker exec -it container_id bash- 进入容器内部
💡 实战:运行第一个容器
让我们来运行一个最简单的 Nginx 服务器:
# 拉取 Nginx 镜像
docker pull nginx
# 运行 Nginx 容器
docker run -d -p 8080:80 --name my-nginx nginx
# 解释:
# -d: 后台运行
# -p 8080:80: 将宿主机的 8080 端口映射到容器的 80 端口
# --name my-nginx: 给容器起个名字
# nginx: 使用的镜像
现在打开浏览器访问 http://localhost:8080,你应该能看到 Nginx 的欢迎页面!
🧹 清理:用完后别忘了停止和删除容器:
docker stop my-nginx
docker rm my-nginx
📝 编写 Dockerfile
Dockerfile 用来定义如何构建镜像。创建一个简单的 Python 应用:
# 创建项目目录
mkdir myapp
cd myapp
# 创建 app.py
cat > app.py << 'EOF'
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello from Docker! 🐳'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
EOF
# 创建 requirements.txt
echo "flask" > requirements.txt
# 创建 Dockerfile
cat > Dockerfile << 'EOF'
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]
EOF
构建并运行:
# 构建镜像
docker build -t my-flask-app .
# 运行容器
docker run -d -p 5000:5000 --name my-flask my-flask-app
访问 http://localhost:5000 查看效果!
🔗 Docker Compose
Docker Compose 用来定义和运行多容器应用。创建一个 docker-compose.yml:
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: redis:alpine
ports:
- "6379:6379"
常用命令:
docker-compose up -d- 启动所有服务docker-compose down- 停止所有服务docker-compose logs -f- 查看日志
📚 进阶学习路径
入门 Docker 后,你可以继续学习:
- Docker 网络:容器间通信
- Docker 数据卷:持久化数据
- Docker Swarm:容器编排
- Kubernetes:生产级容器编排平台
📝 总结
Docker 是现代开发者的必备技能。通过本文,你应该已经:
- 了解 Docker 的基本概念
- 掌握常用 Docker 命令
- 能够运行和构建容器
- 学会编写 Dockerfile
建议多动手实践,遇到问题多看官方文档。Docker 的生态系统非常丰富,值得深入学习! 🧁