常用命令
# 批量操作
docker container stop cd3 269 34b 751 # 跟上多个容器ID
docker container stop $(docker container ps -aq) # 批量操作
docker container rm $(docker container ps -aq)
# 批量清理所有退出的容器
docker system prune -f
# 批量清理所有未使用的镜像
docker image prune -a
# 拉取镜像
docker pull nginx:1.20.0
# 查看镜像详情
docker image inspect dda9cfa9f451
# 镜像导入、导出,以便内网节点间传递
docker image save nginx:1.20.0 -o nginx.image
docker image load -i ./nginx.image
# 查看镜像构建历史
docker image history 97b
# 查看容器运行日志
docker logs af945
Dockerfile
基础镜像的选择 (FROM)
- 官方镜像优于非官方的镜像,如果没有官方镜像,则尽量选择Dockerfile开源的
- 固定版本tag而不是每次都使用latest
- 尽量选择体积小的镜像
通过 RUN 执行指令
RUN
主要用于在Image里执行指令,比如安装软件,下载文件等。
将多条命令写在一个RUN中。每一行RUN命令都会产生一层image layer, 导致镜像的臃肿
文件复制和目录操作 (ADD,COPY,WORKDIR)
COPY
和 ADD
都可以把local的一个文件复制到镜像里,如果目标目录不存在,则会自动创建
ADD
比 COPY高级一点的地方就是,如果复制的是一个gzip等压缩文件时,ADD会帮助我们自动去解压缩文件。
所有的文件复制均使用 COPY
指令,仅在需要自动解压缩的场合使用 ADD。
FROM python:3.9.5-alpine3.13
COPY hello.py /app/hello.py
FROM python:3.9.5-alpine3.13
ADD hello.tar.gz /app/
构建参数和环境变量 (ARG vs ENV)
两者区别在于生效范围
ENV
设置的变量还可以在Image中保持,作为容器中的环境变量
FROM ubuntu:20.04
ENV VERSION=2.0.1
RUN apt-get update && \
apt-get install -y wget && \
wget https://github.com/ipinfo/cli/releases/download/ipinfo-${VERSION}/ipinfo_${VERSION}_linux_amd64.tar.gz && \
tar zxf ipinfo_${VERSION}_linux_amd64.tar.gz && \
mv ipinfo_${VER