900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > docker管理应用程序数据 容器网络

docker管理应用程序数据 容器网络

时间:2023-05-14 01:19:30

相关推荐

docker管理应用程序数据 容器网络

管理应用程序数据

Docker提供三种方式将数据从宿主机挂载到容器中:

• volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。保存数据的最佳方式。• bind mounts:将宿主机上的任意位置的文件或者目录挂载到容器中。• tmpfs:挂载存储在主机系统的内存中,而不会写入主机的文件系统。如果不希望将数据持久存储在任何位置,可以使用tmpfs,同时避免写入容器可写层提高性能。

管理卷:路径都是在/var/lib/docker/volumes/下的,路径不可改变

[root@docker ~]# docker volume create nginx-volnginx-vol[root@docker ~]# docker volume lsDRIVER VOLUME NAMElocalnginx-vol[root@docker ~]# docker volume inspect nginx-vol[{"CreatedAt": "-11-26T15:25:23+08:00","Driver": "local","Labels": {},"Mountpoint": "/var/lib/docker/volumes/nginx-vol/_data","Name": "nginx-vol","Options": {},"Scope": "local"}]

volumes

用卷创建一个容器:

[root@docker ~]# docker run -d --name=nginx-test1 --mount src=nginx-vol,dst=/usr/share/nginx/html -p 88:80 nginx:1.15

9d1d1fe4e0f189b8d66e7e6682ef725b441a355b7cb9e85ee62406249fcffd6d

[root@docker ~]# cd /var/lib/docker/volumes/nginx-vol/_data --这里的数据卷是和容器中的是一样的内容

[root@docker _data]# ls

50x.html index.html

[root@docker _data]# echo 'nginx1' > index.html

验证:

[root@docker _data]# curl 192.168.1.13:88

nginx1

注意:

如果没有指定卷,自动创建。建议使用--mount,更通用

Bind Mounts

用卷创建一个容器:指定type=bind --》这个是将宿主机上app/wwwroot 挂载到/usr/share/nginx/html 上

[root@docker _data]# docker run -d -it --name=nginx-test --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html -p 88:80 nginx

验证:

[root@docker wwwroot]# curl 192.168.1.13:88

nginx1

进入到了该容器:

root@de4cc3ad76a0:/# cd /usr/share/nginx/html/

root@de4cc3ad76a0:/usr/share/nginx/html# ls

index.html

注意:

如果源文件/目录没有存在,不会自动创建,会抛出一个错误。如果挂载目标在容器中非空目录,则该目录现有内容将被隐藏。

小结

Volume特点:

• 多个运行容器之间共享数据。• 当容器停止或被移除时,该卷依然存在。• 多个容器可以同时挂载相同的卷。• 当明确删除卷时,卷才会被删除。• 将容器的数据存储在远程主机或其他存储上• 将数据从一台Docker主机迁移到另一台时,先停止容器,然后备份卷的目录(/var/lib/docker/volumes/)

Bind Mounts特点:

• 从主机共享配置文件到容器。默认情况下,挂载主机/etc/resolv.conf到每个容器,提供DNS解析。• 在Docker主机上的开发环境和容器之间共享源代码。例如,可以将Maven target目录挂载到容器中,每次在Docker主机上构建Maven项目时,容器都可以访问构建的项目包。• 当Docker主机的文件或目录结构保证与容器所需的绑定挂载一致时

容器网络

网络模式

bridge–net=bridge默认网络,Docker启动后创建一个docker0网桥,默认创建的容器也是添加到这个网桥中。• host–net=host容器不会获得一个独立的network namespace,而是与宿主机共用一个。这就意味着容器不会有自己的网卡信息,而是使用宿主机的。容器除了网络,其他都是隔离的。• none–net=none获取独立的network namespace,但不为容器进行任何网络配置,需要我们手动配置。• container 2个容器的网络可以通讯 –net=container:Name/ID与指定的容器使用同一个network namespace,具有同样的网络配置信息,两个容器除了网络,其他都还是隔离的。• 自定义网络与默认的bridge原理一样,但自定义网络具备内部DNS发现,可以通过容器名或者主机名容器之间网络通信。

容器网络访问原理

验证:

注意系统必须指定 -it 不然启动失败

[root@docker wwwroot]# docker run -itd --net=bridge --name=icar1 -h icar1 centos

90b9a40f6290e6136e438bab5dcbd2720ed1b2c0a7b9c6abaede64574d4831e8

[root@docker wwwroot]# docker ps -l

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

90b9a40f6290 centos "/bin/bash" 4 seconds ago Up 3 seconds icar1

[root@docker wwwroot]# docker exec -it 90b9a40f6290 bash

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。