docker的数据卷转载于:https://www.cnblogs.com/sparkdev/p/8504050.html
本文整理从数据卷中学习的知识及记录;dockerfile生成images时文件超大的现象及原因总结
_checksum:每个镜像层文件的哈希值"sha256:bbe500321588478c81fbeb6fb18bc540371b716ef666710c392c55a"
先说数据卷:
https://www.cnblogs.com/sparkdev/p/8504050.html
生成一个数据卷:docker volume create 生成名字是一个数据卷, 名字是“ VOLUME NAME”列的;
[root@hps220 dongfang]# docker volume create
01d291ac1dc2993693bb3644456e31143374ddeda526ae5c8c7981905e17e139
[root@hps220 dongfang]# docker volume ls
DRIVER VOLUME NAME
local 01d291ac1dc2993693bb3644456e31143374ddeda526ae5c8c7981905e17e139
local 9988dbae58227c5f65f686f542e5ea74c4590f4b68cfa233b81f69ec3ce2d436
docker volume rm VOLUME NAME删除数据卷
docker volume rm f11b34e74fe7763a2d9ace383a008d0375bbbc049a1eae79eb42eec5b41c5755 删除数据卷;
docker volume查看命令:
Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
rm Remove one or more volumes
[root@hps220 dongfang]# docker volume inspect 01d291ac1dc2993693bb3644456e31143374ddeda526ae5c8c7981905e17e139
[
{
"Name": "01d291ac1dc2993693bb3644456e31143374ddeda526ae5c8c7981905e17e139",
"Driver": "local",
"Mountpoint": "/data/ips/docker/volumes/01d291ac1dc2993693bb3644456e31143374ddeda526ae5c8c7981905e17e139/_data",
"Labels": {},
"Scope": "local"
}
]
使用数据卷的最佳场景
在多个容器之间共享数据,多个容器可以同时以只读或者读写的方式挂载同一个数据卷,从而共享数据卷中的数据。
当宿主机不能保证一定存在某个目录或一些固定路径的文件时,使用数据卷可以规避这种限制带来的问题。
当你想把容器中的数据存储在宿主机之外的地方时,比如远程主机上或云存储上。
当你需要把容器数据在不同的宿主机之间备份、恢复或迁移时,数据卷是很好的选择。
该文章中不可执行的是:可能是docker的版本不一样导致的;后续再看下:
[root@hps220 _data]# docker run -id --mount type=volume,source=01d291ac1dc2993693bb3644456e31143374ddeda526ae5c8c7981905e17e139,target=/world ubuntu /bin/bash
unknown flag: --mount
See 'docker run --help'.
dockerfile镜像文件太大
https://www.cnblogs.com/claireyuancy/p/7029126.html 分析docker镜像大小;镜像文件大小是每个层文件大小的叠加;
新建dockerfile镜像文件太大的原因,是docker新建镜像文件时,会把该目录下的所有文件都会加载进来,所以dockerfile文件所在目录尽量内容少些,
此外dockerfile文件名为Dockerfile
新建命令是docker build -t test:1 .
docker build -t imagename:tag . 注意一定不要少了最后一个点;
新建一个dockerfile,然后新建一个镜像文件;
FROM ubuntu
RUN useradd nick
RUN mkdir /data && touch /data/test.txt
RUN chown -R nick:nick /data
VOLUME /data
如何通过dockerfile新建一个镜像文件呢?下面的点就是默认取本目录下的dockerfile文件
docker build -t image1 .
[root@hps220 dongfang]# docker build -t image1 .
Sending build context to Docker daemon 4.227 GB
可是为什么会这么大,怎么减小镜像文件的大小呢?
Sending build context to Docker daemon 103.2 GB
https://www.cnblogs.com/claireyuancy/p/7029126.html 分析docker镜像大小;镜像文件大小是每个层文件大小的叠加;
新建dockerfile文件太大的原因,是docker新建镜像文件时,会把该目录下的所有文件都会加载进来,所以dockerfile文件所在目录尽量内容少些,
此外dockerfile文件名为Dockerfile
新建命令是docker build -t test:1 .
docker build -t imagename:tag . 注意一定不要少了最后一个点;
关于docker容器更多操作:
更多的时候,需要让 Docker 容器在后台以守护态(Daemonized)形式运行。此时,可以通过添加 -d 参数来实现,然后命令直接返回一个contanerid;
sudo docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
docker run -d image_df:3.0 /bin/sh
docker attach containername 进入容器内部操作的命令;
要导出容器到本地:docker export f0bf5e771e21 >/data/dongfang/a.tar
docker import 从容器快照文件中再导入为镜像:cat /data/dongfang/a.tar |docker import - registry:3.5.1
*注:用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import 来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息
sudo docker run -d -P --name web -v /src/webapp:/opt/webapp:ro 后面的":ro"是只读;
最后一部分内容学自:http://www.dockerinfo.net/image%E9%95%9C%E5%83%8F