105.【Docker】(八)

简介: 105.【Docker】

7.发布我们的镜像到DockerHub

1、地址https://hub.docker.com/

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.发布我们的镜像到阿里云

  1. 登录阿里云
  2. 找到容器镜像服务:https://cr.console.aliyun.com/cn-beijing/instance/new
  3. 创建命名空间

  4. 然后创建仓库,创建完毕之后会出现操作指南

以下内容参考阿里云官方文档

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 通容器的原因。


  1. 测试容器和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


相关文章
|
7月前
|
监控 Linux 持续交付
认识Docker
认识Docker
58 0
|
1月前
|
Linux 网络安全 文件存储
docker中使用opwrt详解
在docker中配置opwrt
109 5
|
6月前
|
存储 Java Linux
|
关系型数据库 MySQL 虚拟化
docker介绍
docker介绍
98 0
|
Docker 容器
|
NoSQL Java Linux
|
存储 Kubernetes 负载均衡
Docker
是一个开源的容器化平台,它可以让开发者和系统管理员轻松地创建、部署和运行应用程序。Docker使用操作系统级别的虚拟化技术,可以将应用程序及其依赖项打包到一个称为Docker容器的单个可移植包中,从而实现应用程序的隔离、移植性和可重复性。
2718 2
|
Kubernetes Linux 持续交付
什么是Docker?
什么是Docker?
146 0
|
运维 Linux Go
首先我们要知道 Docker 是什么?能干什么?
首先我们要知道 Docker 是什么?能干什么?
2328 1
|
Ubuntu NoSQL Linux
了解和理解Docker的使用
Docker背景 Docker技术是基于Linux容器 虚拟容器技术的 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的
166 0
了解和理解Docker的使用
下一篇
DataWorks