Docker深入学习:容器化实践心得
这个月终于把Docker给整明白了!从最初只会docker run拉镜像,到能够熟练使用Docker Compose进行多容器编排,进步很大。
Dockerfile编写
学会了如何编写Dockerfile来构建自己的镜像:
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]
学到的关键指令:
- FROM:基础镜像选择
- COPY vs ADD:文件复制,ADD支持URL和压缩包
- RUN:执行命令构建层
- EXPOSE:声明端口
- CMD vs ENTRYPOINT:启动命令区别
Docker Compose多容器编排
终于理解了为什么要用Compose:一个项目通常有Web应用、数据库、缓存等多个服务:
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- redis
- db
db:
image: postgres:15
volumes:
- db-data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: secret
redis:
image: redis:7-alpine
volumes:
- redis-data:/data
volumes:
db-data:
redis-data:
数据持久化
理解了 volumes 的三种用法:
- 匿名卷:volumes: /data(容器删除数据丢失)
- 命名卷:volumes: mydata:/data(持久化存储)
- 绑定挂载:volumes: ./host:/container(开发时用)
网络配置
Docker网络是另一个重要的点:
- bridge:默认网络,容器间通过容器名通信
- host:共享主机网络栈
- none:无网络
- 自定义网络:可以设置DNS解析
实践项目
用Docker搭建了一个完整的开发环境:
- Nginx反向代理
- Node.js应用
- PostgreSQL数据库
- Redis缓存
- Portainer可视化面板
容器化真的是大势所趋,太方便了!继续深挖~