Docker数据管理及网络通信、端口映射

网友投稿 250 2022-10-28

Docker数据管理及网络通信、端口映射

博文目录: 一、docker的数据管理 1、数据卷 2、数据卷容器 二、docker网络通信 1、端口映射 2、容器互联 三、容器中部署MySQL服务并发布 四、容器中部署Apache服务并发布

一、docker的数据管理

在docker中,为了方便查看容器内产生的数据或者将多个容器之间的数据实现共享,会涉及到容器的数据管理操作,管理docker容器中的数据主要有两种方式:数据卷和数据卷容器。

1、数据卷

数据卷是一个供容器使用的特殊目录,位于容器中,可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立即可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移,数据卷的使用类似于Linux下对目录进行的mount挂载操作(注意:是将宿主机本地的目录挂载到容器中,举例:若宿主机本地/data目录挂载的是/dev/sdb1,那么要将/data做数据卷映射时,容器中指定的目录使用的文件系统也是/dev/sdb1,我不知道这样解释,你们能不能理解它的工作原理)。

1)挂载宿主机目录作为数据卷举例:

使用-v选项可以创建数据卷(只是运行容器时,创建一个目录),创建数据卷的同时将宿主机的目录挂载到数据卷上使用,以实现宿主机与容器之间的数据迁移。

需要注意的是,宿主机本地目录的路径必须是使用绝对路径,如果路径不存在,Docker会自动创建相应的路径。

[root@centos01 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hub.c.163.com/public/centos 6.7-tools b2ab0ed558bb 3 years ago 602 MB [root@centos01 ~]# docker run -d --name centos6.701 -v /data1 hub.c.163.com/public/centos:6.7-tools b85a2d8419a98756369ddc3b78247d3d42c178e8e563a936fe973f2f6611f951 [root@centos01 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b85a2d8419a9 hub.c.163.com/public/centos:6.7-tools "/usr/bin/supervisord" 32 seconds ago Up 32 seconds 22/tcp centos6.701 [root@centos01 ~]# ls /var/lib/docker/volumes/ fbc3bde69b9eaf6410d7e52ba412ab07bbfe49e83315d245dbcf44bf2aa6b91a metadata.db [root@centos01 ~]# dd if=/dev/zero of=./1.iso bs=10M count=10 [root@centos01 ~]# cp 1.iso /var/lib/docker/volumes/ fbc3bde69b9eaf6410d7e52ba412ab07bbfe49e83315d245dbcf44bf2aa6b91a/_data/ [root@centos01 ~]# docker exec -it centos6.701 /bin/bash [root@b85a2d8419a9 /]# ls data1/ 1.iso

2、数据卷容器

如果需要在容器之间共享一些数据,最简单的方法就是使用数据卷容器。数据卷容器就是一个普通的容器,专门提供数据卷给其他容器挂载使用。使用方法如下:首先,需要创建一个容器作为数据卷容器,之后在其他容器创建时用--volumes-from挂载数据卷容器中的数据卷使用。

1)数据卷容器创建及使用举例:

[root@centos01 ~]# docker run -it -d --name datasrv -v /data1 -v /data2 hub.c.163.com/public/centos:6.7-tools /bin/bash 6c2e89e442fba34821f044d1b589ef70cd2c4d775f83084ce0d7bb8a331c0a55 [root@centos01 ~]# docker exec -it datasrv /bin/bash [root@6c2e89e442fb /]# ls | grep data data1 data2 [root@6c2e89e442fb /]# exit exit [root@centos01 ~]# docker run -it -d --volumes-from datasrv --name lyx hub.c.163.com/public/centos:6.7-tools 56fff3838cb714369d99e30ea6eebc72e0c6ca1aa11b5e66f3c403ca74c2460e [root@centos01 ~]# docker exec -it lyx /bin/bash [root@56fff3838cb7 /]# ls |grep data data1 data2 [root@56fff3838cb7 /]# echo "lyx.com" > /data1/lyx.txt [root@56fff3838cb7 /]# exit exit [root@centos01 ~]# docker exec -it datasrv /bin/bash [root@6c2e89e442fb /]# cat /data1/lyx.txt lyx.com [root@6c2e89e442fb /]# exit exit [root@centos01 ~]# cd /var/lib/docker/volumes/ [root@centos01 volumes]# ls cd27325467149a236d16bd8f4dcdf84c7c6018fd800e2f6d7e04980119390428 metadata.db [root@centos01 volumes]# [root@centos01 volumes]# ls cd27325467149a236d16bd8f4dcdf84c7c6018fd800e2f6d7e04980119390428/_data/ lyx.txt

注意,生产环境中最注重的就是存储的可靠性,以及存储的可动态扩展性,一定要在做数据卷时考虑到这一点,在这方面比较出色的还要数GFS文件系统了,我上面只是做了简单的配置,若在生产环境中,一定要好好考虑,就比如上面做的镜像卷容器,就可以在宿主机本地挂载GFS文件系统,然后创建镜像卷容器时,将挂载GFS的目录映射到容器中的镜像卷,这样才是一个合格的镜像卷容器。

二、docker网络通信

1、端口映射

docker提供了映射容器端口到宿主机和容器互联机制来为容器提供网络服务。

在启动容器的时候,如果不指定对应的端口,在容器外是无法通过网络来访问容器内的服务的。docker提供端口映射机制来将容器内的服务提供给外部网络访问,实质上就是将宿主机的端口映射到容器中,使外部网络访问宿主机的端口可访问容器内的服务。

实现端口映射,需要在运行docker run命令时使用-P(大写)选项实现随机映射,Docker一般会随机映射到一个端口访问在49000~49900的端口到容器内部开放的网络端口,但不是绝对的,也有例外情况不会映射到这个范围;也可以使用在运行docker run命令时使用-p(小写)选项实现指定要映射的端口(常用此种方法)。

1)端口映射举例:

[root@centos01 ~]# docker run -d -P --name ssh hub.c.163.com/public/centos:6.7-tools ff30d37776877e47a3c39b932610f93b74dd48e73260de092f882ac76e8a052f [root@centos01 ~]# docker run -d -p 49000:22 --name ssh1 hub.c.163.com/public/centos:6.7-tools 2fb5469b67e01fc3fcf653e31dd0462dd9ca484849c34544a7bb55143adc608f [root@centos01 ~]# docker run -d -p 192.168.100.10:1111:22 --name ssh2 hub.c.163.com/public/centos:6.7-tools 3ee8614b50a777726f1bd857f2b1c57be70b3a06846c3c35de8610511873c962 [root@centos01 ~]# docker run -d -p 192.168.100.10::22 --name ssh3 hub.c.163.com/public/centos:6.7-tools 9de4b73e11db5e25fd9511f7708f812de369673bae79c76880e5493723fcd918 [root@centos01 ~]# docker run -d -p 192.168.100.10:1234:22/tcp --name ssh4 hub.c.163.com/public/centos:6.7-tools ceec5bc53037345d5822a29830b38158d8a0add7b3584e36371a34a0851de043 [root@centos01 ~]# docker port ssh4 22/tcp -> 192.168.100.10:1234 [root@centos01 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ceec5bc53037 hub.c.163.com/public/centos:6.7-tools "/usr/bin/supervisord" 3 minutes ago Up 3 minutes 192.168.100.10:1234->22/tcp ssh4 9de4b73e11db hub.c.163.com/public/centos:6.7-tools "/usr/bin/supervisord" 4 minutes ago Up 4 minutes 192.168.100.10:32769->22/tcp ssh3 3ee8614b50a7 hub.c.163.com/public/centos:6.7-tools "/usr/bin/supervisord" 4 minutes ago Up 4 minutes 192.168.100.10:1111->22/tcp ssh2 2fb5469b67e0 hub.c.163.com/public/centos:6.7-tools "/usr/bin/supervisord" 5 minutes ago Up 5 minutes 0.0.0.0:49000->22/tcp ssh1 ff30d3777687 hub.c.163.com/public/centos:6.7-tools "/usr/bin/supervisord" 5 minutes ago Up 5 minutes 0.0.0.0:32768->22/tcp ssh

2、容器互联

容器互联是通过容器的名称在容器之间建立一条专门的网络通信隧道从而实现的互联。简单说,就是会在源容器和接收容器之间建立一条隧道,接收容器可以看到源容器指定的信息。

在运行docker run命令时,使用--link选项实现容器之间的互联通信,格式如下:

--link name: alias #其中name是要连接的容器名称,alias是这个连接的别名。

容器互联是通过容器的名称来执行的,--name选项可以给容器创建一个友好的名称,这个名称是唯一的,如果已经命名了一个相同名称的容器,当要再次使用这个名称的时候,需要先使用docker rm命令来删除之前创建的同名容器。

1)容器互联举例:

[root@localhost ~]# docker run -it -d -P --name web1 docker.io//bin/bash c88f7340f0c12b9f5228ec38793e24a6900084e58ea4690e8a847da2cdfe0b [root@localhost ~]# docker run -it -d -P --name web2 --link web1:web1 docker.io//bin/bash c7debd7809257c6375412d54fe45893241d2973b7af1da75ba9f7eebcfd4d652 [root@localhost ~]# docker exec -it web2 /bin/bash root@c7debd780925:/usr/local/apache2# cd root@c7debd780925:~# ping web1 bash: ping: command not found root@c7debd780925:~#apt-get update root@c7debd780925:~#apt install iputils-ping root@c7debd780925:~#apt install net-tools root@c7debd780925:~# ping web1 PING web1 (172.17.0.2) 56(84) bytes of data. 64 bytes from web1 (172.17.0.2): icmp_seq=1 ttl=64 time=0.079 ms 64 bytes from web1 (172.17.0.2): icmp_seq=2 ttl=64 time=0.114 ms .............. [root@localhost ~]# docker run -dit -P --name web3 --link web1:web1 --link web2:web2 docker.io//bin/bash [root@localhost ~]# docker exec -it web3 /bin/bash root@433d5be6232c:/usr/local/apache2# cd root@433d5be6232c:~# apt-get update root@433d5be6232c:~# apt install iputils-ping root@433d5be6232c:~# ping web1 PING web1 (172.17.0.2) 56(84) bytes of data. 64 bytes from web1 (172.17.0.2): icmp_seq=1 ttl=64 time=0.102 ms 64 bytes from web1 (172.17.0.2): icmp_seq=2 ttl=64 time=0.112 ms .............. root@433d5be6232c:~# ping web2 PING web2 (172.17.0.3) 56(84) bytes of data. 64 bytes from web2 (172.17.0.3): icmp_seq=1 ttl=64 time=0.165 ms 64 bytes from web2 (172.17.0.3): icmp_seq=2 ttl=64 time=0.115 ms ..............

三、容器中部署MySQL服务并发布

[root@centos01 ~]# ping baidu.com PING a.shifen.com (39.156.66.14) 56(84) bytes of data. 64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=1 ttl=128 time=17.6 ms 64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=2 ttl=128 time=22.2 ms 64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=3 ttl=128 time=18.8 ms [root@centos01 ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf [root@centos01 ~]# sysctl -p net.ipv4.ip_forward = 1 [root@centos01 ~]# docker run -d -p 192.168.100.10:3306:3306/tcp --name mysql hub.c.163.com/public/centos:6.7-tools ff30d37776877e47a3c39b932610f93b74dd48e73260de092f882ac76e8a052f [root@centos01 ~]# docker ps |grep mysql c63f5cfd4e02 hub.c.163.com/public/centos:6.7-tools "/usr/bin/supervisord" 13 seconds ago Up 12 seconds 22/tcp, 192.168.100.10:3306->3306/tcp mysql [root@centos01 ~]# docker exec -it mysql /bin/bash [root@ff30d3777687 /]# yum -y install mysql mysql-server [root@ff30d3777687 /]# service mysqld start [root@ff30d3777687 /]# chkconfig --level 35 mysqld on [root@ff30d3777687 /]# mysqladmin -uroot password 'pwd@123' [root@ff30d3777687 /]# mysql -uroot -ppwd@123 mysql> grant all on *.* to 'liyanxin'@'192.168.100.10' identified by 'pwd@123'; [root@centos01 ~]# yum -y install mysql [root@centos01 ~]# mysql -h 192.168.100.10 -uliyanxin -ppwd@123 MySQL [(none)]> create database liyanxin; [root@centos01 ~]# docker exec -it mysql /bin/bash [root@ff30d3777687 /]# mysql -uroot -ppwd@123 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | liyanxin | | mysql | | test | +--------------------+ 4 rows in set (0.00 sec)

四、容器中部署Apache服务并发布

[root@centos01 ~]# docker run -d -p 192.168.100.10:80:80/tcp --name hub.c.163.com/public/centos:6.7-tools 9de4b73e11db5e25fd9511f7708f812de369673bae79c76880e5493723fcd918 [root@centos01 ~]# docker ps |grep 836394dc1dd3 hub.c.163.com/public/centos:6.7-tools "/usr/bin/supervisord" 8 seconds ago Up 7 seconds 22/tcp, 192.168.100.10:80->80/tcp httpd [root@centos01 ~]# docker exec -it /bin/bash [root@9de4b73e11db /]# yum -y install [root@9de4b73e11db /]# echo "docker.apache.com" > /var/ [root@9de4b73e11db /]# service start [root@9de4b73e11db /]# chkconfig --level 35 on [root@9de4b73e11db /]# tail -f /var/log/ [root@centos01 ~]# curl docker.apache.com [root@centos01 ~]# docker exec -it /bin/bash [root@9de4b73e11db /]# tail -f /var/log/ 192.168.100.10 - - [11/May/2020:17:22:07 +0800] "GET / HTTP/1.1" 403 4961 "-" "curl/7.29.0" 192.168.100.10 - - [11/May/2020:17:23:13 +0800] "GET / HTTP/1.1" 200 22 "-" "curl/7.29.0"

———————— 本文至此结束,感谢阅读 ————————

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:PCI9052接口芯片的性能特点及应用实例分析
下一篇:新闻:曝iPhone14将继续用Lightning接口 中国广电5G正式放号39元起
相关文章

 发表评论

暂时没有评论,来抢沙发吧~