我的博客

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可视化面板

容器化真的是大势所趋,太方便了!继续深挖~