Docker技术探讨
跟着B站狂神学习的笔记,若有不足请多担待!!!
Docker安装
1.卸载旧版
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
去查官网吧
Docker run的运行流程图
docker 底层原理
Docker是一个Client-Server结构的体系,Docker的守护进程运行在主机上。通过Socket从客户端访问!
DockerServer接收到Docker-Client的指令,就会去执行这个命令!
Docker的常用命令
帮助命令
docker version #显示docker的版本信息
docker info #显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help #万能命令
帮助文档的地址:https://docs.docker.com/engine/reference
镜像命令
- docker images #查看本主机的所有镜像
docker images #查看本主机的所有镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 11 months ago 13.3kB
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的ID
CREATED 创建时间
SIZE 镜像的大小
- docker search #搜索镜像
#搜索仓库中mysql收藏数大于3000的
docker search mysql --filter=STARS=3000
- docker pull 镜像名 #下载镜像
#仓库中下载mysql的镜像
docker pull mysql
#指定版本下载
docker pull mysql:5.7
- docker rmi 删除镜像
#删除指定的镜像id
docker rmi -f 镜像id
#删除多个镜像id
docker rmi -f 镜像id1 镜像id2 镜像id3
#删除全部的镜像id
docker rmi -f $(docker images -aq)
容器命令
#有了镜像才可以创建容器
1.运行容器命令
docker run [参数] 镜像名称
#参数说明
--name="名字" 指定容器名字
-d 后台方式运行容器
-it 以交互方式运行,进入容器查看内容
-p 指定容器的端口
-P 随机指定端口
#-p参数详细说明
-p ip:主机端口:容器端口 #配置主机端口映射到容器端口
-p 容器端口 #指定容器端口
-p 主机端口:容器端口 #配置主机端口映射容器端口
示例1:进入centos容器,以交互模式进入
docker run -it centos /bin/bash
#退出容器命令
exit #停止并退出容器
快捷键 ctrl+P+Q #不停止容器退出
2.退出容器命令
exit #停止并退出容器
快捷键 ctrl+P+Q #不停止容器退出
3.列出运行过的容器命令
docker ps #列出当前正在运行的容器
options:
-a #列出所有容器的运行记录
-n=? #显示最近创建的n个容器
-q #只显示容器的编号
4.容器删除命令
docker rm 容器id #删除指定的容器,不能删除正在运行的容器,
docker rm -f $(docker ps -aq) #删除所有的容器
docker ps -a -q|xargs docker rm #删除所有的容器
5.启动和停止容器命令
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前运行的容器
docker kill 容器id #强制停止当前的容器
常用其他命令
1.容器日志的查看
docker logs --help #帮助信息
Options:
--details Show extra details provided to logs
-f, --follow Follow log output
--since string Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
-n, --tail string Number of lines to show from the end of the logs (default "all")
-t, --timestamps Show timestamps
--until string Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
常用命令
docker logs -tf 容器id #查看容器日志信息
-t #显示时间戳
-f #输出日志信息
--tail #显示num条日志
例如
docker logs -tf --tail 10 容器id #显示容器十条日志
NOTE
docker容器后台运行,必须要有一个前台的进程,否则会字段停止
#编写shell脚本循环执,使得centos容器保持运行状态
docker run -d centos /bin/sh -c "while true;do echo hi;sleep 5;done"
2.查看容器进程信息
docker top 容器id
UID PID PPID C STIME TTY CMD
3.查看容器的元数据
docker inspect 容器id
4.进入当前正在运行的容器
docker exec 容器id #进入容器,新开一个终端,可以在里面操作
docker attach 容器id #进入容器正在执行的终端,不会启动新的终端
例子
docker exec -it 容器id /bin/bash #新开一个终端,以交互模式进入
5.拷贝容器上的文件到本地
docker cp 容器id:容器中路径 本地路径
例如
docker cp 容器id:/home/test.txt /home #将容器中的/home/test.txt文件复制到本地home目录下
小结
作业练习
作业一:安装Nginx
第一步 search 镜像
docker search nginx
第二步 pull 下载镜像
docker pull nginx
第三步 查看是否下载成功
docker images
第三步 run 通过镜像启动容器 以后台方式运行 并将端口映射到本机3344端口
docker run --name=nginx01 -d -p 3344:80 nginx
Docker镜像讲解
镜像是什么
镜像(image)是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需要的所有内容,包括代码、库、环境变量和配置文件。
所有的应用,直接打包docker镜像,就可以直接跑起来!
如何得到镜像:
- 从远程仓库下载
- 朋友拷贝给你
- 自己制作一个镜像DockerFile
Docker镜像加载原理
UnionFS(联合文件系统)
Union文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像。
**特性:**一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终文件系统包含所有底层的文件和目录
commit镜像
打包自己的镜像,将镜像层与容器层打包成新的镜像(image)
命令
docker commit -m="描述信息" -a="作者" 容器id 镜像名:[TAG版本]
例如
docker commit -m="message" -a="tyh" 容器id centos_01:1.0
容器数据卷
什么是容器数据卷
为了解决什么问题?
如果数据都在容器中,那么容器被删除,数据也会跟着被删除! 需求:数据可以持久化
例如:MySQL容器被删除,数据库数据也会丢失!因此,希望 Mysql数据可以存储到本地!
容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!
这就是卷技术!目录的挂载,将容器与本地打通数据共享的通道!
一句话:容器中数据的持久化和同步操作!
使用数据卷
方法一:直接使用命令来挂载 -v
docker run -v 主机目录:容器内目录 镜像名
例如
docker run -it -v 主机目录:容器内目录 镜像名 /bin/bash
docker run -it -v /tmp/test/:/home --privileged=true centos /bin/bash
查看是否挂载成功
docker inspect 容器id #查看容器元数据
"Mounts": [
{
"Type": "bind",
"Source": "/home", #主机目录
"Destination": "/home", #容器目录
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
在宿主机上创建文件
Note
在centos测试时,出现
ls: cannot open directory .: Permission denied
原因docker权限不够
解决办法: 加上 --privileged=true
具名和匿名挂载
匿名挂载
#匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /ect/nginx nginx
[root@localhost test]# docker run -d -v /ect/nginx --name=nginx01 nginx
67e8dbb1b92ec3294ab5d3c3f05efc756fba5a0b00037747c5ab1420f07c8368
#查看所有的volume的情况
docker volume ls
[root@localhost test]# docker volume ls
DRIVER VOLUME NAME
local ab41b5d21a8f442ca82992c86411115265e4def480d1a60fbd1dbed57dc13653
具名挂载
#具名挂载
[root@localhost test]# docker run -d -v tyhdevolume:/ect/nginx --name=nginx02 nginx
39c51163b75cd352f4f4594a32a8221b2d20469e7894cb403f24c833a1ba7842
#查看具名挂载信息
[root@localhost test]# docker volume inspect tyhdevolume
[
{
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/tyhdevolume/_data", #宿主机内路径
"Name": "tyhdevolume",
"Options": {},
"Scope": "local"
}
]
所有docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxxx/_data
匿名挂载具名挂载区别
#区别
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v 主机目录:容器内目录 #指定路径挂载
扩展
#通过 -v 容器内路径:ro rw 改变读写权限
ro readonly #只读
rw readwrite #只写
docker run -d -v tyhdevolume:/ect/nginx:ro --name=nginx02 nginx
docker run -d -v tyhdevolume:/ect/nginx:rw --name=nginx02 nginx
#ro 只能通过宿主机来操作,容器内部无法操作
#rw(默认) 都可以操作
数据卷容器
容器之间通过挂载卷实现数据共享,数据共享方式为值拷贝。一个容器坏了不会影响其他挂载的容器中的数据
--volumes-from
#例如
docker run -d -v /ect/nginx --name=nginx01 nginx
docker run -d --name=nginx02 --volumes-from nginx01 nginx
Dockerfile
DockerFile介绍
dockerfile是用来构建docker镜像的文件!命令参数脚本
构建步骤
1.编写一个dockerfile文件
2.docker build 构建成为一个镜像
3.docker run 运行镜像
4.docker push 发布镜像
DockerFile构建过程
基础知识
- 每个保留关键字(指令)都是必须是大写字母
- 执行从上到下顺序执行
- #表示注释
- 每一个指令都会创建提交一个新的镜像层,并提交
DockerFile的指令
FROM #基础镜像
MAINTAINER #镜像的创建者,格式:姓名+邮箱
RUN #镜像构建的时候需要运行的命令
ADD #添加其他镜像内容
WORKDIR #镜像的工作目录
VOLUME #挂载的目录
EXPOSE #保留端口配置
CMD #指定这个容器启动的时候要运行的命令,只有最好一个会生效,可被替代
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD #当被继承时触发
COPY #将文件拷贝到镜像中
ENV #构建的时候设置环境变量
实战测试
构建自己的centos
#1.编写Dockerfile
[root@localhost dockertest]# cat Dockerfile
FROM centos
MAINTAINER tyh<2445275333@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
CMD ["touch","test.txt"]
CMD ["/bin/bash"]
#2.运行Dockerfile构建镜像
#命令
docker build -f dockerfile文件路径 -t 镜像名:[tag] .
#note: dockerfile 默认路径为 /PATH/Dockerfile
docker build -t tyhtest02 .
Sending build context to Docker daemon 2.56 kB
Step 1/6 : FROM centos
---> 5d0da3dc9764
Step 2/6 : MAINTAINER tyh<2445275333@qq.com>
---> Using cache
---> f5a30999da81
Step 3/6 : ENV MYPATH /usr/local
---> Using cache
---> fc250ea357bc
Step 4/6 : WORKDIR $MYPATH
---> Using cache
---> c809311c8c4a
Step 5/6 : CMD touch test.txt
---> Running in b8a6cee1daea
---> 3ea70282d6bf
Removing intermediate container b8a6cee1daea
Step 6/6 : CMD /bin/bash
---> Running in 9764d157d463
---> ad8ee412e639
Removing intermediate container 9764d157d463
Successfully built ad8ee412e639
CMD和ENTRYPOINT的区别
https://blog.csdn.net/u010900754/article/details/78526443
发布自己的镜像
DockerHub
1.地址 https://hub.docker.com/注册自己的账号!
2.确定这个账号可以登录
3.在服务器上提交自己的镜像
[root@localhost dockertest]# docker login --help
Usage: docker login [OPTIONS] [SERVER]
Log in to a Docker registry
Options:
--help Print usage
-p, --password string Password
-u, --username string Username
4.登录完毕后就可以提交镜像了,就是一步docker push
登录
#docker login -u username
发布
#docker push 镜像name:[tag]
例如
#docker push tyhcentos:1.0
扩展
#docker tag 镜像id 别名 #给镜像起别名
小结
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EzuwIbrj-1647163637162)(F:\my_notebook\java_se\image\image-20220312204644430.png)]
Docker网络
理解Docker0
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5f0PwZMF-1647163637163)(F:\my_notebook\java_se\image\image-20220312210452465.png)]
容器互联–link(不建议使用)
问题:能否通过容器名直接进行网络访问
1.#搭建两个安装了ping命令的nginx服务器
[root@localhost dockertest]# docker run -d --name nginx01 nginx_with_ping:1.0
89b95b32fb596d63c18ba2bd57f7587d02308442f545597a44c5adb431fd4f0e
[root@localhost dockertest]# docker run -d --name nginx02 nginx_with_ping:1.0
05002226827a6b6892561cf8583c53761b763da8a6f7392479653e3984ced22d
2.#nginx02直接ping nginx01
[root@localhost dockertest]# docker exec -it nginx02 ping nginx01
ping: nginx01: Name or service not known #未能ping通
3.#采用--link nginx01 搭建nginx03
[root@localhost dockertest]# docker run -d --name nginx03 --link nginx01 nginx_with_ping:1.0
fbd09b5410ba9131753ed1b72765722ebf2d2afc8aba6152d9c3567f2ca23b16
4.#采用nginx03直接去ping nginx01
[root@localhost dockertest]# docker exec -it nginx03 ping nginx01
PING nginx01 (172.17.0.2) 56(84) bytes of data.
64 bytes from nginx01 (172.17.0.2): icmp_seq=1 ttl=64 time=0.187 ms
64 bytes from nginx01 (172.17.0.2): icmp_seq=2 ttl=64 time=1.24 ms
64 bytes from nginx01 (172.17.0.2): icmp_seq=3 ttl=64 time=0.091 ms
64 bytes from nginx01 (172.17.0.2): icmp_seq=4 ttl=64 time=0.061 ms
64 bytes from nginx01 (172.17.0.2): icmp_seq=5 ttl=64 time=0.083 ms
64 bytes from nginx01 (172.17.0.2): icmp_seq=6 ttl=64 time=0.063 ms
64 bytes from nginx01 (172.17.0.2): icmp_seq=7 ttl=64 time=0.064 ms
^C
--- nginx01 ping statistics ---
7 packets transmitted, 7 received, 0% packet loss, time 6008ms
rtt min/avg/max/mdev = 0.061/0.256/1.244/0.405 ms
#结果显示可以ping通
#为什么呢?
#查看nginx03下的/etc/hosts
[root@localhost dockertest]# docker exec -it nginx03 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 nginx01 89b95b32fb59 #将172.17.0.2 与 nginx01进行绑定
172.17.0.4 fbd09b5410ba
#通过绑定域名 因此可以ping nginx01
探究:docker0 中的network信息
[root@localhost dockertest]# docker network inspect bridge
[
{
"Name": "bridge",
"Id": "3b16bc1d45be914edc8d8bf3afc673c25a222b64090e8b85c0a908ad27c17185",
"Created": "2022-03-12T16:09:54.910339931+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Containers": {
"05002226827a6b6892561cf8583c53761b763da8a6f7392479653e3984ced22d": {
"Name": "nginx02",
"EndpointID": "95a3e4700d9063021a17bbaa951622789b29ef8c186b4bb0dc5749916e73a609",
"MacAddress": "02:42:ac:11:00:03",
"IPv4Address": "172.17.0.3/16",
"IPv6Address": ""
},
"89b95b32fb596d63c18ba2bd57f7587d02308442f545597a44c5adb431fd4f0e": {
"Name": "nginx01",
"EndpointID": "660e4ef439ef83dd985367f03124a6267b963dc961920342a9e36f94bfc312f5",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
},
"fbd09b5410ba9131753ed1b72765722ebf2d2afc8aba6152d9c3567f2ca23b16": {
"Name": "nginx03",
"EndpointID": "cd233724f7831d52d1b388f4fd3f2a49836a68426c91cc8ebb5d674d70e028c6",
"MacAddress": "02:42:ac:11:00:04",
"IPv4Address": "172.17.0.4/16",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
#docker0 中存放了nginx01-03 的ip信息,起到路由转发的作用
#docker0的局限性,无法通过容器名直接连通
自定义网络
查看docker网络信息
#docker network ls
[root@localhost dockertest]# docker network ls
NETWORK ID NAME DRIVER SCOPE
3b16bc1d45be bridge bridge local
9dc950432393 host host local
3d4a887d8804 none null local
网络模式
bridge:桥接docker(默认,自身搭建网络也使用bridge模式)
none:不配置网络
host:和宿主机共享网络
container:容器网络连通
创建网络
#命令 docker network creat [options] 网络名
#docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 网络名
#1.搭建自己的网络
[root@localhost dockertest]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 tyhnet
f3fa1bcb0dfceb65a3859044910320e81f9cebd5f8f06e6e77f921424fedb6e0
#2.查看网络信息
[root@localhost dockertest]# docker network ls
NETWORK ID NAME DRIVER SCOPE
3b16bc1d45be bridge bridge local
9dc950432393 host host local
3d4a887d8804 none null local
f3fa1bcb0dfc tyhnet bridge local
#3.查看tyhnet的元数据
[root@localhost dockertest]# docker network inspect tyhnet
[
{
"Name": "tyhnet",
"Id": "f3fa1bcb0dfceb65a3859044910320e81f9cebd5f8f06e6e77f921424fedb6e0",
"Created": "2022-03-13T16:54:58.181885395+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.0.0/16",
"Gateway": "192.168.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
#哈哈哈 配置成功
#4.在tyhnet中创建两个nginx服务器
[root@localhost dockertest]# docker run -d --name nginx04 --net tyhnet nginx_with_ping:1.0
8d9229f120c28e7e20cbf8c2f86e9c28085e659cc4fcfc2d22619eb54f243671
[root@localhost dockertest]# docker run -d --name nginx05 --net tyhnet nginx_with_ping:1.0
35d0cfc52ade916815ab3e4531189b075192b75e7aeb6c143ea57df35aef636d
#5.查看tyhnet网络信息
[root@localhost dockertest]# docker network inspect tyhnet
[
{
"Name": "tyhnet",
"Id": "f3fa1bcb0dfceb65a3859044910320e81f9cebd5f8f06e6e77f921424fedb6e0",
"Created": "2022-03-13T16:54:58.181885395+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.0.0/16",
"Gateway": "192.168.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Containers": {
"35d0cfc52ade916815ab3e4531189b075192b75e7aeb6c143ea57df35aef636d": {
"Name": "nginx05",
"EndpointID": "ce58f11752d8073b82b2332779dfb67dd0bb78df0cf6f24cef0b8aa849c8cb60",
"MacAddress": "02:42:c0:a8:00:03",
"IPv4Address": "192.168.0.3/16",
"IPv6Address": ""
},
"8d9229f120c28e7e20cbf8c2f86e9c28085e659cc4fcfc2d22619eb54f243671": {
"Name": "nginx04",
"EndpointID": "cec851a91345953260469cd2787558976f3601b48476519366bba5cadbb3bbbd",
"MacAddress": "02:42:c0:a8:00:02",
"IPv4Address": "192.168.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
#nginx04 和 05 成功入网
#6.看看是否可以通过容器名ping通
[root@localhost dockertest]# docker exec -it nginx04 ping nginx05
PING nginx05 (192.168.0.3) 56(84) bytes of data.
64 bytes from nginx05.tyhnet (192.168.0.3): icmp_seq=1 ttl=64 time=0.199 ms
64 bytes from nginx05.tyhnet (192.168.0.3): icmp_seq=2 ttl=64 time=0.477 ms
64 bytes from nginx05.tyhnet (192.168.0.3): icmp_seq=3 ttl=64 time=0.062 ms
64 bytes from nginx05.tyhnet (192.168.0.3): icmp_seq=4 ttl=64 time=0.062 ms
^C
--- nginx05 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 0.062/0.200/0.477/0.169 ms
#自定义的网络可以通过容器名直接ping通
结论
自定义的网络可以通过容器名直接ping通,而默认的docker0不支持
自定义的网络有助于进行容器间区域隔离
官方解释
User-defined bridges provide automatic DNS resolution between containers.
Containers on the default bridge network can only access each other by IP addresses, unless you use the --link option, which is considered legacy. On a user-defined bridge network, containers can resolve each other by name or alias.
大意:用户自定义的网卡可以在容器之间提供自动的 DNS 解析
网络打通
#命令
#docker network connect --help
[root@localhost dockertest]# docker network connect --help
Usage: docker network connect [OPTIONS] NETWORK CONTAINER
Connect a container to a network
Options:
--alias stringSlice Add network-scoped alias for the container
--help Print usage
--ip string IP Address
--ip6 string IPv6 Address
--link list Add link to another container (default [])
--link-local-ip stringSlice Add a link-local address for the container
实验
#1.打通tyhnet,使得连接在docker0的nginx01 能够和tyhnet下的nginx04通信
[root@localhost dockertest]# docker network connect tyhnet nginx01
#2.测试双方通信
[root@localhost dockertest]# docker exec -it nginx01 ping nginx04
PING nginx04 (192.168.0.2) 56(84) bytes of data.
64 bytes from nginx04.tyhnet (192.168.0.2): icmp_seq=1 ttl=64 time=0.216 ms
64 bytes from nginx04.tyhnet (192.168.0.2): icmp_seq=2 ttl=64 time=0.086 ms
64 bytes from nginx04.tyhnet (192.168.0.2): icmp_seq=3 ttl=64 time=0.109 ms
64 bytes from nginx04.tyhnet (192.168.0.2): icmp_seq=4 ttl=64 time=0.459 ms
64 bytes from nginx04.tyhnet (192.168.0.2): icmp_seq=5 ttl=64 time=0.071 ms
^C
--- nginx04 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4008ms
rtt min/avg/max/mdev = 0.071/0.188/0.459/0.144 ms
#nginx01可以直接和nginx04通信
#3.测试nginx01和nginx05
[root@localhost dockertest]# docker exec -it nginx01 ping nginx05
PING nginx05 (192.168.0.3) 56(84) bytes of data.
64 bytes from nginx05.tyhnet (192.168.0.3): icmp_seq=1 ttl=64 time=0.263 ms
64 bytes from nginx05.tyhnet (192.168.0.3): icmp_seq=2 ttl=64 time=0.076 ms
64 bytes from nginx05.tyhnet (192.168.0.3): icmp_seq=3 ttl=64 time=0.077 ms
64 bytes from nginx05.tyhnet (192.168.0.3): icmp_seq=4 ttl=64 time=0.082 ms
64 bytes from nginx05.tyhnet (192.168.0.3): icmp_seq=5 ttl=64 time=0.398 ms
^C
--- nginx05 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4004ms
rtt min/avg/max/mdev = 0.076/0.179/0.398/0.130 ms
#nginx01可以和nginx05通信
#结论
通过docker network connect命令,使得nginx01接通tyhnet,通过在nginx01上装双网卡实现
#nginx01的双网卡!!!
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "3b16bc1d45be914edc8d8bf3afc673c25a222b64090e8b85c0a908ad27c17185",
"EndpointID": "660e4ef439ef83dd985367f03124a6267b963dc961920342a9e36f94bfc312f5",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02"
},
"tyhnet": {
"IPAMConfig": {},
"Links": null,
"Aliases": [
"89b95b32fb59"
],
"NetworkID": "f3fa1bcb0dfceb65a3859044910320e81f9cebd5f8f06e6e77f921424fedb6e0",
"EndpointID": "69d2721974ee2a8985d6ca5d365d8b5a58c5dccb3d7840c63d49248ea106f69b",
"Gateway": "192.168.0.1",
"IPAddress": "192.168.0.4",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:c0:a8:00:04"
}
##Docker学习任重道远##