第139天学习打卡(Docker 发布自己的镜像 Docker网络)

Posted 豆豆tj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第139天学习打卡(Docker 发布自己的镜像 Docker网络)相关的知识,希望对你有一定的参考价值。

发布自己的镜像

DockerHub

1.地址[Docker Hub](https://hub.docker.com/)注册自己的账号

2.确定这个账号可以登录

 exit 退出
 docker stop 容器id  #停止这个容器

3.在我们服务器上提交自己的镜像

 [root@kuangshen home]# docker login --help
 
 Usage: docker login [OPTIONS] [SERVER]
 
 Log in to a Docker registry.
 If no server is specified, the default is defined by the daemon.
 
 Options:
   -p, --password string   Password
       --password-stdin   Take the password from stdin
   -u, --username string   Username
 [root@kuangshen home]#
 

4.登录完毕之后就可以提交镜像了,就是一步 docker push

 
 [root@kuangshen home]# docker login -u doudoutj111
 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
 # push自己的镜像到服务器上!
 [root@kuangshen home]# docker push diytomcat
 Using default tag: latest
 The push refers to repository [docker.io/library/diytomcat]
 9de6adace58a: Preparing
 f91e9cf9384b: Preparing
 9cfae66b36ee: Preparing
 ff2c64520331: Preparing
 2653d992f4ef: Preparing
 denied: requested access to the resource is denied #拒绝
 
 # 解决办法增加一个tag 注意使用的是自己的用户名
 [root@kuangshen home]# docker tag f5ba5c225134 doudoutj111/tomcat:1.0
 #docker push上去即可!自己发布的镜像尽量带上版本号
 [root@kuangshen home]# docker push doudoutj111/tomcat:1.0
 The push refers to repository [docker.io/doudoutj111/tomcat]
 9de6adace58a: Pushed
 f91e9cf9384b: Pushed
 9cfae66b36ee: Pushing [================>                                 ]  116.7MB/359.6MB
 ff2c64520331: Pushed
 2653d992f4ef: Pushing [========================>                         ]  101.4MB/209.3MB
 

image-20210527170930846

 

阿里云镜像

1.登录阿里云

2.找到容器镜像服务

image-20210527171725883

3.创建命令空间

image-20210527171957994

 

image-20210527172202982

 

image-20210527172559185

创建容器镜像:

image-20210527172655585

浏览阿里云镜像:

image-20210527173003014

image-20210527182738153

阿里云容器镜像参考官方地址:

 docker tag [ImageId] registry.cn-beijing.aliyuncs.com/doudoutj/kuangshen-test:[镜像版本号]
 docker push registry.cn-beijing.aliyuncs.com/doudoutj/kuangshen-test:[镜像版本号]

image-20210527174154979

成功发布:

image-20210527183016521

小结

image-20210527182818935

 [root@kuangshen home]# docker save --help
 
 Usage: docker save [OPTIONS] IMAGE [IMAGE...]
 
 Save one or more images to a tar archive (streamed to STDOUT by default)
 
 Options:
   -o, --output string   Write to a file, instead of STDOUT
 [root@kuangshen home]# docker load --help
 
 Usage: docker load [OPTIONS]
 
 Load an image from a tar archive or STDIN
 
 Options:
   -i, --input string   Read from tar archive file, instead of STDIN
   -q, --quiet         Suppress the load output
 [root@kuangshen home]#
 

Docker网络

理解Docker0网络

清空所有环境:

移除所有的容器

 [root@kuangshen home]# docker rm -f $(docker ps -aq)
 

移除所有的镜像

 [root@kuangshen home]# docker rmi -f $(docker images -aq)
 

image-20210527184339627

三个网络

 #问题: docker是如何处理容器网络访问的?

image-20210527184519025

 

 [root@kuangshen /]# docker run -d -P --name tomcat01 tomcat
 
 # 查看容器的内部网络地址 ip addr
 [root@kuangshen /]# docker exec -it tomcat01 ip addr,发现容器启动的时候会得到一个eth0@if111 ip地址, docker分配的。
 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
 110: eth0@if111: <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
 # 思考, linux 能不能 ping 通容器内部!
 [root@kuangshen /]# 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.098 ms
 64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.049 ms
 # linux 可以ping 通docker 容器内部
 

Ctrl + C退出

原理

1.我们每启动一个docker容器, docker就会给docker容器分配一个ip, 我们只要安装了docker,就会有一个网卡docker0,桥接模式,使用的技术是evth-pair技术!

再次测试ip addr

image-20210527191103206

2.再启动一个容器测试,发现又多了一对网卡!

 

image-20210527191503847

 

 [root@kuangshen /]# docker exec -it tomcat02 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
 112: eth0@if113: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
        valid_lft forever preferred_lft forever
 
 # 我们发现这个容器带来网卡,都是一对一对的
 # evth-pair 就是一对虚拟设备接口,他们都是成对出现的,一端连着协议,一端彼此相连
 # 正因为这个特性, evth-pair充当一个桥梁,连接各种虚拟网络设备的
 # OpenStac ,Docker容器之间的连接,OVS的连接,都是使用evth-pair技术
 

3.我们来测试一下tomcat01和tomcat02是否可以ping通

 [root@kuangshen /]# docker exec -it tomcat02 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.085 ms
 # 结论:容器和容器之间是可以互相ping通的!
 

 

image-20210527193021867

结论:tomcat01 和tomcat02是公用的一个路由器, docker0.

所有的容器不指定网络的情况下,都是docker0路由器,docker会给我们的容器分配一个默认的可用IP

小结

Docker使用的是Linux的桥接,宿主机中是一个Docker 容器的网桥 docker0。

image-20210527193605076

Docker中的所有的网络接口都是虚拟的。虚拟的转发效率高。

只要容器删除,对应的网桥一对就没了! image-20210527194131096

B站学习地址:【狂神说Java】Docker最新超详细版教程通俗易懂_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

以上是关于第139天学习打卡(Docker 发布自己的镜像 Docker网络)的主要内容,如果未能解决你的问题,请参考以下文章

第138天学习打卡(Docker 实战测试 Tomcat)

第137天学习打卡(Docker DockerFile)

第135天学习打卡(Docker 可视化 镜像讲解 分层理解 commit镜像)

第140天学习打卡(Docker --link 自定义网络 网络连通 部署Redis集群 发布SpringBoot镜像)

第133天学习打卡(Docker 初识Docker Docker的基本组成 安装docker 阿里云镜像加速 Docker常用命令)

第134天学习打卡(Docker 容器命令 常用其他命令 Docker安装Nginx )