Docker初级学习指南

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

镜像命令

  1. 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 		镜像的大小


  1. docker search #搜索镜像
#搜索仓库中mysql收藏数大于3000的
docker search mysql --filter=STARS=3000
  1. docker pull 镜像名 #下载镜像
#仓库中下载mysql的镜像
docker pull mysql

#指定版本下载
docker pull mysql:5.7
  1. 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构建过程

基础知识

  1. 每个保留关键字(指令)都是必须是大写字母
  2. 执行从上到下顺序执行
  3. #表示注释
  4. 每一个指令都会创建提交一个新的镜像层,并提交

在这里插入图片描述

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学习任重道远##

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值