端口映射与容器互联
创始人
2024-02-12 03:13:50

1.  端口映射实现访问容器:

        在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内部的网络应用和服务的。

        当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-p或-P参数来指定饼口映射。当使用"- P"(大写P)标记时,Docker会随机映射一个端口到内部容器开放的网络端口(端口范围在Linux系统使用的端口之外,一般都过万)∶

[root@node1 ~]# docker run -d --name web1 -P nginx:latest##查看随即映射的端口:
[root@node1 ~]# docker port web1
80/tcp -> 0.0.0.0:49153
80/tcp -> :::49153

" -p"(小写p):可以指定要映射的端口,并且在一个指定的端口上只可以绑定一个容器。支持的格式有∶" IP∶HostPort∶ContainerPort "," IP::ContainerPort " ," HostPort:ContainerPort "。

##添加一个ip地址
[root@node1 ~]# nmcli con mod eth0 +ipv4.address 192.168.188.124/24[root@node1 ~]# nmcli con up eth0##使用" IP∶HostPort∶ContainerPort "方式指定端口实现端口映射:
[root@node1 ~]# docker run -d --name web2 -p 192.168.188.124:81:80 nginx##使用" IP∶∶ContainerPort "方式指定端口实现端口映射,该方式会在指定地址的随机一个端口映射:
[root@node1 ~]# docker run -d --name web3 -p 192.168.188.124::80 nginx#查看容器web3端口:
[root@node1 ~]# docker port web3
80/tcp -> 192.168.188.123:49163##查看端口映射
[root@node1 ~]# iptables -t nat -vnLChain DOCKER (2 references)pkts bytes target     prot opt in     out     source               destination         0     0 RETURN     all  --  docker0 *       0.0.0.0/0            0.0.0.0/0           0     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:49153 to:172.17.0.3:800     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:172.17.0.10:800     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            192.168.188.123      tcp dpt:49163 to:172.17.0.11:800     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            192.168.188.123      tcp dpt:81 to:172.17.0.12:80

2.  容器互联:使用" --link "参数可以让容器之间安全地进行交互。例如:

        1>.  创建一个数据库容器:

[root@node1 ~]# docker run -d --name mysql --env MYSQL_ROOT_PASSWORD='123456'"--env":表示指定参数
"MYSQL_ROOT_PASSWORD":表示指定数据库密码

        2>.  创建一个discuz容器关联数据库容器:

[root@docker ~]# docker run -d -p 80:80 -name discuz --link mysql:db tencentci/discuz其中:--link参数的格式为∶--link name∶alias,其中name是要连接的容器名称,alias是这个连接的
别名。

     Docker相当于在两个互联的容器之间创建了一个虚拟通道,而不用映射它们的端口到宿主机上。在启动mysql容器的时候并没有使用-p或者-P参数, 从而避免了暴露数据库服务端口到外部网络上。

          3>.  通过浏览去访问" 192.168.188.111 "访问并安装论坛:

 

 

 

 Docker通过两种方式为容器公开连接信息∶

        1>.  更新环境变量:使用env命令来查看web容器的环境变量。其中"DB_"开头的环境变量是提供web容器连接数据库容器使用的,前缀采用大写的连接别名。

[root@node1 ~]# docker run --rm -p 88:80 --link mysql:db --name discuz tencentci/discuz envDB_ENV_MARIADB_MAJOR=10.6
PHP_EXTRA_CONFIGURE_ARGS=--with-apxs2 --disable-cgi
APACHE_CONFDIR=/etc/apache2
HOSTNAME=cbe01a1b1c82
DB_PORT=tcp://172.17.0.2:3306
PHP_INI_DIR=/usr/local/etc/php
DB_PORT_3306_TCP=tcp://172.17.0.2:3306
PHP_EXTRA_BUILD_DEPS=apache2-dev
HOME=/root
DB_NAME=/discuz/db
PHP_LDFLAGS=-Wl,-O1 -Wl,--hash-style=both -pie
PHP_CFLAGS=-fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
PHP_MD5=
PHP_VERSION=7.3.12
GPG_KEYS=CBAF69F173A0FEA4B537F470D66C9593118BCCB6 F38252826ACD957EF380D39F2F7956BC5DA04B5D
PHP_CPPFLAGS=-fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
PHP_ASC_URL=https://www.php.net/get/php-7.3.12.tar.xz.asc/from/this/mirror
DB_ENV_MARIADB_VERSION=1:10.6.5+maria~focal
PHP_URL=https://www.php.net/get/php-7.3.12.tar.xz/from/this/mirror
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
DZ_URL=https://www.discuz.net/daily/?dl=DZX-SC_UTF8-v3.5-202102010500-34d24c9b.zip
DB_PORT_3306_TCP_ADDR=172.17.0.2
DZ_WWW_ROOT=/var/www/html
DB_ENV_MYSQL_ROOT_PASSWORD=123456
PHPIZE_DEPS=autoconf 		dpkg-dev 		file 		g++ 		gcc 		libc-dev 	     make 		pkg-config 		re2c
PWD=/var/www/html
DB_ENV_GOSU_VERSION=1.14
PHP_SHA256=aafe5e9861ad828860c6af8c88cdc1488314785962328eb1783607c1fdd855df
DB_PORT_3306_TCP_PORT=3306
APACHE_ENVVARS=/etc/apache2/envvars
DB_PORT_3306_TCP_PROTO=tcp

        2>.  自动更新/etc/hosts文件:Docker自动添加host信息到父容器的/etc/hosts文件中。

[root@node1 ~]# docker run -it -p 88:80 --link mysql:db --name discuz tencentci/discuz /bin/bashroot@0ea422e21f40:/var/www/html# cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.2	db e74c62c3881f mysql
172.17.0.13	0ea422e21f40

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...