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
"""
本文来自博客园,作者:LionYie,转载请注明原文链接:https://www.cnblogs.com/LionYie/p/15579477.html

浙公网安备 33010602011771号