Docker之搭建2048游戏,四种网络模式的学习,容器和管理,数据卷的管理,用Dockerfile创建镜像

1.镜像管理

物理机上:

软件包:
docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm
docker-engine-selinux-17.03.1.ce-1.el7.centos.noarch.rpm

软件包下载可以点击这里
ce #社区版
ee #企业版
#

[root@foundation44 Desktop]# mkdir /var/www/html/images
[root@foundation44 Desktop]# mv game2048.tar  /var/www/html/images
[root@foundation44 Desktop]# cd /var/www/html/images
[root@foundation44 images]# docker load -i game2048.tar  # 导入镜像

        011b303988d2: Loading layer  5.05 MB/5.05 MB
        36e9226e74f8: Loading layer 51.46 MB/51.46 MB
        192e9fad2abc: Loading layer 3.584 kB/3.584 kB
        6d7504772167: Loading layer 4.608 kB/4.608 kB
        88fca8ae768a: Loading layer 629.8 kB/629.8 kB
        Loaded image: game2048:latest

[root@foundation44 images]# docker run -d --name vm1 game2048  # 后台运行,-d 打入后台,--name 起名字3
        04aa86a76c7f6d78e7606bf2bd1e5f0a50bc145d646d7a3c9ac96ada2db99804
[root@foundation44 images]# ifconfig docker  # 查看docker的ip,这个是内部ip,只有自己可以看见

这里写图片描述

[root@foundation44 images]# docker inspect  vm1  # 查看镜像详情

这里写图片描述

[root@foundation44 images]# docker inspect vm1

这里写图片描述

[root@foundation44 images]# route -n       #查看网关

这里写图片描述

# game2048部署成功

这里写图片描述

2.docker的技术指令

[root@foundation44 images]# docker     #按TAB键就可以出来这些指令
        build      export     kill       plugin     rmi        stats      version
        commit     help       load       port       run        stop       volume
        container  history    login      ps         save       swarm      wait
        cp         image      logout     pull       search     system     
        create     images     logs       push       secret     tag        
        diff       import     network    rename     service    top        
        events     info       node       restart    stack      unpause    
        exec       inspect    pause      rm         start      update     

        docker ps                # 查看正在运行的容器
        docker ps -a             # 查看所有容器状态 
        docker  commit           # 提交数据
        docker cp                # 拷贝
        exec                     # 在容器内部执行命令
        port                     # 查看端口
        rename                   # 给容器重命名 
        stack                    # 查看状态
        docker run -it --name vm1 ubuntu bash  # 创建容器
        docker attach vm1        # 查看容器状态
        docker top vm1           # 连接容器
        docker logs vm1          # 查看容器指令输出 -f 参数可以实时查看
        docker inspect vm1       # 查看容器详情
        docker stats vm1         # 查看容器资源使用率
        docker diff vm1          # 查看容器修改
        docker run -d --name vm1             ubuntu bash -c "while true; do echo westos; sleep 1; done"
行
        docker stop vm1              # 停止容器
        docker start vm1             # 启动容器
        docker kill vm1              # 强制干掉容器
        docker restart vm1           # 重启容器
        docker pause/unpause vm1     # 暂停/恢复容器
        docker rm/rmi  vm1           # 删除容器
        docker export vm1 > vm1.tar  # 导出容器
        docker import vm1.tar image  # 导入容器为镜像 image
        docker search                # 查询镜像
        docker pull                  # 拉取镜像
        docker push                  # 推送镜像
        docker commit                # 更新镜像
        docker images                # 查看本地镜像

    容器停掉之后,内部的所有资源都会被释放,可以重新分配

这里写图片描述

# 这两个命令都可以控制容器的开启与关闭
[root@foundation44 images]# docker container stop vm1
vm1
[root@foundation44 images]# docker start vm1
vm1
[root@foundation44 images]# docker  history game2048   #查看历史操作

这里写图片描述

3.镜像仓库

点击此处就可以注册 # 注册

[root@foundation44 ~]# cd /etc/docker/
[root@foundation44 docker]# ls
        key.json
[root@foundation44 docker]# vim daemon.json    #这个是自己注册得到的网址,属于私有的
        {
          "registry-mirrors": ["https://6zfq2ttt.mirror.aliyuncs.com"]
        }
[root@foundation44 docker]# systemctl daemon-reload
[root@foundation44 docker]# systemctl restart docker
[root@foundation44 docker]# docker pull nginx    # 如果已经有,就不用执行这一步
        Using default tag: latest
        latest: Pulling from library/nginx
        be8881be8156: Pull complete 
        32d9726baeef: Pull complete 
        87e5e6f71297: Pull complete 
        Digest: sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424
        Status: Downloaded newer image for nginx:latest
[root@foundation44 docker]# docker images nginx
        REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              c82521676580        3 weeks ago         109 MB
[root@foundation44 docker]# cd 
[root@foundation44 ~]# docker run -d --name vm2 nginx
        7c56d4998bd147387e4f8891ee595e237676f978bf77ea2357bce2728b0bfd52
[root@foundation44 ~]# docker inspect vm2        # 查看vm2的ip

这里写图片描述

[root@foundation44 ~]# vim index.html     # 编写发布目录内容
        www.westos.org
[root@foundation44 ~]# docker cp index.html vm2:/usr/share/nginx/html     # 复制到默认发布目录下,也可以直接进行访问,这样做只是为了让出测试效果更明显


#  用 vm2 的 ipaddress 进行网页测试:

这里写图片描述

[root@foundation44 ~]# docker rm -f  vm2
        vm2
[root@foundation44 ~]# cd /tmp/
[root@foundation44 tmp]# mkdir docker/
[root@foundation44 tmp]# cd docker/
[root@foundation44 docker]# mkdir web/
[root@foundation44 docker]# cd web/
[root@foundation44 ~]# docker run -d --name vm2 -v /tmp/docker/web:/usr/share/nginx/html  nginx    #挂载,应用起来更方便
        04564fd35c83334418e1e0e0900814509cddda16f9e81266f2e1fe42e82f155d
[root@foundation44 ~]# mv index.html  /tmp/docker/web/
[root@foundation44 ~]# cd /tmp/docker/web/
[root@foundation44 web]# ls    #通过修改此发布目录控制输出内容
    index.html
[root@foundation44 web]# vim index.html
      1 <h1>www.westos.org</h1>
      2 <h1>www.westos.org</h1>
      3 <h1>www.westos.org</h1>
      4 <h1>www.westos.org</h1>
      5 <h1>www.westos.org</h1>
      6 <h1>www.westos.org</h1>

这里写图片描述

4.数据卷的挂载

[root@foundation44 images]# ls
       game2048.tar  nginx.tar  rhel7.tar
[root@foundation44 images]#  docker load -i rhel7.tar   # 导入镜像
[root@foundation44 images]#  docker run -it --name vm5 -v  /tmp/data1:/data1 -v /tmp/data2:/data2:ro -v /etc/yum.repos.d/yum.repo:/etc/yum.repos.d/yum.repo: rhel7 bash
bash-4.2# ls
        bin   data1  dev  home  lib64  mnt  proc  run   srv  tmp  var
        boot  data2  etc  lib   media  opt  root  sbin  sys  usr
bash-4.2# cd data1/
bash-4.2# ls
bash-4.2# touch file
bash-4.2# ls
bash-4.2# ls
        file
bash-4.2# cd ../data2
bash-4.2# cd data2      
bash-4.2# ls
bash-4.2# touch file1   # data2是只读
        touch: cannot touch 'file1': Read-only file system
bash-4.2# ls
        bin   data1  dev  file1  lib    media  opt   root  sbin  sys  usr
        boot  data2  etc  home   lib64  mnt    proc  run   srv   tmp  var
bash-4.2# cd /etc/yum.repos.d/
bash-4.2# ls
        rhel7.repo  yum.repo
bash-4.2# cat yum.repo 
        [rhel7.3]
        name = rhel7.3
        baseurl = file:///rhel7.3
        gpgcheck = 0
bash-4.2# cat  rhel7.repo 
[root@foundation44 data1]#  docker create --name vm3 -v  /tmp/data1:/data1 -v /tmp/data2:/data2:ro -v /etc/yum.repos.d/yum.repo:/etc/yum.repos.d/yum.repo: rhel7 bash  # 这里的目录一定要与自己的真实目录匹配
        344b87a5584c3a255e5101bcc3fe9f334191afbe66464638259009765dd70321
[root@foundation44 data1]# docker run -it --name vm4 --volumes-from vm3 rhel7 bash   # 数据卷容器
bash-4.2# ls
        bin   data1  dev  home  lib64  mnt  proc  run   srv  tmp  var
        boot  data2  etc  lib   media  opt  root  sbin  sys  usr
bash-4.2# exit
[root@foundation44 data1]# docker run -it --name vm5 -v /tmp/backup rhel7 bash
bash-4.2# cd backup/
bash-4.2# ls
        etc.tar
[root@foundation44 data1]# docker network ls
        NETWORK ID          NAME                DRIVER              SCOPE
        72597cce8a45        bridge              bridge              local
        1683d667c54c        host                host                local
        97899ece694c        none                null                local

[root@foundation44 data1]# docker inspect vm2 | grep Pid
            "Pid": 12906,
            "PidMode": "",
            "PidsLimit": 0,
[root@foundation44 data1]# brctl show

这里写图片描述

    [root@foundation44 ~]# docker run --rm -v /tmp/bacpup:/backup ubuntu tar cf /backup/etc.tar /etc   #备份数据卷
tar: Removing leading `/' from member names
[root@foundation44 ~]# cd /tmp/bacpup/
[root@foundation44 bacpup]# ls
        etc.tar

[root@foundation44 bacpup]# cd /etc/docker/
[root@foundation44 docker]# pwd
/etc/docker
[root@foundation44 docker]# docker  ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
8f40600ade95        nginx               "nginx -g 'daemon ..."   About an hour ago   Up About an hour    80/tcp              vm2

[root@foundation44 docker]# docker stop vm2 
        vm2

5.网络模式:

1.容器的四种网络模式:
        bridge 桥接模式、host 模式、container 模式和 none 模式
        启动容器时可以使用 --net 参数指定,默认是桥接模式。
2.docker 网络初始化的过程:

这里写图片描述
这里写图片描述
这里写图片描述

[root@foundation44 docker]# brctl show

这里写图片描述

    Bridge 桥接模式的实现步骤主要如下: 
(1) Docker Daemon 利用 veth pair 技术,在宿主机上创建两个虚拟网络接口
    设备,假设为 veth0 和 veth1。而 veth pair 技术的特性可以保证无论哪一个
     veth 接收到网络报文,都会将 报文传输给另一方。 
(2) Docker Daemon将veth0附加到Docker Daemon创建的docker0网桥上。保证宿主
 机的网络报文可以发往 veth0; 
(3) Docker Daemon将veth1添加到Docker Container所属的namespace下,并被
改名为eth0。 如此一来,保证宿主机的网络报文若发往 veth0,则立即会被 eth0 接收,
实现宿主机到 DockerContainer网络的联通性;同时,也保证Docker Container单独
使用eth0,实现容器网 络环境的隔离性。


  bridge 桥接模式下的 Docker Container 在使用时,并非为开发者包办了一切。最明
显的是, 该模式下Docker Container不具有一个公有IP,即和宿主机的eth0不处于同一个
网段。导致 的结果是宿主机以外的世界不能直接和容器进行通信。虽然 NAT 模式经过中间
处理实现了 这一点,但是 NAT 模式仍然存在问题与不便,如:容器均需要在宿主机上竞争
端口,容器 内部服务的访问者需要使用服务发现获知服务的外部端口等。另外 NAT 模式由
于是在三层 网络上的实现手段,故肯定会影响网络的传输效率。

这里写图片描述

Host 网络模式: host 模式是 bridge 桥接模式很好的补充。采用 
host 模式的 Docker Container,可以直接使用 宿主机的IP地址与外界进行通信,
若宿主机的eth0是一个公有IP,那么容器也拥有这个公 有IP。同时容器内服务的端口也可以
使用宿主机的端口,无需额外进行 NAT 转换。当然, 有这样的方便,肯定会损失部分其他的
特性,最明显的是Docker Container网络环境隔离性 的弱化,即容器不再拥有隔离、
独立的网络栈。另外,使用host模式的Docker Container虽 然可以让容器内部的服务和
传统情况无差别、无改造的使用,但是由于网络隔离性的弱 化,该容器会与宿主机共享竞争
网络栈的使用;另外,容器内部将不再拥有所有的端口资 源,原因是部分端口资源已经被宿
主机本身的服务占用,还有部分端口已经用以 bridge 网 络模式容器的端口映射。

这里写图片描述

Container 网络模式: 
(1) 查找 other container(即需要被共享网络环境的容器)的网络 namespace;
(2) 将新创建的 Docker Container(也是需要共享其他网络的容器)的 namespace,
 使用 othercontainer 的 namespace。 DockerContainer 的 other container 
 网络模式,可以用来更好的服务于容器间的通信。 在这种模式下的Docker Container
 可以通过localhost 来访问 namespace下的其他容器,传输 效率较高。虽然多个容器共享
 网络环境,但是多个容器形成的整体依然与宿主机以及其他 容器形成网络隔离。另外,
 这种模式还节约了一定数量的网络资源。但是需要注意的是, 它并没有改善容器与宿主机以外世界通信的情况。


None 网络模式:
 网络环境为 none,即不为 DockerContainer 任何的网络环境。
一旦 DockerContainer 采用了 none 网络模式,那么容器内部就只能使用 loopback 
网络设备,不会再有其他的网络资源。 可以说none模式为DockerContainer做了极少的网络
设定,但是俗话说得好“少即是多”,在 没有网络配置的情况下,作为 Docker 开发者,
才能在这基础做其他无限多可能的网络定制 开发。这也恰巧体现了 Docker 设计理念的开放。
在 none 网络模式下分配固定 ip: netns 是在 linux 中提供网络虚拟化的一个项目,
使用 netns 网络空间虚拟化可以在本地虚拟 化出多个网络环境,目前 netns 在 lxc 容器
中被用来为容器提供网络。 使用 netns 创建的网络空间独立于当前系统的网络空间,其
中的网络设备以及 iptables 规则 等都是独立的,就好像进入了另外一个网络一样。

#

[root@foundation44 Desktop]# docker load -i  ubuntu.tar  # 导入
        454970bd163b: Loading layer 196.8 MB/196.8 MB
        38112156678d: Loading layer 208.9 kB/208.9 kB
        4e1f7c524148: Loading layer 4.608 kB/4.608 kB
        56063ad57855: Loading layer 1.024 kB/1.024 kB
        The image ubuntu:latest already exists, renaming the old one with ID sha256:735f80812f90aca43213934fd321a75ef20b2e30948dbbdd2c240e8abaab8a28 to empty string

#1.桥接模式
[root@foundation44 docker]# docker run -it --name vm3 ubuntu  # vm3必须不存在

这里写图片描述

#2.主机模式
[root@foundation44 docker]# docker rm -f vm3
        vm3
[root@foundation44 docker]# docker run -it --name vm3 --net host ubuntu
root@foundation44:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
   valid_lft forever preferred_lft forever
inet6 ::1/128 scope host 
   valid_lft forever preferred_lft forever
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether 00:21:cc:70:e6:e2 brd ff:ff:ff:ff:ff:ff
3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 08:11:96:b9:69:84 brd ff:ff:ff:ff:ff:ff
    inet 192.168.43.173/24 brd 192.168.43.255 scope global dynamic wlp3s0
       valid_lft 2247sec preferred_lft 2247sec
    inet6 fe80::aca2:ae6:e6e0:79c/64 scope link 
       valid_lft forever preferred_lft forever
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:21:cc:70:e6:e2 brd ff:ff:ff:ff:ff:ff
    inet 172.25.44.250/24 brd 172.25.44.255 scope global br0
       valid_lft forever preferred_lft forever
    inet 172.25.254.44/24 brd 172.25.254.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::221:ccff:fe70:e6e2/64 scope link 
       valid_lft forever preferred_lft forever
5: virbr1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:7e:8d:6d brd ff:ff:ff:ff:ff:ff
6: virbr1-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr1 state DOWN group default qlen 1000
    link/ether 52:54:00:7e:8d:6d brd ff:ff:ff:ff:ff:ff
7: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:db:cd:fc brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
8: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:db:cd:fc brd ff:ff:ff:ff:ff:ff
9: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN group default qlen 1000
    link/ether fe:54:00:7a:4e:0c brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe7a:4e0c/64 scope link 
       valid_lft forever preferred_lft forever
10: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:d3:84:2b:26 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:d3ff:fe84:2b26/64 scope link 
       valid_lft forever preferred_lft forever
36: veth4a57647@if35: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether 9a:0f:23:5c:06:78 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::980f:23ff:fe5c:678/64 scope link 
       valid_lft forever preferred_lft forever

 # 3.container模式
[root@foundation44 docker]# docker run -it --name vm4 --net container:vm2  ubuntu
root@8f40600ade95:/# ip addr
        1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
            link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
            inet 127.0.0.1/8 scope host lo
               valid_lft forever preferred_lft forever
            inet6 ::1/128 scope host 
               valid_lft forever preferred_lft forever
        35: eth0@if36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
            link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
            inet 172.17.0.2/16 scope global eth0
               valid_lft forever preferred_lft forever
            inet6 fe80::42:acff:fe11:2/64 scope link 
                   valid_lft forever preferred_lft forever
[root@foundation44 docker]# brctl show
        bridge name bridge id       STP enabled interfaces
        br0     8000.0021cc70e6e2   no      enp0s25
                                    vnet0
        docker0     8000.0242d3842b26   no      veth4a57647
        virbr0      8000.525400dbcdfc   yes     virbr0-nic
        virbr1      8000.5254007e8d6d   yes     virbr1-nic  #4.none模式(重新打开一个shell,进行测试,切记,不能退出去)
[root@foundation44 docker]# docker run -it --name vm3 --net none  ubuntu    
        root@0c5d8ac8edaa:/# ip addr
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
             root@0c5d8ac8edaa:/# ip addr add 172.17.0.100/24 dev lo  #虽然是root用户,但是不能添加ip
        RTNETLINK answers: Operation not permitted
        root@0c5d8ac8edaa:/# id
        uid=0(root) gid=0(root) groups=0(root)
# 切换shell,查看pid
[root@foundation44 netns]# docker inspect vm3 | grep Pid
        "Pid": 19459,
        "PidMode": "",
        "PidsLimit": 0,
[root@foundation44 bacpup]# cd /proc/19459
[root@foundation44 19459]# ls
            attr        coredump_filter  gid_map    mountinfo   oom_score      schedstat  status
            autogroup   cpuset           io         mounts      oom_score_adj  sessionid  syscall
            auxv        cwd              limits     mountstats  pagemap        setgroups  task
            cgroup      environ          loginuid   net         personality    smaps      timers
            clear_refs  exe              map_files  ns          projid_map     stack      uid_map
            cmdline     fd               maps       numa_maps   root           stat       wchan
            comm        fdinfo           mem        oom_adj     sched          statm
[root@foundation44 19459]# pwd
        /proc/19459
[root@foundation44 19459]# cd ns/
[root@foundation44 ns]# ls
        ipc  mnt  net  pid  user  uts
[root@foundation44 ns]# ll
            total 0
            lrwxrwxrwx 1 root root 0 Aug 19 15:27 ipc -> ipc:[4026532521]
            lrwxrwxrwx 1 root root 0 Aug 19 15:27 mnt -> mnt:[4026532519]
            lrwxrwxrwx 1 root root 0 Aug 19 14:06 net -> net:[4026532524]
            lrwxrwxrwx 1 root root 0 Aug 19 15:27 pid -> pid:[4026532522]
            lrwxrwxrwx 1 root root 0 Aug 19 15:27 user -> user:[4026531837]
            lrwxrwxrwx 1 root root 0 Aug 19 15:27 uts -> uts:[4026532520]
[root@foundation44 ns]# ip netns add test
[root@foundation44 ns]# ip netns list
        test
[root@foundation44 19459]# ln -s /proc/19459/ns/net  /var/run/netns/19459      #建立软链接
[root@foundation44 19459]# ip netns list  # 查看所有的network
        19459
[root@foundation44 19459]# cd /var/run/netns/
[root@foundation44 netns]# ip link add name veth0 type veth peer name veth1    # 
    brctl addif docker0 veth0
[root@foundation44 netns]# ip addr

这里写图片描述

[root@foundation44 netns]# ip link set up veth0
[root@foundation44 netns]# ip link set up veth1

这里写图片描述

[root@foundation44 19459]# ip link set veth1 netns 19459  # 添加新设备

[root@foundation44 netns]# ip netns exes 19459 ip link set up veth1 name eth0  #改名字

这里写图片描述

  # 启用一个设备
[root@foundation44 netns]# ip netns exec 19459 ip link set up dev eth0  
[root@foundation44 netns]# ip netns exec 19459 ip addr add 172.17.0.100/24 dev eth0  # 为设备设置ip
root@fa16889b8d6c:/# ping 172.17.0.1

PING 172.17.0.1 (172.17.0.1) 56(84) bytes of data.
64 bytes from 172.17.0.1: icmp_seq=1 ttl=64 time=0.080 ms
64 bytes from 172.17.0.1: icmp_seq=2 ttl=64 time=0.096 ms

[root@foundation44 netns]# ip netns exec 19459 ip route add default via 172.17.0.1


        root@fa16889b8d6c:/#  route -n
        Kernel IP routing table
        Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
        0.0.0.0         172.17.0.1      0.0.0.0         UG    0      0        0 eth0
        172.17.0.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0
root@fa16889b8d6c:/#  ping www.baidu.com
PING www.a.shifen.com (183.232.231.173) 56(84) bytes of data.
^C64 bytes from 183.232.231.173: icmp_seq=1 ttl=51 time=64.6 ms

--- www.a.shifen.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 64.650/64.650/64.650/0.000 ms



[root@foundation44 netns]# docker rm -f `docker ps -aq`
        fa16889b8d6c
        8f40600ade95
        04aa86a76c7f
[root@foundation44 netns]#  docker ps -a
        CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

6.端口映射(Docker 的端口映射是由 iptables 来实现的(目的是为了让别人可以访问):

)

[root@foundation44 netns]# docker run -d --name vm1 -p 8080:80 nginx   #-p 表示映射
4d6dcee3f86ad51e88064d4e5e1729104d48949c0c8c4e612ed1bc00da514411
[root@foundation44 netns]# docker ps
        CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
        4d6dcee3f86a        nginx               "nginx -g 'daemon ..."   5 seconds ago       Up 4 seconds        0.0.0.0:8080->80/tcp   vm1

[root@foundation44 netns]# iptables -t nat -nL

        target     prot opt source               destination         
        RETURN     all  --  0.0.0.0/0            0.0.0.0/0           
        DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 to:172.17.0.2:80

#

#测试,映射成功

这里写图片描述

这里写图片描述

7. 容器互联

1.  --link 参数可以在不映射端口的前提下为两个容器间建立安全连接
2.  --link 参数可以连接一个 或多个容器到将要创建的容器。
3.  --link 参数的格式为 --link name:alias,其中 name 是要链接的容器的名称,alias 是这个连接的别名

#

[root@foundation44 netns]# docker run -it --name vm2 --link vm1:nginx ubuntu
root@d85d3a4ef3bc:/#  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  nginx 4d6dcee3f86a vm1
        172.17.0.3  d85d3a4ef3bc

这里写图片描述

root@d85d3a4ef3bc:/# ping nginx
PING nginx (172.17.0.2) 56(84) bytes of data.
64 bytes from nginx (172.17.0.2): icmp_seq=1 ttl=64 time=0.084 ms
64 bytes from nginx (172.17.0.2): icmp_seq=2 ttl=64 time=0.058 ms

--- nginx ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.058/0.071/0.084/0.013 ms
[root@foundation44 netns]#  cd /tmp/docker/
[root@foundation44 docker]# vim Dockerfile

这里写图片描述

[root@foundation44 docker]# vim dvd.repo

这里写图片描述

[root@foundation44 docker]#  docker build -t rhel7:v1 .
[root@foundation44 docker]#  docker images rhel7

这里写图片描述

[root@foundation44 docker]# docker run -d --name vm3 -v /tmp/docker/web:/var/www/html rhel7:v1
8c0e45e1392b496e952d5fcd844fa265cdb6806f04ba90235815f62e5730365a
[root@foundation44 docker]#  docker inspect vm3

这里写图片描述

#浏览器访问测试

这里写图片描述

8.创建镜像(Dockerfile自启动ssh服务)

[root@foundation44 docker]# mkdir ssh
[root@foundation44 docker]# cp dvd.repo ssh/
[root@foundation44 docker]#  cd ssh/
[root@foundation44 ssh]# vim Dockerfile

这里写图片描述

[root@foundation44 ssh]# docker ps
        CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
        a633c69566db        rhel7:v5            "/usr/sbin/sshd -D"      16 seconds ago      Up 14 seconds       22/tcp                 vm3
        50df02068cbd        ubuntu              "/bin/bash"              11 minutes ago      Up 11 minutes                              vm1
        4d6dcee3f86a        nginx               "nginx -g 'daemon ..."   36 minutes ago      Up 36 minutes       0.0.0.0:8080->80/tcp   vm1

[root@foundation44 ssh]# docker build -t rhel7:v2  cd /tmp/docker/ssh
[root@foundation44 ssh]#  docker run -d --name vm3 rhel7:v1   #如果连不上
[root@foundation44 ssh]# ssh [email protected]
The authenticity of host '172.17.0.3 (172.17.0.3)' can't be established.
ECDSA key fingerprint is e4:e3:67:99:61:3e:8f:8c:fb:83:1c:e5:20:a2:4b:e0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.17.0.3' (ECDSA) to the list of known hosts.
[email protected]'s password:   #用自己设置的密码登陆
-bash-4.2#   # 连接成功

猜你喜欢

转载自blog.csdn.net/wzt888_/article/details/81835153