元素码农
基础
UML建模
数据结构
算法
设计模式
网络
TCP/IP协议
HTTPS安全机制
WebSocket实时通信
数据库
sqlite
postgresql
clickhouse
后端
rust
go
java
php
mysql
redis
mongodb
etcd
nats
zincsearch
前端
浏览器
javascript
typescript
vue3
react
游戏
unity
unreal
C++
C#
Lua
App
android
ios
flutter
react-native
安全
Web安全
测试
软件测试
自动化测试 - Playwright
人工智能
Python
langChain
langGraph
运维
linux
docker
工具
git
svn
🌞
🌙
目录
▶
Docker基础
安装与配置
核心概念解析
第一个容器实践
▶
镜像管理
镜像构建原理
Dockerfile最佳实践
镜像仓库管理
▶
容器操作
容器生命周期管理
资源限制与监控
交互式操作技巧
▶
存储管理
存储驱动解析
数据卷使用实践
挂载方式对比
备份与恢复策略
▶
Docker网络
网络模式解析
自定义网络配置
容器间通信实践
▶
生产实践
Docker Compose编排
集群部署策略
容器日志管理
发布时间:
2025-03-23 11:28
↑
☰
# Docker第一个容器实践 ## 概述 本文将通过一个简单的Web应用示例,带领读者实际体验Docker容器的创建、运行和管理过程。通过动手实践,帮助读者快速掌握Docker的基本操作和工作流程。 ## 准备工作 ### 1. 环境检查 确保Docker已正确安装: ```bash # 检查Docker版本 docker --version # 检查Docker服务状态 docker info ``` ### 2. 示例应用 我们将使用一个简单的Node.js Web应用作为示例: ```javascript // app.js const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('Hello Docker World!'); }); const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Server is running on port ${PORT}`); }); ``` ```json // package.json { "name": "docker-demo", "version": "1.0.0", "main": "app.js", "dependencies": { "express": "^4.17.1" }, "scripts": { "start": "node app.js" } } ``` ## 创建Docker镜像 ### 1. 编写Dockerfile ```dockerfile # 使用官方Node.js镜像作为基础镜像 FROM node:14-alpine # 设置工作目录 WORKDIR /app # 复制package.json和package-lock.json COPY package*.json ./ # 安装依赖 RUN npm install # 复制应用代码 COPY . . # 暴露端口 EXPOSE 3000 # 启动命令 CMD ["npm", "start"] ``` ### 2. 构建镜像 ```bash # 在Dockerfile所在目录执行 docker build -t docker-demo . ``` ### 3. 查看镜像 ```bash # 列出本地镜像 docker images # 查看镜像详细信息 docker inspect docker-demo ``` ## 运行容器 ### 1. 启动容器 ```bash # 前台运行 docker run -p 3000:3000 docker-demo # 后台运行 docker run -d -p 3000:3000 --name my-app docker-demo ``` 参数说明: - `-p`: 端口映射 - `-d`: 后台运行 - `--name`: 容器名称 ### 2. 容器操作 ```bash # 查看运行中的容器 docker ps # 查看所有容器 docker ps -a # 查看容器日志 docker logs my-app # 进入容器 docker exec -it my-app sh ``` ### 3. 停止和删除 ```bash # 停止容器 docker stop my-app # 启动已停止的容器 docker start my-app # 删除容器 docker rm my-app # 删除镜像 docker rmi docker-demo ``` ## 数据管理 ### 1. 数据卷 ```bash # 创建数据卷 docker volume create my-data # 使用数据卷运行容器 docker run -d -p 3000:3000 \ -v my-data:/app/data \ --name my-app docker-demo ``` ### 2. 绑定挂载 ```bash # 挂载本地目录 docker run -d -p 3000:3000 \ -v $(pwd)/logs:/app/logs \ --name my-app docker-demo ``` ## 网络配置 ### 1. 网络模式 ```bash # 创建自定义网络 docker network create my-net # 使用自定义网络运行容器 docker run -d -p 3000:3000 \ --network my-net \ --name my-app docker-demo ``` ### 2. 容器互联 ```bash # 运行Redis容器 docker run -d --name redis \ --network my-net \ redis:alpine # 运行应用容器并连接Redis docker run -d -p 3000:3000 \ --network my-net \ --name my-app \ -e REDIS_URL=redis://redis:6379 \ docker-demo ``` ## 实用技巧 ### 1. 容器健康检查 ```dockerfile # Dockerfile中添加健康检查 HEALTHCHECK --interval=30s --timeout=3s \ CMD curl -f http://localhost:3000/ || exit 1 ``` ### 2. 环境变量 ```bash # 使用环境变量文件 echo "PORT=4000" > .env docker run -d --env-file .env \ -p 4000:4000 \ --name my-app docker-demo ``` ### 3. 资源限制 ```bash # 限制CPU和内存 docker run -d -p 3000:3000 \ --cpus=0.5 \ --memory=512m \ --name my-app docker-demo ``` ## 常见问题 ### 1. 容器无法启动 **问题**: 容器启动后立即退出 **解决方案**: - 检查启动命令 - 查看容器日志 - 验证端口映射 - 检查资源限制 ### 2. 网络连接问题 **问题**: 容器间无法通信 **解决方案**: - 确认网络配置 - 检查DNS解析 - 验证端口暴露 - 测试网络连通性 ### 3. 数据持久化 **问题**: 容器重启数据丢失 **解决方案**: - 使用数据卷 - 配置绑定挂载 - 备份重要数据 - 使用数据容器 ## 最佳实践 ### 1. 镜像构建 - 使用官方基础镜像 - 优化构建上下文 - 合理使用缓存 - 多阶段构建 ### 2. 容器运行 - 使用非root用户 - 实现优雅终止 - 配置资源限制 - 启用健康检查 ### 3. 开发建议 - 使用docker-compose - 规范化配置 - 自动化部署 - 监控和日志 ## 总结 通过本文的实践,我们完成了一个基本的Docker应用部署流程,包括镜像构建、容器运行、数据管理和网络配置等关键步骤。这些基础知识和实践经验将帮助读者更好地理解和使用Docker技术。在实际开发中,建议遵循最佳实践,合理规划资源使用,确保应用安全可靠运行。 ## 参考资源 1. [Docker官方文档](https://docs.docker.com/) 2. [Docker Hub](https://hub.docker.com/) 3. [Docker最佳实践](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/) 4. [Docker Compose文档](https://docs.docker.com/compose/)