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 3.1进入名称空间 [root@localhost ~]# ip netns exec test01 bash 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、网桥 Linux可以支持多个不同的网络,它们之间能够相互通信,就需要一个网桥。网桥是二层的虚拟网络设备,它是把若干个网络接口“连接”起来,从而报文能够互相转发。网桥能够解析收发的报文,读取目标MAC地址的信息,和自己记录的MAC表结合,来决定报文的转发目标网口。 网桥设备br0绑定了eth0、eth1。对于网络协议的上层来说,只看得到br0。因为桥接是在数据链路层实现的,上层不需要关心桥接的细节,于是协议上层需要发送的报文被送到br0,网桥设备的处理代码判断报文该被转发到eth0还是eth1,或者两者皆转发。反过来,从eth0或从eth1接收到的报文被提交给网桥的处理代码,在这里会判断报文应该被转发、丢弃还是提交到协议枝上层。而有时eth1也可能会作为报文的源地址或目的地址直接参与报文的发送与接收,从而绕过网桥。 3、iptables 我们知道,Linux络协议非常高效,同时比较复杂如果我们希望在数据的处理过程中对关心的数据进行一些 *** 作该怎么做呢?Linux提供了一套机制来为用户实现自定义的数据包处理过程。 在Linux网络协议棋中有一组回调函数挂接点,通过这些挂接点挂接的钩子函数可以在Linux网络棋处理数据包的过程中对数据包进行些 *** 作,例如过滤、修改、丢弃等整个挂接点技术叫作Netfilterlptables Netfilter负责在内核中执行各种挂接的规则,运行在内核模式中:而lptables是在用户模式下运行的进程,负责协助维护内核中Netfilter的各种规则表通过者的配合来实现整个Linux网络协议战中灵活的数据包处理机制。总结 2、docker网络模式
就是为了实现容器互联的。 1、host模式 #将容器网络绑定到宿主主机上。也就是说宿主主机上的网络直接绑定到容器内。,容器里面的网卡和宿主主机的网卡一致 如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的NetworkNamespace,而是和宿主机共用一个NetworkNamespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。 使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是dockerhost上已经使用的端口就不能再用了,网络的隔离性不好。 [root@localhost ~]# docker run -d --network host nginx 2、container模式 这个模式指定新创建的容器和已经存在的一个容器共享一个NetworkNamespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。 #共享一个容器的网络。 [root@localhost ~]# docker run -d --network "container:admiring_gauss" nginx 3、网桥模式 #同一个网桥的容器可以互相访问(用id 如果想要用名字访问创建时候指定--name) 1、创建网桥 [root@localhost ~]# docker network create zhang 2、使用网桥 [root@localhost ~]# docker run -d --name gailun --network zhang nginx docker run -it --name nuoke --network zhang centos 4、none模式 使用none模式,Docker容器拥有自己的NetworkNamespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。 这种网络模式下容器只有lo回环网络,没有其他网卡。none模式可以在容器创建时通过--network=none来指定。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。 #这种模式只提供一个回环网络 [root@localhost ~]# docker run -it --network none centos 5、--link 链接一个容器,类似于container模式 连接容器名字:连接过程的别名(通常一样) [root@localhost ~]# docker run -it --link "nginxv1:nginxv1" centos3.docker网桥相关命令(docker network)
1、创建网桥 --subnet :指定网络的CIDR --gateway :网关 [root@localhost ~]# docker network create zhang1 --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、链接网桥 docker network connect 网桥名 容器名 [root@localhost ~]# docker network connect zhang1 nginxv2 5、断开链接 docker network disconnect 网桥名 容器名 [root@localhost ~]# docker network disconnect zhang1 nginxv2 6、删除网桥 docker network rm [网桥名称] [root@localhost ~]# docker network rm chenyang3 7、清理网桥 [root@localhost ~]# docker network prune3、多个容器互联项目(nginx代理django)
1、分析 Nginx ---> Django 1、创建网桥 docker network create zhang 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 987213ba242e python:latest "bash" 43 seconds ago Up 42 seconds loving_jones [root@localhost ~]# docker exec -it loving_jones bash root@2d2d77726f5f:/# pip install django root@2d2d77726f5f:/# exit [root@localhost ~]# docker commit -a 'dijia' -m 'aotem' -p loving_jones python:django [root@localhost ~]# docker run -d --name django -w /opt -v /root/linux/:/opt --network zhang python:django python manage.py runserver 0.0.0.0:8000 3、nginx vim django.conf server { server_name _; listen 80; location / { proxy_pass http://django:8000; } } [root@localhost ~]# docker run -d --name nginx --network zhang -p 8080:80 -v /root/django.conf:/etc/nginx/conf.d/default.conf nginx
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)