docker宿主机和容器的拷贝、目录挂载、导出镜像
导出镜像的两种方式
基于镜像,导出镜像
# 导出
docker save --output/-o 导出之后的镜像名 要导出的镜像名
# 导入
docker load --input/-i 要导入的镜像名
docker load < 要导入的新镜像名
[root@localhost ~]# docker save -o mynginx.img nginx
[root@localhost ~]# docker rmi nginx:latest
Untagged: nginx:latest
Untagged: nginx@sha256:644a70516a26004c97d0d85c7fe1d0c3a67ea8ab7ddf4aff193d9f301670cf36
Deleted: sha256:87a94228f133e2da99cb16d653cd1373c5b4e8689956386c1c12b60a20421a02
Deleted: sha256:55b6972054b24c53054322a52748324df5797eefbb6dc374e41522a91d532dd5
Deleted: sha256:6b88aa6f4485486bfc779cccfbe4a7a47a502a7cff2cd70be89c59dcd0db12a8
Deleted: sha256:472c64059965c7b6b1b534ba07374c1d034b17c99acb3cf4534fe78abed41101
Deleted: sha256:788a5cf1e4599312b5923694f53e556ba0e2eb4a6bbb51958e0ec2b510345a49
Deleted: sha256:410f31f9ae37c62af85e8f9575c5f4d75542be1739ac1ca5982cf461be0b13bc
Deleted: sha256:e81bff2725dbc0bf2003db10272fef362e882eb96353055778a66cda430cf81b
[root@localhost ~]# docker load -i mynginx.img
e81bff2725db: Loading layer [==================================================>] 72.52MB/72.52MB
43f4e41372e4: Loading layer [==================================================>] 64.97MB/64.97MB
788e89a4d186: Loading layer [==================================================>] 3.072kB/3.072kB
f8e880dfc4ef: Loading layer [==================================================>] 4.096kB/4.096kB
f7e00b807643: Loading layer [==================================================>] 3.584kB/3.584kB
9959a332cf6e: Loading layer [==================================================>] 7.168kB/7.168kB
Loaded image: nginx:latest
[root@localhost ~]#
基于容器,导出镜像
# 导入
docker export 容器名 > 导出的镜像名
# 导出
cat 要导入的镜像文件名 | docker import - 导入的新镜像名
[root@localhost ~]# docker run -itd --name mynginx nginx bash
7ba7ef0c17a0e8bf74d92064224c63b4a5382428a089726b97ce84bc58d5b876
[root@localhost ~]# docker export mynginx > mynginx.img
[root@localhost ~]# cat mynginx.img | docker import - mynginx2
sha256:b2c10821e80ade6a5aa8681895fa4f64b3f47d24201b9e77adbef40c33d19fe6
数据拷贝
docker cp 宿主机目录/文件 容器名/容器ID:容器路径
docker cp 容器名/容器ID:容器路径 宿主机目录/文件
目录挂载
指定目录挂载
创建容器添加 -v 参数,格式为 宿主机目录:容器目录
docker run -id -v /mydata/docker_nginx/data:/usr/local/data --name nginx-01 nginx
docker run -id -v /宿主机目录:/容器目录 -v /宿主机目录2:/容器目录2 镜像名
匿名挂载
匿名挂载只需要写容器的目录,容器外对应的目录会在 /var/lib/docker/volumes 中生成
# 匿名挂载
docker run -id --name nginx_01 -v /usr/local/data nginx
# 查看volume数据卷信息
docker volume ls
具名挂载
给数据卷起了个名字,容器外对应的目录会在 /var/lib/docker/volume 中生成
docker run -id --name nginx_02 -v docker_nginx_data:/usr/local/data nginx
[root@localhost ~]# docker run -id --name nginx_02 -v docker_nginx_data:/usr/local/data nginx
ae9face96b78b399d4b6802cf49a2b002a776d9c57ec085826fa4c73e8d14a39
[root@localhost ~]# docker volume ls
DRIVER VOLUME NAME
local 5d3f84bd732beced170847694a5fb844e3bebb642bc6c714dd55a56fe3abdf0d
local docker_nginx_data
只读/只写
# 只读。只能通过修改宿主机内容实现对容器的数据管理
docker run -it -v /宿主机目录:/容器目录:ro 镜像名
# 读写,默认。宿主机和容器可以双向数据操作
volumes-from (继承)
# 容器 nginx_04 指定目录挂载
docker run -id --name nginx_04 -v /mydata/docker_nginx/data/:/usr/local/data nginx
# 容器 nginx_05 和 nginx_06 相当于继承 nginx_04 容器的挂载目录
docker run -id --name nginx_05 --volumes-from nginx_04 nginx
docker run -id --name nginx_06 --volumes-from nginx_04 nginx
查看目录挂载关系
通过 docker volume inspect 数据卷名称 可以查看该数据卷对应宿主机的目录地址
[root@localhost ~]# docker volume inspect docker_nginx_data
[
{
"CreatedAt": "2021-10-19T14:49:12+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/docker_nginx_data/_data",
"Name": "docker_nginx_data",
"Options": null,
"Scope": "local"
}
]
查看容器IP地址
查看容器的元信息
docker inspect 容器名称|容器ID
输出容器的IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器ID
|