Docker网络前戏

Docker网络前戏

docker简介

1、什么是容器,什么是docker?
容器的本质是进程
docker是一款容器软件。

2、docker中的三大概念?
docker镜像
docker容器
镜像仓库

3、docker镜像
docker镜像是启动容器模板。
	docker pull
	docker push 
	docker images
	docker inspect 
	docker rmi 
	docker histroy 
	docker tag

4、docker容器
是镜像启动的,一个对外提供服务的实例。
	docker run 
		-d
		--name	: 
			1、指定容器名称
			2、将容器的名称加入docker DNS
		--rm
		-e
		-h
		-i
		-t
		-p
		-P
		-v
	docker exec 
	docker ps 
		-a 
		-q
	docker rm 
		-f 
	
	docker start 	: 启动一个容器
	docker stop 	:停止一个容器
	docker create   :创建一个容器
	
    docker run  和 docker create 之间有两个区别
    1、docker run创建容器并立即启动,而docker create 只是创建
    2、docker run创建的容器时up状态,而docker create创建的容器是create

	打包镜像
        1、将容器打包成本地镜像
		
			docker commit
			
        2、将容器打包成镜像压缩包

			docker export 
			docker import 

        3、将镜像打包成镜像压缩包

			docker save 
			docker load 

5、镜像仓库
    存放镜像的地方。
    官方仓库:hub.docker.com
    第三方:阿里云、华为云
    docker login [URL]
    docker login registry.cn-hangzhou.aliyuncs.com
 

第1节 Linux网络原理

docker网络严重依赖于linux网络

容器之间相互隔离

为了支持网络协议栈的多实例,linux提供了一个网络名称空间(Network Namespace)。不同的网络名称完全隔离。

容器之间的网络互通问题?

实现两个不同的网络名称空间互联的方式
1、veth设备对
	veth设备必须是成对出现。

	1、创建名称空间
	 	[root@localhost ~]# ip netns add test01
	
	2、创建veth设备对
		[root@localhost ~]# ip link add veth type veth peer name veth001
		
	3、绑定名称空间
		[root@localhost ~]# ip link set veth001 netns test01
		
	4、分配IP
		[root@localhost ~]# ip netns exec test01 ip addr add 10.0.0.111/20 dev veth001
		[root@localhost ~]# ip addr add 10.0.0.112/20 dev veth

	5、重启
		[root@localhost ~]# ip netns exec test01 ip link set dev veth001 down
		[root@localhost ~]# ip netns exec test01 ip link set dev veth001 up
		
		[root@localhost ~]# ip link set dev veth down
		[root@localhost ~]# ip link set dev veth up

	6、测试
		[root@localhost ~]# ping 10.0.0.111

2、网桥

3、iptables

4、ipvs

第2节 docker网络

就是为了实现容器互联的。

1、host模式
	将容器网络绑定到宿主主机上。也就是说宿主主机上的网络直接绑定到容器内。
	[root@localhost ~]# docker run -d --network host nginx 

2、container模式
	共享一个容器的网络。
	[root@localhost ~]# docker run -d --network "container:epic_swirles" nginx

3、网桥模式

	1、创建网桥
	[root@localhost ~]# docker network create chenyang

	2、使用网桥
	[root@localhost ~]# docker run -it --network chenyang centos 

4、none模式
	这种模式只提供一个回环网络
	[root@localhost ~]# docker run -it --network none centos

5、--link
	链接一个容器,类似于container模式
	[root@localhost ~]# docker run -it --link "nginxv1:nginxv1" centos

第3节 docker的network

1、创建网桥
    --subnet	:指定网络的CIDR
    --gateway	:网关
    [root@localhost ~]# docker network create chenyang1 --subnet "10.0.0.0/24" --gateway "10.0.0.2"

2、查看网桥
    [root@localhost ~]# docker network ls
    NETWORK ID     NAME        DRIVER    SCOPE
    网桥的ID      网桥的名称    网桥类型   网桥的来源

3、查看网桥的详细信息
    docker network inspect [网桥的名称]

4、链接网桥
    [root@localhost ~]# docker network connect chenyang1 nginxv2

5、断开链接
    [root@localhost ~]# docker network disconnect chenyang1 nginxv2

6、删除网桥
    docker network rm [网桥名称]
    [root@localhost ~]# docker network rm chenyang3

7、清理网桥
    [root@localhost ~]# docker network prune 

第4节 案例

"""
多个容器互联项目:
        Nginx --代理--> Django
"""



1、创建网桥
    [root@localhost ~]# docker network create yly_v1

2、部署Django容器
    [root@localhost ~]# docker run -d -it python:3.6 bash
    2d2d77726f5fadd22472527116300a7ab5bb43c660c7663d7843b2fa0f0afffb

    [root@localhost ~]# docker ps
    CONTAINER ID   IMAGE        COMMAND   CREATED         STATUS         PORTS     NAMES
    2d2d77726f5f   python:3.6   "bash"    3 seconds ago   Up 2 seconds             stoic_mcnulty

    [root@localhost ~]# docker exec -it stoic_mcnulty bash
    root@2d2d77726f5f:/# pip install django
    root@2d2d77726f5f:/# exit

    [root@localhost ~]# docker commit -p silly_khorana python:django
    [root@localhost ~]# docker run -d --name django -w /opt -v /root/nginx/nginx:/opt --network yly_v1 python:django python manage.py runserver 0.0.0.0:8000

3、部署nginx容器

[root@localhost ~]# vim django.conf 
server {
	server_name _;
	listen 80;
	location / {
		proxy_pass http://django:8000;
	}
}

    [root@localhost ~]# docker run -d --name nginx --network yly_v1 -p 8080:80 -v /root/django.conf:/etc/nginx/conf.d/default.conf nginx

4、打开浏览器,输入"192.168.15.100:8080",显示django,则成功


"""
如果不成功,检查的一些命令:
        1、docker network ls
        2、docker ps -a
            # 可以看到端口是否映射
        3、netstat -nutlp

[root@localhost ~]# netstat -nutlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1125/sshd           
tcp6       0      0 :::22                   :::*                    LISTEN      1125/sshd           
tcp6       0      0 :::8080                 :::*                    LISTEN      4046/docker-proxy 

[root@localhost ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
cd38fa4c9b20   bridge    bridge    local
eeab57b780f1   host      host      local
0069fd304618   none      null      local
d23907d8cbb9   yly_v1    bridge    local

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE           CREATED         STATUS         PORTS                  NAMES
a08fc4c0a4fb   nginx           8 minutes ago   Up 8 minutes   0.0.0.0:8080->80/tcp   nginx
bd65fb543cf5   python:django   8 minutes ago   Up 8 minutes                          django
"""
posted @ 2021-11-19 21:51  LionYie  阅读(42)  评论(0)    收藏  举报