概念不讲了,写了好多次了,这里放常用代码块。

直接命令行

注意我的参数

启动 redis

  1. docker run -d -p 6379:6379 -v ~/data-redis:/data --name simple-redis redis:5.0.6-alpine3.10

启动mysql

  1. docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12345678 -v ~/data-mysql:/data --name simple-mysql mysql:5.7

优化

目标:

  • 更快的构建速度
  • 更小的Docker镜像大小
  • 更少的Docker镜像层
  • 充分利用镜像缓存
  • 增加Dockerfile可读性
  • 让Docker容器使用起来更简单

总结

  • 编写.dockerignore文件
  • 容器只运行单个应用
  • 将多个RUN指令合并为一个
  • 基础镜像的标签不要用latest
  • 每个RUN指令后删除多余文件
  • 选择合适的基础镜像(alpine版本最好)
  • 设置WORKDIR和CMD
  • 使用ENTRYPOINT (可选)
  • 在entrypoint脚本中使用exec
  • COPY与ADD优先使用前者
  • 合理调整COPY与RUN的顺序
  • 设置默认的环境变量,映射端口和数据卷
  • 使用LABEL设置镜像元数据
  • 添加HEALTHCHECK

假设我们更新了 apt-get 源,下载,解压并安装了一些软件包,它们都保存在/var/lib/apt/lists/目录中。但是,运行应用时 Docker 镜像中并不需要这些文件。我们最好将它们删除,因为它会使 Docker 镜像变大。

  1. FROM ubuntu:16.04
  2. RUN apt-get update \
  3. && apt-get install -y nodejs \
  4. # added lines
  5. && rm -rf /var/lib/apt/lists/*
  6. ADD . /app
  7. RUN cd /app && npm install
  8. CMD npm start