Tips #
列出所有运行中的容器的端口映射 #
bash
docker ps --format '{{.Names}}' | xargs -n 1 docker port
# 输出样例:
# 80/tcp -> 0.0.0.0:80
# 443/tcp -> 0.0.0.0:443
# 8080/tcp -> 127.0.0.1:8080
docker ps --format '{{.Names}}' | xargs -n 1 -I '{}' bash -c 'echo;echo [{}];docker port {}'
# 输出样例:
#
# [caddy]
# 80/tcp -> 0.0.0.0:80
# 443/tcp -> 0.0.0.0:443
#
# [api]
# 8080/tcp -> 127.0.0.1:8080
删除无tag镜像 #
bash
docker images --filter dangling=true -q | xargs docker rmi
导入、导出镜像 #
导出一个或多个镜像到tar文件或标准输出:
text
docker save [-o|--output FILE] IMAGE [IMAGE...]
从tar文件或标准输入导入镜像:
text
docker load [-i|--input FILE] [-q|--quiet[=true]]
样例1:导入/导出镜像文件 #
bash
# Step 1: 将openjdk8镜像导出为文件openjdk8.img:
docker save -o openjdk8.img openjdk:8
# 或者:
docker save openjdk:8 > openjdk8.img
# Step 2: 上传镜像文件
# ...
# Step 3: 登录目标服务器,下载镜像文件,导入镜像
docker load -i openjdk8.img
# 或者:
docker load < openjdk8.img
# Step 4: 列出所有镜像,检查是否导入成功
docker images
样例2: 通过SSH隧道传输镜像 #
bash
# 把服务器 HOST_A 中的镜像 openjdk:8 传到服务器 HOST_B 中(注意没有进度条):
ssh HOST_A 'docker save openjdk:8' | ssh HOST_B 'docker load'
# 把当前机器上的镜像 openjdk8:8 传到服务器 HOST_A 中(注意没有进度条):
docker save openjdk:8 | ssh HOST_A 'docker load'
备份、还原、转移数据卷 #
bash
# 备份数据卷 VOLUME_A(这是直接挂载卷的方案):
# (注意 docker run 不要添加 -t 参数来分配虚拟 tty,不然会导致导出的文件格式出错)
sudo docker run --rm -v VOLUME_A:/data busybox tar -c -C /data . > VOLUME_A.tar
# 备份数据卷 VOLUME_A(这是从容器 CONTAINER_A 中挂载卷的方案):
# (注意 docker run 不要添加 -t 参数来分配虚拟 tty,不然会导致导出的文件格式出错)
# (注意 /path/to/container/mount-point 指的是数据卷在容器内部当中的挂载点)
sudo docker run --rm --volumes-from CONTAINER_A busybox tar -c -C /path/to/container/mount-point . > VOLUME_A.tar
# 还原数据卷 VOLUME_A:
# (这里的 docker run 需要添加 -i 参数,来保证容器接收标准输入)
sudo docker run --rm -i -v VOLUME_A:/data busybox tar -xv -C /data < VOLUME_A.tar
将一台服务器上的数据卷转移到另一台服务器上:
bash
# 把服务器 HOST_A 的数据卷 VOLUME_A 转移到 HOST_B 中(下面的命令只需在本地执行):
# Step 1: 为 HOST_B 创建一个空数据卷 VOLUME_B(如果已经有了,则不用执行)
ssh HOST_B 'sudo docker volume create VOLUME_B'
# Step 2: 转移数据(在本地执行,通过 ssh 隧道从 HOST_A 中获取数据转移到 HOST_B 的数据卷中)
ssh HOST_A 'sudo docker run --rm -v VOLUME_A:/data busybox tar -c -C /data .' | ssh HOST_B 'sudo docker run --rm -i VOLUME_B:/data busybox tar -xv -C /data'
导出容器内的文件系统(不推荐) #
以tar格式导出容器的文件系统。 (仅保存容器内的所有文件,会丢失镜像信息)
text
Export a container's filesystem as a tar archive
Usage:
docker export [OPTIONS] CONTAINER
Options:
-o, --output=""
Write to a file, instead of STDOUT
创建文件系统镜像(不推荐) #
导入tar格式文件中的内容并为此创建一个文件系统镜像。 (运行容器时需要重新指定command)
text
Import the contents from a tarball to create a filesystem image
Usage:
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
Options:
-c, --change=
Apply Dockerfile instruction to the created image
-m, --message=""
Set commit message for imported image
--platform=""
Set platform if server is multi-platform capable