1. 程式人生 > >Docker之搭建2048遊戲,四種網路模式的學習,容器和管理,資料卷的管理,用Dockerfile建立映象

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
[[email protected] Desktop]# mkdir /var/www/html/images
[[email protected] Desktop]# mv game2048.tar  /var/www/html/images
[[email protected] Desktop]# cd /var/www/html/images
[
[email protected]
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 [
[email protected]
images]# docker run -d --name vm1 game2048 # 後臺執行,-d 打入後臺,--name 起名字3 04aa86a76c7f6d78e7606bf2bd1e5f0a50bc145d646d7a3c9ac96ada2db99804 [[email protected] images]# ifconfig docker # 檢視docker的ip,這個是內部ip,只有自己可以看見

這裡寫圖片描述

[[email protected] images]# docker inspect  vm1  # 檢視映象詳情

這裡寫圖片描述

[[email protected] images]# docker inspect vm1

這裡寫圖片描述

[[email protected] images]# route -n       #檢視閘道器

這裡寫圖片描述

# game2048部署成功

這裡寫圖片描述

2.docker的技術指令

[[email protected] 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                # 檢視本地映象

    容器停掉之後,內部的所有資源都會被釋放,可以重新分配

這裡寫圖片描述

# 這兩個命令都可以控制容器的開啟與關閉
[[email protected] images]# docker container stop vm1
vm1
[[email protected] images]# docker start vm1
vm1
[[email protected] images]# docker  history game2048   #檢視歷史操作

這裡寫圖片描述

3.映象倉庫

[[email protected] ~]# cd /etc/docker/
[[email protected] docker]# ls
        key.json
[[email protected] docker]# vim daemon.json    #這個是自己註冊得到的網址,屬於私有的
        {
          "registry-mirrors": ["https://6zfq2ttt.mirror.aliyuncs.com"]
        }
[[email protected] docker]# systemctl daemon-reload
[[email protected] docker]# systemctl restart docker
[[email protected] 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
[[email protected] docker]# docker images nginx
        REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              c82521676580        3 weeks ago         109 MB
[[email protected] docker]# cd 
[[email protected] ~]# docker run -d --name vm2 nginx
        7c56d4998bd147387e4f8891ee595e237676f978bf77ea2357bce2728b0bfd52
[[email protected] ~]# docker inspect vm2        # 檢視vm2的ip

這裡寫圖片描述

[[email protected] ~]# vim index.html     # 編寫釋出目錄內容
        www.westos.org
[[email protected] ~]# docker cp index.html vm2:/usr/share/nginx/html     # 複製到預設釋出目錄下,也可以直接進行訪問,這樣做只是為了讓出測試效果更明顯


#  用 vm2 的 ipaddress 進行網頁測試:

這裡寫圖片描述

[[email protected] ~]# docker rm -f  vm2
        vm2
[[email protected] ~]# cd /tmp/
[[email protected] tmp]# mkdir docker/
[[email protected] tmp]# cd docker/
[[email protected] docker]# mkdir web/
[[email protected] docker]# cd web/
[[email protected] ~]# docker run -d --name vm2 -v /tmp/docker/web:/usr/share/nginx/html  nginx    #掛載,應用起來更方便
        04564fd35c83334418e1e0e0900814509cddda16f9e81266f2e1fe42e82f155d
[[email protected] ~]# mv index.html  /tmp/docker/web/
[[email protected] ~]# cd /tmp/docker/web/
[[email protected] web]# ls    #通過修改此釋出目錄控制輸出內容
    index.html
[[email protected] 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.資料卷的掛載

[[email protected] images]# ls
       game2048.tar  nginx.tar  rhel7.tar
[[email protected] images]#  docker load -i rhel7.tar   # 匯入映象
[[email protected] 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 
[[email protected] 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
[[email protected] 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
[[email protected] data1]# docker run -it --name vm5 -v /tmp/backup rhel7 bash
bash-4.2# cd backup/
bash-4.2# ls
        etc.tar
[[email protected] data1]# docker network ls
        NETWORK ID          NAME                DRIVER              SCOPE
        72597cce8a45        bridge              bridge              local
        1683d667c54c        host                host                local
        97899ece694c        none                null                local

[[email protected] data1]# docker inspect vm2 | grep Pid
            "Pid": 12906,
            "PidMode": "",
            "PidsLimit": 0,
[[email protected] data1]# brctl show

這裡寫圖片描述

    [[email protected] ~]# docker run --rm -v /tmp/bacpup:/backup ubuntu tar cf /backup/etc.tar /etc   #備份資料卷
tar: Removing leading `/' from member names
[[email protected] ~]# cd /tmp/bacpup/
[[email protected] bacpup]# ls
        etc.tar

[[email protected] bacpup]# cd /etc/docker/
[[email protected] docker]# pwd
/etc/docker
[[email protected] 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

[[email protected] docker]# docker stop vm2 
        vm2

5.網路模式:

1.容器的四種網路模式:
        bridge 橋接模式、host 模式、container 模式和 none 模式
        啟動容器時可以使用 --net 引數指定,預設是橋接模式。
2.docker 網路初始化的過程:

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

[[email protected] 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 規則 等都是獨立的,就好像進入了另外一個網路一樣。

#

[[email protected] 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.橋接模式
[[email protected] docker]# docker run -it --name vm3 ubuntu  # vm3必須不存在

這裡寫圖片描述

#2.主機模式
[[email protected] docker]# docker rm -f vm3
        vm3
[[email protected] docker]# docker run -it --name vm3 --net host ubuntu
[email protected]:/# 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: [email protected]: <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模式
[[email protected] docker]# docker run -it --name vm4 --net container:vm2  ubuntu
[email protected]:/# 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: [email protected]: <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
[[email protected] 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,進行測試,切記,不能退出去)
[[email protected] docker]# docker run -it --name vm3 --net none  ubuntu    
        [email protected]:/# 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
             [email protected]:/# ip addr add 172.17.0.100/24 dev lo  #雖然是root使用者,但是不能新增ip
        RTNETLINK answers: Operation not permitted
        [email protected]:/# id
        uid=0(root) gid=0(root) groups=0(root)
# 切換shell,檢視pid
[[email protected] netns]# docker inspect vm3 | grep Pid
        "Pid": 19459,
        "PidMode": "",
        "PidsLimit": 0,
[[email protected] bacpup]# cd /proc/19459
[[email protected] 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
[[email protected] 19459]# pwd
        /proc/19459
[[email protected] 19459]# cd ns/
[[email protected] ns]# ls
        ipc  mnt  net  pid  user  uts
[[email protected] 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]
[[email protected] ns]# ip netns add test
[[email protected] ns]# ip netns list
        test
[[email protected] 19459]# ln -s /proc/19459/ns/net  /var/run/netns/19459      #建立軟連結
[[email protected] 19459]# ip netns list  # 檢視所有的network
        19459
[[email protected] 19459]# cd /var/run/netns/
[[email protected] netns]# ip link add name veth0 type veth peer name veth1    # 
    brctl addif docker0 veth0
[[email protected] netns]# ip addr

這裡寫圖片描述

[[email protected] netns]# ip link set up veth0
[[email protected] netns]# ip link set up veth1

這裡寫圖片描述

[[email protected] 19459]# ip link set veth1 netns 19459  # 新增新裝置

[[email protected] netns]# ip netns exes 19459 ip link set up veth1 name eth0  #改名字

這裡寫圖片描述

  # 啟用一個裝置
[[email protected] netns]# ip netns exec 19459 ip link set up dev eth0  
[[email protected] netns]# ip netns exec 19459 ip addr add 172.17.0.100/24 dev eth0  # 為裝置設定ip
[email protected]:/# 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

[[email protected] netns]# ip netns exec 19459 ip route add default via 172.17.0.1


        [email protected]:/#  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
[email protected]:/#  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



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

6.埠對映(Docker 的埠對映是由 iptables 來實現的(目的是為了讓別人可以訪問):

)

[[email protected] netns]# docker run -d --name vm1 -p 8080:80 nginx   #-p 表示對映
4d6dcee3f86ad51e88064d4e5e1729104d48949c0c8c4e612ed1bc00da514411
[[email protected] 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

[[email protected] 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 是這個連線的別名

#

[[email protected] netns]# docker run -it --name vm2 --link vm1:nginx ubuntu
[email protected]:/#  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

這裡寫圖片描述

[email protected]:/# 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
[[email protected] netns]#  cd /tmp/docker/
[[email protected] docker]# vim Dockerfile

這裡寫圖片描述

[[email protected] docker]# vim dvd.repo

這裡寫圖片描述

[[email protected] docker]#  docker build -t rhel7:v1 .
[[email protected] docker]#  docker images rhel7

這裡寫圖片描述

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

這裡寫圖片描述

#瀏覽器訪問測試

這裡寫圖片描述

8.建立映象(Dockerfile自啟動ssh服務)

[[email protected] docker]# mkdir ssh
[[email protected] docker]# cp dvd.repo ssh/
[[email protected] docker]#  cd ssh/
[[email protected] ssh]# vim Dockerfile

這裡寫圖片描述

[[email protected] 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

[[email protected] ssh]# docker build -t rhel7:v2  cd /tmp/docker/ssh
[[email protected] ssh]#  docker run -d --name vm3 rhel7:v1   #如果連不上
[[email protected] 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#   # 連線成功

相關推薦

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 [

Docker學習筆記容器網路模式

首先從映象庫pull一個rhel7的映象下來,這些東西你得玩,光看沒意思。 本人pull了前兩個映象進行測試,如果連線失敗可以多試幾次,連上之後速度不算很差 docker pull richxsl/rhel7 docker pull bluedata/r

docker網路模式區別

1.host模式 host表示容器共享宿主機的ip和埠號。容器中不會虛擬自己的網絡卡和ip,當你檢視容器ip的時候,其實是宿主機的ip。 如:建立nginx容器 docker run -tid --net=host --name nginx nginx:1.13.12 你訪問主機的htt

Docker網路管理容器網路模式

下面,我們來學習Docker的網路管理。 Docker 在啟動時會建立一個虛擬網橋 docker0,預設地址為 172.17.0.1/16,容器啟動後都會被橋接到 docker0 上,並自動分配到一個 IP 地址 . docker0預設地址 網橋 容器橋接

Docker(十)-Docker網路模式

Docker 安裝時會自動在 host 上建立三個網路,我們可用 docker network ls 命令檢視: none模式,使用--net=none指定,該模式關閉了容器的網路功能。 host模式,使用--net=host指定,容器將不會虛擬出自己的網絡卡,配置自己的I

Docker網路模式

docker run建立Docker容器時,可以用–net選項指定容器的網路模式,Docker有以下4種網路模式:  bridge模式:使用–net =bridge指定,預設設定;  host模式:使用–net =host指定;  non

kvm虛擬機器的網路模式

引言 橋接模式 NAT模式 路由模式 隔離模式 預設配置 1. 引言 Libvirt虛擬網路使用虛擬網路交換機的概念。虛擬網路交換機是在主機物理機器伺服器上執行的軟體結構,虛擬機器(客戶機)通過它連線到該物理主機伺服器。客戶機的網路流量通過這

VirtualBox網路模式及典型配置

1.VirtualBox四種網路選型原則        第一:每個網路只負載一種業務型別的資料流量,功能單一化。例如連線外網用一個網路、虛擬機器之間互通用一個網路、虛擬機器與主機之間互通又是一個網路。這樣的話可使每種網路上的資料流量比較純淨,同時也可以避免因為網路故障而影響到

初學安卓開發隨筆 Menu、toast 用法、活動的啟動模式 以及 一個方便的Base活動類使用方法

pro 一點 cte edi standard oid nal xtend 解釋 Toast toast 是安卓系統的一種非常棒的提醒方式 首先定義一個彈出Toast的觸發點,比如可以是按鈕之類 其中 Toast.LENGTH_SHORT是指顯示時長 還有一個內置變量為To

thinkphp3.2筆記(2)調試模式配置項C創建模塊, URL模式

data 控制器 idt 默認 模式 com index.php 訪問 alt 一、調試模式 TP的調試模式其實就控制了TP關於配置信息以及函數的緩存功能 如果開啟了調試模式,每次訪問項目,Tp都會去加載最新的配置以及函數信息。 如果關閉了調試模式,當tp第一次訪問時會降配

安卓基礎Activity的啟動模式

Activity的四種啟動模式 Activity的啟動模式在清單檔案中配置: <activity ... activity:lauchMode:"..."; //有四種模式選擇,如不設定,預設為standard模式 1、standard :標準的啟動模式 系統的預設模式,一次跳轉即會

Docker搭建Go Web服務~~

需求 最近在學習Go語言開發。既然學習了它,必然要接觸Web開發。Go Web開發非常方便,在不使用任何框架的情況下即可快速搭建一個Web Server。既然有現成的框架,那就直接使用吧。  目前市面上比較流行的Go MVC框架有Revel、BeeGo等。最近正好學習了這兩個框架,Reve

logging日誌模組方式

1.最簡單的用法 import logging logging.error("hah") logging.info("hah") logging.debug("hah") logging.warning("hah") logging.critical("hah") info,debug並不會顯示

微信聊天記錄怎麼恢復恢復方法等你學

微信聊天記錄怎麼恢復?在如今的網路時代,微信已經滲透到我們現實生活當中,在微信中也有很多聊天記錄也不僅僅是情感象徵了,在我們不開心時還能開啟聊天記錄去看看以前的聊天美好時刻,也會有很多比較重要的資訊留存在聊天記錄裡面,那麼如果這些聊天記錄刪除了該怎麼該怎麼辦呢?

docker的基礎操作及網路形式

yum install  -y container-selinux-2.21-1.el7.noarch.rpm docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm libsemanage-2.5-8.el7.x86_64.rpm l

docker搭建wordpress實戰

docker的初識,docker compose+mysql+wordpress舉例應用 docker優勢 相對於傳統的devops開發,從以下幾個問題我們對比,發現dcoker的獨特 有沒有在安裝一個linux系統下安裝一個程式很頭疼,比如mysql版本不

JavaDOM,SAX,JDOM,DOM4J,解析xml方法比較

4種解析方式的比較 1.DOM解析   優點:a.形成了樹結構,直觀好理解,程式碼更易編寫         b.解析過程中樹結構保留在記憶體中,方便修改缺點:        a.當xml檔案較大時,對記憶體耗費比較大,容易影響解析效能並且造成記憶體溢位 2.SAX解析優點:

RabbitMQ 使用 交換機模式

一、整合RabbitMQ . 新增依賴 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-b

Android基礎Activity啟動模式task相關

1 啟動模式介紹 啟動模式簡單地說就是Activity啟動時的策略,在AndroidManifest.xml中的標籤的android:launchMode屬性設定; 啟動模式有4種,分別為standard、singleTop、singleTask、singleI

交換兩個變數的值不借助第三個變數的方法(學習

缺點:是隻能用於數字型別,字串之類的就不可以了。a+b有可能溢位(超出int的範圍),溢位是相對的, +了溢位了,-回來不就好了,所以溢位不溢位沒關係,就是不安全。2) 指標地址操作         因為對地址的操作實際上進行的是整數運算,比如:兩個地址相減得到一個整數,表示兩個變數在記憶體中的儲存位置隔了