7.发布我们的镜像到DockerHub
2、注册账号,确定这个账号可以登录 邮箱 + 经典密码 注意首字母大写
3、登录服务器
用docker login -u [用户名],然后输入密码就可以登录成功 [root@Jsxs /]# docker login -u 2261203961 Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
4、登录完毕后就可以提交上去镜像,就是一步 docker push
首先我们要创建一个仓库: 会帮助我们生成账号/仓库名
1. 创建tag docker tag 需要提交镜像的id 账户名/仓库名:版本 2. 提交 docker push 账户名/仓库名:版本号![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/c5e405a5520c429bbd372b22e311f090.png)
8.发布我们的镜像到阿里云
- 登录阿里云
- 找到容器镜像服务:https://cr.console.aliyun.com/cn-beijing/instance/new
- 创建命名空间
- 然后创建仓库,创建完毕之后会出现操作指南
以下内容参考阿里云官方文档
docker pull 账户名/仓库名:[tag]
(八)、 Docker网络
1. 查看本机ip地址
root@Jsxs jsxs]# ip addr
详细解释:
有三个网络,代表三种不同环境。
两个容器之间是怎么通信的,用的是哪个网络进行链接的
# 问题: docker是如何处理容器网络访问的? 1.一定要是7版本 docker run -d -P --name tomcat01 tomcat:7 #创建一个容器并启动 ------- 2.进入正在运行的容器,但是不用 # 进入的命令,但是不用 docker exec -it tomcat01 /bin/bash #这是进入命令,但是我们不用 ------- 3.查看IP docker exec -it tomcat01 ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 104: eth0@if105: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever ------- # 思考: 每一个容器都有一个ip地址,linux能否ping通容器内部? [root@Jsxs jsxs]# ping 172.17.0.2 PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data. 64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.101 ms 64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.049 ms 64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.050 ms 64 bytes from 172.17.0.2: icmp_seq=4 ttl=64 time=0.052 ms 64 bytes from 172.17.0.2: icmp_seq=5 ttl=64 time=0.060 ms #说明我们的linux可以ping通docker容器内部💥
(1).原理
1.正常家庭中: 路由器
路由器也是源头: 192.168.01。然后如果有链接到这个网络的就会变成192.168.02。遇9进1
手机wifi
相同的网关是能够ping通的。这也就是我们linux能够ping 通容器的原因。
- 测试容器和Linux的网卡
1、我们每启动一个docker容器,docker就会给docker容器分配一个ip
,我们只要安装了docker,就会有一个网卡 docker0
桥接模式 ,使用的技术是 evth-pair技术
再次测试ip addr,多了一对网卡
再次创建一个容器,我们发现又多了一对网卡
再次查看容器,我们发现容器的网卡和Linux的网卡一致
我们发现这些网卡都是一对对的
veth-pair就是一对的虚拟设备接口,它们都是成对出现
的,一段连着协议,一段彼此相连
正因为有这个特性veth-pair充当一个桥梁
,连接各种虚拟网络设备OpenStack,Docker容器之间的连接
,OVS的连接,都是使用veth-pair技术
3.测试tomcat01和tomcat02是否可以ping通
[root@Jsxs jsxs]# docker exec -it tomcat01 ip addr #查看容器01的ip --- 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 104: eth0@if105: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever [root@Jsxs jsxs]# docker exec -it tomcat02 ip addr 查看容器02的ip --- 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 106: eth0@if107: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:04 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.4/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever --- 127.0.0.2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 39ms rtt min/avg/max/mdev = 0.028/0.030/0.032/0.004 ms [root@Jsxs jsxs]# docker exec -it tomcat02 ping 127.0.0.2 #容器02能ping通01 --- PING 127.0.0.2 (127.0.0.2) 56(84) bytes of data. 64 bytes from 127.0.0.2: icmp_seq=1 ttl=64 time=0.026 ms 64 bytes from 127.0.0.2: icmp_seq=2 ttl=64 time=0.027 ms ^C --- 127.0.0.2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 51ms rtt min/avg/max/mdev = 0.026/0.026/0.027/0.005 ms
总结: 两个容器之间是相互ping通的
结论:tomcat01和tomcat02是共用的一个路由器,docker0
所有的容器在不指定网络的情况下,都是由docker0路由的,docker会给我们的容器分配一个默认的可用ip
(2).总结
Docker中所有的网络接口都是虚拟的,虚拟的转发效率比较高(内网传递文件,网速很快!
)
只要容器删除,对应的网桥就没了,那一对就没了。
2. --link 【容器名访问1-同网关下】
思考一个场景,我们编写了一个微服务,database url=ip:,项目不重启,数据库ip换掉了,我们希望可以处理这个问题,可以通过名字来访问容器?
我们开启两个容器,用容器名字 容器一ping容器2发现ping不同
[root@Jsxs ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 84c6f65362d5 tomcat:7 "catalina.sh run" 8 seconds ago Up 6 seconds 0.0.0.0:32774->8080/tcp, :::32774->8080/tcp tomca02 36709d50b053 tomcat:7 "catalina.sh run" 22 seconds ago Up 20 seconds 0.0.0.0:32773->8080/tcp, :::32773->8080/tcp tomca01 4aba86a517af portainer/portainer "/portainer" 41 hours ago Up 41 hours 0.0.0.0:8088->9000/tcp, :::8088->9000/tcp eager_agnesi [root@Jsxs ~]# docker exec -it tomcat02 ping tomcat01 #ping不通 Error response from daemon: No such container: tomcat02
如何才能让容器名能ping通容器名呢? --link
# 把容器三链接容器2 [root@Jsxs ~]# docker run -d -P --name tomca03 --link tomca02 tomcat:7 aaaf842b749d2c9c9abd9b1279fa6ee4528190069dbce885752bd8b850105dd9 #容器三ping 容器2 能够ping通 [root@Jsxs ~]# docker exec -it tomca03 ping tomca02 PING tomca02 (172.17.0.4) 56(84) bytes of data. 64 bytes from tomca02 (172.17.0.4): icmp_seq=1 ttl=64 time=0.123 ms 64 bytes from tomca02 (172.17.0.4): icmp_seq=2 ttl=64 time=0.084 ms ^C --- tomca02 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 30ms rtt min/avg/max/mdev = 0.084/0.103/0.123/0.022 ms --------------- #链接只是单向链接,只有主动链接的那方才能ping到被动链接的一方. [root@Jsxs ~]# docker exec -it tomca02 ping tomca03 ping: tomca03: Name or service not known