本篇是学习《系统学习Docker,践行DevOps理念》的笔记
DockerPlayground
如果电脑上没有安装 Docker 环境的话,可以在浏览器中使用 DockerPlayground。它提供了一个 Docker 环境供我们使用
删除已停止的容器
1 | docker rm $(docker ps -f "status=exited" -q) |
Dockerfile 语法与最佳实践
FROM
Dockerfile 的第一行指令,用于选择 base image
示例:
1 | FROM scratch # 使用空白镜像 |
最佳实践:
为了安全,尽量使用官方的 image 作为 base image
LABEL
定义 image 的 metadata
示例:
1 | LABEL maintainer="ikutarian <ikutarian@ikutarian.com>" # 维护者信息 |
最佳实践:
metadata 不可少,要告诉别人这个镜像是做什么的
RUN
执行命令并创建新的 image layer
示例:
1 | RUN yum update && yum install -y vim \ |
最佳实践:
- 命令尽量写在一行,可以用
&&
和\
进行分割 - 安装软件时,
apt-get update
、apt-get install
要写在一起,比如
1 | RUN apt-get update && apt-get install -y vim |
- 软件装完之后还要清理 apt-get 的缓存
1 | RUN apt-get update \ |
WORKDIR
设定当前工作目录
1 | WORKDIR /test # 如果没有 test 目录会自动创建 |
最佳实践:
- 用 WORKDIR,不要用
RUN cd
- 尽量使用绝对目录,这样更清晰不容易出错
ADD 和 COPY
添加文件
最佳实践:
- 大部分情况,COPY 优先于 ADD 使用,因为 COPY 语义更加直接
- ADD 除了 COPY 还有额外功能(解压)
- 添加远程文件/目录应该使用网
RUN wget
或者RUN curl
命令来获取。因为使用wget
或者curl
更加方便清理存储的中间文件和临时文件,同时这样也能使用更少的 layer 来完成同样的事情
ENV
设置环境变量
1 | ENV MYSQL_VERSION 5.6 # 设置常量 |
最佳实践:
尽量使用 ENV 来增加可维护性
CMD 与 ENTRYPOINT
看这篇文章《Docker中RUN、CMD和ENTRYPOINT的区别》
如何进入一个正在运行的容器
使用 docker exec
命令,比如
1 | docker exec -it <CONTAINER_ID> /bin/bash |
容器的资源限制
可以对容器的资源,比如 CPU、内存等进行限制