三、docker概述 部署docker镜像

1.安装Docker

准备两台虚拟机,IP为192.168.1.10和192.168.1.20
安装docker-engine 和 docker-engine-selinux
关闭防火墙
 
**************************************
配置两台虚拟机:
 
创建两台虚拟机后端盘:
images] qemu-img create -f qcow2 -b node.qcow2 docker1.img 50G
images] qemu-img create -f qcow2 -b node.qcow2 docker2.img 50G
 
创建img:
删除node.xml里面所有的^mac*,^address*的行
qemu] sed 's,node,docker1,' node.xml > docker1.xml
qemu] sed 's,node,docker2,' node.xml > docker2.xml
 
创建虚拟机:
qemu] virsh define docker1.xml 
qemu] virsh define docker2.xml
 
添加网卡:(每个都添加第二张网卡)
添加硬件--网络(private1,型号 virtio)--保存    
 
登陆docker1/2
 
]# lsblk(有50G)
]# export LANG=en_US
]# growpart /dev/vda 1 (lsblk 2G-50G)
]# xfs_growfs /    (df -h 2G-50G)
 
配置DNS:
查看真机器
]# cat /etc/resolv.conf 
# Generated by NetworkManager
search tedu.cn
nameserver 176.233.0.227
虚拟机:
]# vim /etc/resolv.conf 
nameserver 176.233.0.227
测试
]# ping www.baidu.com
**************************************
 
1.1 配置yum源
 
1)配置第三方yum源(真机操作)
]# mkdir /var/ftp/docker
]# mv docker-engine-* /var/ftp/docker
]# ls /var/ftp/docker
docker-engine-1.12.1-1.el7.centos.x86_64.rpm
docker-engine-selinux-1.12.1-1.el7.centos.noarch.rpm
 
]# createrepo /var/ftp/docker/
 
2)配置IP(虚拟机配置静态ip)docker1和docker2主机同样操作
]# echo docker1 > /etc/hostname 
]# hostname docker1
]# echo docker2 > /etc/hostname 
]# hostname docker2
 
docker1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
# Generated by dracut initrd
DEVICE="eth0"
ONBOOT="yes"
IPV6INIT="no"
IPV4_FAILURE_FATAL="no"
NM_CONTROLLED="no"
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR="192.168.1.10"
PREFIX=24
GATEWAY=192.168.1.254
docker1 ~]# systemctl restart network
 
docker2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
# Generated by dracut initrd
DEVICE="eth0"
ONBOOT="yes"
IPV6INIT="no"
IPV4_FAILURE_FATAL="no"
NM_CONTROLLED="no"
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR="192.168.1.20"
PREFIX=24
GATEWAY=192.168.1.254
docker2 ~]# systemctl restart network
 
3)配置yum客户端(docker1和docker2主机同样操作)
docker1 ~]# vim /etc/yum.repos.d/local.repo 
[local_repo]
name=CentOS-$releasever - Base
enabled=1
gpgcheck=0
[loca]
name=local
enabled=1
gpgcheck=0
 
docker2 ~]# vim /etc/yum.repos.d/local.repo 
[local_repo]
name=CentOS-$releasever - Base
enabled=1
gpgcheck=0
[loca]
name=local
enabled=1
gpgcheck=0
 
4)安装docker(docker1和docker2主机同样操作)
]# yum -y install docker-engine
]# systemctl restart docker
]# systemctl enable docker
]# ifconfig     //有docker0说明环境部署完成
docker0: flags=4099  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0 ...
 
]# docker version  //查看版本
 
2.镜像基本操作
 
导入镜像
导出镜像
启动镜像
 
2.1 docker镜像
]# docker images 查看镜像
1)下载镜像
docker1 ~]# docker pull busybox
2)上传镜像
docker1 ~]# docker push busybox
3)查看镜像
docker1 ~]# docker images
4)查找busybox镜像
docker1 ~]# docker search busybox
5)导出busybox镜像为busybox.tar
docker1 ~]# docker save busybox:latest >busybox.tar
docker1 ~]# ls
busybox.tar  
6)导入镜像
docker1 ~]# scp busybox.tar 192.168.1.20:/root
docker2 ~]# ls
busybox.tar  
docker2 ~]# docker load < busybox.tar
7)删除镜像
docker2 ~]# docker rmi busybox
 
2.2 一次性导入多个镜像
docker1 ~]# yum -y install unzip
docker1 ~]# unzip docker_images.zip 
docker1 ~]# ls
busybox.tar  docker_images  docker_images.zip  eip
docker1 ~]# cd docker_images
images]# ls
centos.tar  nginx.tar redis.tar registry.tar  ubuntu.tar
images]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              e1ddd7948a1c        4 weeks ago         1.163 MB
images]# for i in *; do docker load <$i; done
 
2.3 启动镜像
 
1)启动centos镜像生成一个容器
启动镜像时若不知道后面的命令加什么:
1、可以猜(如:/bin/bash、/bin/sh)
2、可以不加后面的命令,默认启动
docker run -it 镜像的名称:标签 命令(容器内的命令)
images]# docker run -it centos [/bin/bash]
 
容器内:
a9f /]# ls /
anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
a9f /]# cd /etc/yum.repos.d/
repos.d]# ls
repos.d]# rm -rf C*
repos.d]# vi dvd.repo    //在容器里面配置一个yum源
[local]
name=local
enable=1
gpgcheck=0
repos.d]# yum -y install net-tools  //安装软件
repos.d]# ifconfig
...inet 172.17.0.2 
repos.d]# exit
exit
 
3.镜像与容器常用指令
镜像常用指令练习
容器常用指令练习
 
3.1 镜像常用命令
 
images]# docker run -it xxx:latest (默认的)
 
1)查看后台运行的容器
docker1 ~]# docker run -d nginx  //启动nginx的镜像
docker1 ~]# docker ps   //查看后台运行的容器
CONTAINER ID   IMAGE    COMMAND                  CREATED          STATUS          PORTS             NAMES
190224dc6c10   nginx    "nginx -g 'daemon off"   21 seconds ago   Up 18 seconds   80/tcp, 443/tcp   furious_pike
 
2)只显示容器ID
images]# docker ps -q
190224dc6c10
 
3)显示所有的容器,包括没有启动的
images]# docker ps -a(all)
 
4)显示所有的容器ID
images]# docker ps -qa
190224dc6c10
aaea21554cd7
 
5)查看centos镜像历史(有几层)
images]# docker history centos
 
6) 查看镜像详细信息
images]# docker inspect centos
Cmd...(默认启动命令)
Env...启动镜像以后,设置启动的变量
 
7)删除镜像,如果用镜像启动过容器,删除镜像会失败,先删除容器,再删除镜像
格式:docker rmi 镜像名
images]# docker rmi nginx  //nginx为镜像名
Error...删除时报错
 
停止容器
images]# docker stop 190224dc6c10
删除容器
images]# docker rm 190224dc6c10
删除镜像
images]# docker rmi nginx
Deleted: ...
 
8)修改镜像的名称和标签,默认标签为latest
images]# docker tag centos:latest cen:v1
 
9)修改镜像的标签
images]# docker tag centos:latest cen:v1 
images]# docker images
images]# docker rmi centos    //删除centos
 
images]# docker run -it centos   
... Downloaded newer image for centos:latest
//启动的时候,因为是用标签标签启动的,所以会重新通过ID下载
images]# docker run -it cen:v1   
//通过新建的标签启动cen:v1,进入容器
 
3.2 容器命令
 
1)关闭容器
命令:docker stop 容器ID
images]# docker stop c7b20c544668
 
2)启动容器
images]# docker start c7b20c544668
 
3)重启容器
images]# docker restart c7b20c544668
 
4)删除容器
运行中删除不掉,先关闭容器 0f为容器ID
images]# docker rm 0f     //删除失败
images]# docker stop 0f   //关闭容器
images]# docker rm 0f     //删除成功
 
5)连接容器 attach(退出时,容器关闭) | exec(退出时,容器不关闭)
images]# docker attach c7b20c544668
images]# docker ps     //容器关闭
 
images]# docker exec -it 0f /bin/bash
images]# docker ps        //容器不会关闭
 
images]# docker top $(docker ps -aq)      //查看容器进程列表 
images]# docker run -itd centos:latest
images]# ps
 
images]# docker exec -it 3e1ec9ddcbea /bin/bash
root@85c6b0b62235:/# sleep 50 &
[1] 9
root@85c6b0b62235:/# exit
exit
images]#docker top 85
UID    PID  PPID C   STIME     TTY         TIME      CMD
root  2744 2729  0   18:01    pts/4  00:00:00   /bin/bash
 
6)过滤查看mac和ip地址
images]# docker inspect -f '{{.NetworkSettings.MacAddress}}' 3e1ec9ddcbea
02:42:ac:11:00:03
images]# docker inspect -f '{{.NetworkSettings.IPAddress}}' 3e1ec9ddcbea
172.17.0.3
 
7)修改nginx的显示内容
images]# docker run -it nginx:latest 
images]# docker exec -it 56 /bin/bash
8e0:/# nginx -T /usr/share/nginx/html/
nginx: invalid option: "/usr/share/nginx/html/"   //查找并显示结果
8e0:/# echo  aaa > /usr/share/nginx/html/index.html 
 
//修改主页显示的内容
root@56ec8154f8e0:/# nginx -T
root@56ec8154f8e0:/# cat /usr/share/nginx/html/index.html 
aaa
 
8)过滤查看nginx的ip地址
docker1 ~]# docker inspect -f '{{.NetworkSettings.IPAddress}}' 3e1ec9ddcbea
172.17.0.2
docker1 ~]# curl 172.17.0.2
aaa
 
#################################
总结:
 
1.容器技术,Docker是实现容器技术的一种手段。
对资源切分和利用的手段,核心手段是:
资源管理(Cgroups)、进程隔离(NameSpace)、SELinux安全,让用户更加方便的使用容器技术,而不关心底层内核技术。
 
2.Docker优点
虚拟机里启动虚拟机为什么性能很差,因为新启动的虚拟机CPU不能支持VMX硬件虚拟化技术,使用容器技术可以解决这一问题。
Docker使用的宿主机共享公共库和程序。
 
3.Docker缺点
容器的隔离性没有虚拟化强;功用Linux内核,安全性差;SELinux难以驾驭;容器监控和排错难度大(弹性)。
 
4.镜像与容器
镜像==模板(后端盘)
容器==虚拟机(img,xml都是docker管理)
 
docker镜像采用分层设计,利用后端盘映射前端盘,叠加前端盘为镜像,再创建(多个)前端盘,使用快照的COW技术,确保底层数据不丢失。
 
Docker镜像仓库:https://hub.docker.com
镜像的唯一性:镜像+标签
 
5.docker run 注意事项
ducker run -it 启动的是交互式进程(如: /bin/bash)
ducker run -itd 启动的是进程(如: nginx,redis)
docker attach/exec 是针对ducker run -itd 这种启动的是进程的容器设置的
###########################
自定义镜像及仓库

1. 制作自定义镜像(base基础镜像,搭建共性环境)

基于centos镜像使用commit创建新的镜像文件
基于centos镜像使用Dockerfile文件创建一个新的镜像文件
 
1.1 使用镜像启动容器
 
1)在该容器基础上修改yum源
docker_images]# docker run -it centos
345 /]# rm -rf /etc/yum.repos.d/*  
345 /]# vi /etc/yum.repos.d/dvd.repo
[dvd]
name=dvd
enabled=1
gpgcheck=0
345 /]# yum clean all
345 /]# yum repolist
 
2)安装测试软件
345 /]# yum -y install net-tools iproute psmisc vim-enhanced
 
3)ifconfig查看
345 /]# ifconfig 
... inet 172.17.0.2 ..
345 /]# exit
 
1.2 另存为另外一个镜像
 
1)创建新建镜像
images]# docker start 8d07ecd7e345        
//可以简写为8d,要保证唯一性
images]# docker commit 8d07ecd7e345 myos:v1 
 
2)查看新建的镜像
images]# docker images
REPOSITORY  TAG   IMAGE ID      CREATED          SIZE
myos        v1   7898cd0262c1   44 seconds ago   374.3 MB
 
3)验证新建镜像
images]# docker run -it myos:v1
4bf /]# ifconfig(有此命令,表示已安装) 
...inet 172.17.0.3
    
1.3 使用Dockerfile文件创建一个新的镜像文件(根据基础镜像创建个性镜像)
 
Dockerfile语法格式:
– FROM:基础镜像
– MAINTAINER:镜像创建者信息(说明)
– EXPOSE:开放的端口
– ENV:设置环境变量
– ADD:复制文件到镜像
– RUN:制作镜像时执行的命令,可以有多个
– WORKDIR:定义容器默认工作目录
– CMD:容器启动时执行的命令,仅可以有一条CMD
 
1)创建一个Apache的镜像文件
docker1 ~]# mkdir oo
docker1 ~]# cd oo
oo]# touch Dockerfile    //Dockerfile文件第一个字母要大写
oo]# cp /etc/yum.repos.d/local.repo  ./
oo]# vi Dockerfile
FROM  myos:v1
RUN yum -y install httpd
ENV EnvironmentFile=/etc/sysconfig/httpd
WORKDIR /var/www/html/            //定义容器默认工作目录
RUN echo "test" > /var/www/html/index.html
EXPOSE 80                //设置开放端口号
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
 
oo]# docker build -t myos:http .
Successfully built 2cbd819bc792
 
oo]# docker run -d myos:http 
oo]# docker inspect 2cbd819bc792
oo]# curl 172.17.0.3
test
 
2.创建私有镜像仓库
 
Docker主机:192.168.1.20
镜像仓库服务器:192.168.1.10
 
2.1 自定义私有仓库
 
1)定义一个私有仓库
oo]# vim /etc/docker/daemon.json    //不写这个文件会报错
{
"insecure-registries" : ["192.168.1.10:5000"]    //使用私有仓库运行容器
}
oo]# systemctl restart docker
oo]# docker run -(it)d -p 5000:5000 registry(:latest)
oo]# curl 192.168.1.10:5000/v2/
{}    //出现括号
oo]# docker tag busybox:latest 192.168.1.10:5000/busybox:latest  
//打标签
oo]# docker push 192.168.1.10:5000/busybox:latest  //上传
oo]# docker tag myos:http 192.168.1.10:5000/myos:http
oo]# docker push 192.168.1.10:5000/myos:http
 
2)在docker2上面启动
docker2 ~]# scp 192.168.1.10:/etc/docker/daemon.json /etc/docker/
docker2 ~]# systemctl restart docker
docker2 ~]# docker images
docker2 ~]# docker run -it(d) 192.168.1.10:5000/myos:http /bin/bash    
//直接启动
 
2.2 查看私有仓库
 
1)查看里面有什么镜像
{"repositories":["busybox","myos"]}
 
2)查看里面的镜像标签
{"name":"busybox","tags":["latest"]}
 
{"name":"myos","tags":["http"]}
 
3.NFS共享存储(多个容器共享一个目录)
要求创建NFS共享,能映射到容器里:
服务器创建NFS共享存储,共享目录为/content,权限为rw
客户端挂载共享,并将共享目录映射到容器中
 
3.1 配置NFS服务器
真机:
]# yum -y install nfs-utils
]# mkdir /content
]# vim /etc/exports
/content/ *(rw,no_root_squash)
]# systemctl restart nfs-server.service
]# systemctl restart nfs-secure.service
]# exportfs -rv
exporting *:/content
]# chmod 777 /content
]# echo 11 > /content/index.html
 
3.2 配置客户端
 
oo]# yum -y install nfs-utils
oo]# systemctl restart nfs-server.service
oo]# showmount -e 192.168.1.254
Export list for 192.168.1.254:
/content *
 
docker1 ~]# mkdir /mnt/qq
docker1 ~]# mount -t nfs 192.168.1.254:/content /mnt/qq
docker1 ~]# ls /mnt/qq
index.html
docker1 ~]# cat /mnt/qq/index.html 
11
docker1 ~]# docker run  -d -p 80:80 -v /mnt/qq:/var/www/html -it myos:http
-v 宿主机目录:容器目录
docker1 ~]# curl 192.168.1.10
11
docker1 ~]# ll /mnt/qq/index.html
-rw-r--r-- 1 root root 3 2月  26 08:53 /mnt/qq/index.html
docker1 ~]# vim /mnt/qq/index.html 
11 dddd
 
docker2 ~]# yum -y install nfs-utils
docker2 ~]# showmount -e 192.168.1.254
Export list for 192.168.1.254:
/content *
 
docker2 ~]# mkdir /mnt/qq
docker2 ~]# mount -t nfs 192.168.1.254:/content /mnt/qq
docker2 ~]# docker run -d -p 80:80 -v /mnt/qq:/var/www/html -it 192.168.1.10:5000/myos:http
docker2 ~]# curl 192.168.1.20
11 dddd
 
docker1 ~]# touch /mnt/qq/a.sh
docker1 ~]# echo 22 > /mnt/qq/index.html
docker2 ~]# ls /mnt/qq/
a.sh  index.html
docker2 ~]# cat /mnt/qq/index.html 
22
 
4.创建自定义网桥(虚拟交换机)
创建网桥设备docker01
设定网段为172.30.0.0/16
启动nginx容器,nginx容器桥接docker01设备
映射真实机8080端口与容器的80端口
 
4.1 新建Docker网络模型
 
1)新建docker1网络模型
docker1 ~]# yum -y install bridge-utils
--subnet= 指定子网
docker1 ~]# docker network create --subnet=172.30.0.0/16 docker01
4287a...
docker1 ~]# docker network list
NETWORK ID      NAME            DRIVER      SCOPE
03dabb0950de    bridge          bridge      local               
4287af1f4da0    docker01        bridge      local               
1dc55eeaba31    host            host        local               
eef252b83aba    none            null        local                
 
docker1 ~]# ip a s
docker1 ~]# docker network inspect docker01
[
    {
        "Name": "docker01",
        "Id": "4287af1f4da036e1f91885646c33ce29f44dd08fd0b93ac07d5ccc4d9eac4bf1",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.30.0.0/16"
                }
            ]
        },
        "Internal": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]
 
2)使用自定义网桥启动容器(用同一个虚拟交换机,(docker01)启动的两个容器之间可以互相通信)
docker1 ~]# docker run --network=docker01 -id nginx
 
3)端口映射
(外网可以访问到容器内容,即容器部署的环境就变成真机(宿主机)环境,不同容器部署的不同环境真机可以随时调用,部署(启动就可以了,不用可以关掉)【应用程序部署和封装的核心技术】,部署各种各样的运行环境。
-p 8080(宿主机端口):80(容器端口)
docker1 ~]# docker run -p 8080:80 -id nginx
e523b386f9...
docker1 ~]# curl 192.168.1.10:8080
......
 
4.2 扩展实验
 
1)新建一个网络模型docker02
--driver bridge 交换机
docker1 ~]# docker network create --driver bridge docker02
//新建一个 名为docker02的网络模型(虚拟交换机)
5496835bd...
docker1 ~]# ifconfig
//但是在用ifconfig命令查看的时候,显示的名字并不是docker02,而是br-5496835bd3f5
br-5496835bd3f5: flags=4099  mtu 1500
        inet 172.18.0.1  netmask 255.255.0.0  broadcast 0.0.0.0
        ether 02:42:89:6a:a2:72  txqueuelen 0  (Ethernet)
        RX packets 8  bytes 496 (496.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 496 (496.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
docker1 ~]# docker network list  //查看显示docker02(查看加粗字样)
NETWORK ID    NAME        DRIVER   SCOPE
03dabb0950de  bridge      bridge   local               
4287af1f4da0  docker01    bridge   local               
dc316667b1df  docker02    bridge   local               
1dc55eeaba31  host        host     local               
eef252b83aba  none        null     local               
 
2)若要解决使用ifconfig命令可以看到docker02的问题,可以执行以下几步命令
docker1 ~]# docker network list   //查看docker0的NETWORK ID(加粗字样)
NETWORK ID    NAME        DRIVER   SCOPE
03dabb0950de  bridge      bridge   local               
4287af1f4da0  docker01    bridge   local               
dc316667b1df  docker02    bridge   local               
1dc55eeaba31  host        host     local               
eef252b83aba  none        null     local         
3)查看03dabb0950de的信息
[root@docker2 ~]# docker network inspect 03dabb0950de
[
    {
        "Name": "bridge",
        "Id": "03dabb0950de905f65a4e467e1af6b78b268cc8388a08f9098f145b0573dc9e3",
        "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,
        "Containers": {
            "9601f47408ae7f218a8ded218205e77983326b06a5bb062f27ea311abd51fc6d": {
                "Name": "hopeful_wing",
                "EndpointID": "be2e930d737a4e0e957c11847b8e2c0ea4b48bbd0a5e2bc882a10566ff385cbe",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            },
            "fbf16a1f9477c06fedfb1a9a138f99443e058815f0b26a771b9db4fe41cba10e": {
                "Name": "distracted_kowalevski",
                "EndpointID": "ef15224759de94d7bcc3f347f0023eb378cc45af214125bc2c9c0ae32a3fd58c",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/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": {}
    }
]
 
4)查看图片的倒数第六行有"com.docker.network.bridge.name": "docker0"字样
 
5)把刚刚创建的docker02网桥删掉
docker1 ~]# docker network rm docker02   //删除docker02
docker02
docker1 ~]# docker network create  \ 
docker02 -o com.docker.network.bridge.name=docker02   
//创建docker02网桥
d721c...
docker1 ~]# ifconfig  //ifconfig查看有docker02
docker02: flags=4099  mtu 1500
        inet 172.18.0.1  netmask 255.255.0.0  broadcast 0.0.0.0
 
6)若想在创建docker03的时候自定义网段(之前已经创建过docker01和02,这里用docker03),执行以下命令
docker1 ~]# docker network create docker03 --subnet=172.40.0.0/16 -o com.docker.network.bridge.name=docker03
ab22300...
docker1 ~]# ifconfig   //ifconfig查看,显示的是自己定义的网段
docker03: flags=4099  mtu 1500
        inet 172.40.0.1  netmask 255.255.0.0  broadcast 0.0.0.0
 
docker镜像编排是docker的核心.
 
 
**********************

知识点整理:

01:自定义镜像及仓库
基于源镜像进行配置,commit或build成新镜像,当成自己镜像仓库。
将自己的镜像搭建一个镜像仓库(registry),上传到网络,共享给其他主机。

02:持久化存储:卷
docker容器不保持任何数据,重要数据使用外部卷存储(数据持久化)
容器可以挂载真机目录或共享存储为卷(即共享存储服务器,如NFS共享,映射到容器中)。

03:真机将NFS目录共享给docker1、2挂载,docker1启动nginx容器和docker2启动http容器两者共享该目录(两个容器共享一web个页面).

04:Linux网桥:虚拟交换机(TYPE="bridge")
创建容器时启用该网桥(带子网,即网络区域)
目的:一台docker主机有多个容器可隔离网络,创建多个不同网桥,将不同需求的容器隔离开。(同一网桥的不同容器可以互相通信)
bridge:桥接 host:主机模型 null:无网络
查看:brctl show

05:docker最大的作用就是:快速的切换部署环境!
原理:docker容器端口可以跟docker宿主机进行绑定(宿主机可以真机通信,而真机可以访问外网),即外网可以访问到容器内的服务!
容器内部署了nginx和http容器,宿主机启动nginx容器,外网即可以宿主即nginx服务;宿主机关闭nginx服务,启动http容器,外网即可访问宿主机http服务!

虚拟化:kvm namespace(内核的三个功能)
---libvirt 单机命令管理 docker 单机容器管理
---openstack 管理集群 k8s 管理容器集群

猜你喜欢

转载自www.cnblogs.com/mkmkmk/p/12185630.html