发布自己的镜像
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
阿里云镜像
1.登录阿里云
2.找到容器镜像服务
3.创建命令空间
创建容器镜像:
浏览阿里云镜像:
阿里云容器镜像参考官方地址:
docker tag [ImageId] registry.cn-beijing.aliyuncs.com/doudoutj/kuangshen-test:[镜像版本号]
docker push registry.cn-beijing.aliyuncs.com/doudoutj/kuangshen-test:[镜像版本号]
成功发布:
小结
[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)
三个网络
#问题: docker是如何处理容器网络访问的?
[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
2.再启动一个容器测试,发现又多了一对网卡!
[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通的!
结论:tomcat01 和tomcat02是公用的一个路由器, docker0.
所有的容器不指定网络的情况下,都是docker0路由器,docker会给我们的容器分配一个默认的可用IP
小结
Docker使用的是Linux的桥接,宿主机中是一个Docker 容器的网桥 docker0。
Docker中的所有的网络接口都是虚拟的。虚拟的转发效率高。
只要容器删除,对应的网桥一对就没了!
B站学习地址:【狂神说Java】Docker最新超详细版教程通俗易懂_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili