1. 程式人生 > >docker的基礎操作及四種網路形式

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

libsemanage-python-2.5-8.el7.x86_64.rpm

pigz-2.3.4-1.el7.x86_64.rpm

policycoreutils-2.5-17.1.el7.x86_64.rpm

policycoreutils-python-2.5-17.1.el7.x86_64.rpm

[[email protected]

 mnt]# systemctl start docker

匯入鏡象

[[email protected] mnt]# docker load -i ubuntu.tar

454970bd163b: Loading layer  196.8MB/196.8MB

38112156678d: Loading layer  208.9kB/208.9kB

4e1f7c524148: Loading layer  4.608kB/4.608kB

56063ad57855: Loading layer  1.024kB/1.024kB

[[email protected] mnt]# docker load -i rhel7.tar 

e1f5733f050b: Loading layer  147.1MB/147.1MB

[[email protected] mnt]# docker load -i nginx.tar 

cdb3f9544e4c: Loading layer  58.44MB/58.44MB

a8c4aeeaa045: Loading layer  54.24MB/54.24MB

08d25fa0442e: Loading layer  3.584kB/3.584kB

Loaded image: nginx:latest

檢視映象

[[email protected] mnt]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

nginx               latest              c82521676580        2 months ago        109MB

ubuntu              latest              07c86167cdc4        2 years ago         188MB

rhel7               latest              0a3eb3fde7fd        4 years ago         140MB

[[email protected] mnt]# docker image --help

Usage: docker image COMMAND

Manage images

Options:

Commands:

  build       Build an image from a Dockerfile

  history     Show the history of an image

  import      Import the contents from a tarball to create a filesystem image

  inspect     Display detailed information on one or more images

  load        Load an image from a tar archive or STDIN

  ls          List images

  prune       Remove unused images

  pull        Pull an image or a repository from a registry

  push        Push an image or a repository to a registry

  rm          Remove one or more images

  save        Save one or more images to a tar archive (streamed to STDOUT by default)

  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE

Run 'docker image COMMAND --help' for more information on a command.

建立容器

[[email protected] mnt]# docker run  -it --name vm1 ubuntu

[email protected]:/# exit

[[email protected] mnt]# docker ps -a

CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                      PORTS               NAMES

ce9b17aeb721        ubuntu              "/bin/bash"         About a minute ago   Exited (0) 28 seconds ago                       vm1

開啟vm1容器

[[email protected] mnt]# docker start vm1

vm1

[[email protected] mnt]# docker attach vm1 

[email protected]:/# 

[email protected]:/# 

[email protected]:/# exit

進入互動介面

[[email protected] mnt]# docker attach vm1                      

read escape sequence                   ctrl+p+q 打入後臺

[[email protected] mnt]# docker run -d --name  vm2 nginx

2d558e44f5cba5eb9439649411e1bbe03d79c96fadfd8fdb2b3ba0ae2d85481b

[[email protected] mnt]# docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES

2d558e44f5cb        nginx               "nginx -g 'daemon of…"   7 seconds ago       Up 6 seconds        80/tcp              vm2

ce9b17aeb721        ubuntu              "/bin/bash"              6 minutes ago       Up 4 minutes                            vm1

預設使用網路對的形式

[[email protected] mnt]# ip addr

14: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 

    link/ether 02:42:9b:38:13:f7 brd ff:ff:ff:ff:ff:ff

    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0

       valid_lft forever preferred_lft forever

    inet6 fe80::42:9bff:fe38:13f7/64 scope link 

       valid_lft forever preferred_lft forever

46: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP 

    link/ether ca:aa:ea:2a:bf:e2 brd ff:ff:ff:ff:ff:ff link-netnsid 0

    inet6 fe80::c8aa:eaff:fe2a:bfe2/64 scope link 

       valid_lft forever preferred_lft forever

[email protected]:/# 

[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

45: [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 brd 172.17.255.255 scope global eth0

       valid_lft forever preferred_lft forever

[email protected]:/# exit

檢視容器資訊

[[email protected] mnt]# docker inspect vm2

檢視容器歷史

[[email protected] mnt]# docker history nginx:latest 

IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT

c82521676580        2 months ago        /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B                  

<missing>           2 months ago        /bin/sh -c #(nop)  STOPSIGNAL [SIGTERM]         0B                  

<missing>           2 months ago        /bin/sh -c #(nop)  EXPOSE 80/tcp                0B                  

<missing>           2 months ago        /bin/sh -c ln -sf /dev/stdout /var/log/nginx…   22B                 

<missing>           2 months ago        /bin/sh -c set -x  && apt-get update  && apt…   53.7MB              

<missing>           2 months ago        /bin/sh -c #(nop)  ENV NJS_VERSION=1.15.2.0.…   0B                  

<missing>           2 months ago        /bin/sh -c #(nop)  ENV NGINX_VERSION=1.15.2-…   0B                  

<missing>           3 months ago        /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B                  

<missing>           3 months ago        /bin/sh -c #(nop)  CMD ["bash"]                 0B                  

<missing>           3 months ago        /bin/sh -c #(nop) ADD file:919939fa022472751…   55.3MB 

在容器內執行指令

[[email protected] mnt]# docker exec vm2 ls -ld /usr/share/nginx/html

drwxr-xr-x 2 root root 40 Jul 24 17:21 /usr/share/nginx/html

[[email protected] mnt]# vim index.html

將檔案拷入容器內

[[email protected] mnt]# docker cp index.html vm2:/usr/share/nginx/html

[[email protected] mnt]# docker attach vm1

[email protected]:/# 

[email protected]:/# uname -r 

3.10.0-514.el7.x86_64

[email protected]:/# touch file{1..20}

[email protected]:/# exit

將容器vm1提交為一個映象

[[email protected] mnt]# docker commit vm1 ubuntu:v1

sha256:9be0a9b6f97c722bcb8f6d10620ac30cf784bb199352b65a69661ac6543284db

[[email protected] mnt]# docker history ubuntu:v1 

IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT

9be0a9b6f97c        15 seconds ago      /bin/bash                                       35B                 

07c86167cdc4        2 years ago         /bin/sh -c #(nop) CMD ["/bin/bash"]             0B                  

220d2912ab1d        2 years ago         /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$…   1.9kB               

cc77a2e3d72c        2 years ago         /bin/sh -c echo '#!/bin/sh' > /usr/sbin/poli…   195kB               

c8fa7cdceff3        2 years ago         /bin/sh -c #(nop) ADD file:b9504126dc5590898…   188MB               

[[email protected] mnt]# docker history ubuntu

IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT

07c86167cdc4        2 years ago         /bin/sh -c #(nop) CMD ["/bin/bash"]             0B                  

220d2912ab1d        2 years ago         /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$…   1.9kB               

cc77a2e3d72c        2 years ago         /bin/sh -c echo '#!/bin/sh' > /usr/sbin/poli…   195kB               

c8fa7cdceff3        2 years ago         /bin/sh -c #(nop) ADD file:b9504126dc5590898…   188MB    

刪除容器

[[email protected] mnt]# docker rm vm1

vm1

刪除映象

[[email protected] mnt]# docker rmi ubuntu:v1

Untagged: ubuntu:v1

Deleted: sha256:9be0a9b6f97c722bcb8f6d10620ac30cf784bb199352b65a69661ac6543284db

Deleted: sha256:9f242d4309ec44c7c426bb1c729fcb2156a09f562023b23999a57b52d7590590

如果建立容器時沒有命名,會隨機命名     

[[email protected] mnt]# docker run  -it ubuntu

[email protected]:/# exit

[[email protected] mnt]# docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES

e14dbb6ea8b3        ubuntu              "/bin/bash"              13 seconds ago      Exited (0) 11 seconds ago                       distracted_goldberg

6591d472ee9a        nginx               "nginx -g 'daemon of…"   37 minutes ago      Exited (0) 5 minutes ago                        vm2

[[email protected] mnt]# docker start distracted_goldberg 

distracted_goldberg

[[email protected] mnt]# docker attach distracted_goldberg

[email protected]:/# 

[email protected]:/# touch file1

[email protected]:/# read escape sequence

檢視容器檔案系統變更

[[email protected] mnt]# docker diff e14dbb6ea8b3

A /file1

[[email protected] mnt]# docker attach distracted_goldberg

[email protected]:/# 

[email protected]:/# rm -rf file1 

[email protected]:/# read escape sequence

[[email protected] mnt]# docker diff e14dbb6ea8b3

進入容器bash的兩種方式

[[email protected] mnt]# docker run  -it --name vm1 nginx bash

[email protected]:/# exit

[[email protected] mnt]# docker start vm1

vm1

[[email protected] mnt]# docker exec -it vm1 bash

[email protected]:/# ^C

[email protected]:/# exit

匯出容器

[[email protected] mnt]# docker export distracted_goldberg -o test.tar

匯入容器

[[email protected] mnt]# docker import test.tar test:v1

sha256:dac6e444ddf390fb1cb2b4bdeffe6941376c19093b5d354a4e456654cc23a85b

從網上獲取映象

[[email protected] mnt]# vim /etc/docker/daemon.json

{

  "registry-mirrors": ["https://w8ujyhgj.mirror.aliyuncs.com"]

}

[[email protected] mnt]# systemctl daemon-reload 

[[email protected] mnt]# systemctl restart docker

查詢映象

[[email protected] mnt]# docker search busybox

NAME                        DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED

busybox                     Busybox base image.                             1381                [OK]                

下載映象

[[email protected] mnt]# docker pull busybox

Using default tag: latest

latest: Pulling from library/busybox

90e01955edcd: Pull complete 

Digest: sha256:2a03a6059f21e150ae84b0973863609494aad70f0a80eaeb64bddd8d92465812

Status: Downloaded newer image for busybox:latest

[[email protected] mnt]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

test                v1                  dac6e444ddf3        24 minutes ago      188MB

busybox             latest              59788edf1f3e        2 weeks ago         1.15MB

將容器/usr/share/nginx/html掛在到主機 /tmp/docker/web/目錄下

[[email protected] docker]# docker run -d --name vm2 -v /tmp/docker/web/:/usr/share/nginx/html nginx

d259669ae78ba0c80cbb7374101a261350bb9f4df9e56580e9189a984a70d4c7

/tmp/docker/data2:/data2:ro  以只讀的方式掛載

[[email protected] docker]# docker run -it --name vm3 -v /tmp/docker/data1:/data1 -v /tmp/docker/data2:/data2:ro -v /etc/yum.repos.d/rhel-dvd.repo:/etc/yum.repos.d/rhel-dvd.repo:ro ubuntu

[email protected]:/# vi /etc/yum.repos.d/rhel-dvd.repo 

[[email protected] docker]# docker attach vm3

[email protected]:/# 

[email protected]:/# cd data1/

[email protected]:/data1# touch file1

[email protected]:/data1# cd ..

[email protected]:/# cd data2/

[email protected]:/data2# touch file2

touch: cannot touch 'file2': Read-only file system

[email protected]:/data2# cd ..

[email protected]:/# read escape sequence

建立容器的volumes

[[email protected] docker]# docker create --name dataval -v /tmp/docker/data1:/data1 -v /tmp/docker/data2:/data2:ro -v /etc/yum.repos.d/rhel-dvd.repo:/etc/yum.repos.d/rhel-dvd.repo:ro ubuntu

使用volumes建立容器

[[email protected] docker]# docker run -it --name vm4 --volumes-from=dataval ubuntu

[email protected]:/# cd data1/

[email protected]:/data1# cd ..

[email protected]:/# cd /data2/

容器的四種網路模式

一、Bridge 橋接模式

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 接收 實現宿主機到Docker Container 網路的聯通性; 同時,也保證 Docker Container 單獨使用 eth0,實現容器網路環境的隔離性。 bridge 橋接模式下的 Docker Container 在使用時,並非為開發者包辦了一切。 最明顯的是,該模式下 Docker Container 不具有一個公有 IP, 即和宿主機的 eth0 不處於同一個網段。導致的結果是宿主機以外的世界不能直接和容器進行通訊。 雖然 NAT 模式經過中間處理實現了這一點 但是 NAT 模式仍然存在問題與不便,如:容器均需要在宿主機上競爭埠,容器 內部服務的訪問者需要使用服務發現獲知服務的外部埠等。 另外 NAT 模式由於是在三層 網路上的實現手段,故肯定會影響網路的傳輸效率。  

[[email protected] docker]# docker run  -d --name vm1 nginx

f29a7c9fe6b6b10b9e54e256ef47e694d9f361716bc15de3143555caeeb231e1

二、Host 網路模式:

host 模式是 bridge 橋接模式很好的補充。 採用 host 模式的 Docker Container,可以直接使用 宿主機的 IP 地址與外界進行通訊,若宿主機的 eth0 是一個公有 IP, 那麼容器也擁有這個公有 IP。 同時容器內服務的埠也可以使用宿主機的埠,無需額外進行 NAT 轉換。 當然,有這樣的方便,肯定會損失部分其他的特性, 最明顯的是 Docker Container 網路環境隔離性的弱化, 即容器不再擁有隔離、獨立的網路棧。 另外,使用 host 模式的 Docker Container 雖 然可以讓容器內部的服務和傳統情況無差別、無改造的使用, 但是由於網路隔離性的弱化,該容器會與宿主機共享競爭網路棧的使用; 另外,容器內部將不再擁有所有的埠資源, 原因是部分埠資源已經被宿主機本身的服務佔用, 還有部分埠已經用以 bridge 網路模式容器的埠對映。  

[[email protected] docker]# docker run -it --name vm2 --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:5f:d1:ca 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 74:e5:0b:88:f8:0c brd ff:ff:ff:ff:ff:ff

    inet 192.168.43.164/24 brd 192.168.43.255 scope global dynamic wlp3s0

       valid_lft 3137sec preferred_lft 3137sec

    inet6 240e:bf:d206:aba5:ff6f:936a:2372:adc6/64 scope global 

       valid_lft forever preferred_lft forever

    inet6 fe80::8c56:99c9:940f:272d/64 scope link 

       valid_lft forever preferred_lft forever

埠對映

[[email protected] docker]# docker run  -d --name vm3 -p 8080:80 nginx

dd3a11de173e9f90f5beace765f58b6de6832c3af6ecf1c27cfc3b2baf9601c8

三、Container 網路模式:

(1) 查詢 other container(即需要被共享網路環境的容器)的網路 namespace;

(2) 將新建立的 Docker Container(也是需要共享其他網路的容器)的 namespace, 使用other container 的 namespace。 Docker Container 的 other container 網路模式, 可以用來更好的服務於容器間的通訊。 在這種模式下的 Docker Container 可以通過 localhost 來訪問 namespace 下的其他容器,傳輸效率較高。 雖然多個容器共享網路環境,但是多個容器形成的整體依然與宿主機以及其他容器形成網路隔離。 另外,這種模式還節約了一定數量的網路資源。但是需要注意的是, 它並沒有改善容器與宿主機以外世界通訊的情況。  

[[email protected] docker]# docker rm vm2

vm2

[[email protected] docker]# docker run -it --name vm2 --net container:vm1 ubuntu

[email protected]:/# ls

bin   dev  home  lib64  mnt  proc  run   srv  tmp  var

boot  etc  lib   media  opt  root  sbin  sys  usr

[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

69: [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 brd 172.17.255.255 scope global eth0

       valid_lft forever preferred_lft forever

[email protected]:/# exit

四、None 網路模式:

網路環境為 none,即不為 Docker Container 任何的網路環境。 一旦 Docker Container 採用了none 網路模式 那麼容器內部就只能使用 loopback 網路裝置,不會再有其他的網路資源。 可以說 none 模式為 Docker Container 做了極少的網路設定 但是俗話說得好“少即是多”在沒有網路配置的情況下,作為 Docker 開發者 才能在這基礎做其他無限多可能的網路定製開發。 這也恰巧體現了 Docker 設計理念的開放。 在 none 網路模式下分配固定 ip:netns 是在 linux 中提供網路虛擬化的一個專案 使用 netns 網路空間虛擬化可以在本地虛擬化出多個網路環境 目前 netns 在 lxc 容器中被用來為容器提供網路。 使用 netns 建立的網路空間獨立於當前系統的網路空間 其中的網路裝置以及 iptables 規則 等都是獨立的,就好像進入了另外一個網路一樣。 ---------------------   作者:xbw_linux123   來源:CSDN   原文:https://blog.csdn.net/xbw_linux123/article/details/81873490   版權宣告:本文為博主原創文章,轉載請附上博文連結!

[[email protected] docker]# docker run -it --name vm4 --net none 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

[[email protected] docker]# docker attach vm4

[email protected]:/# 

[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

75: [email protected]: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000

    link/ether 5a:19:45:43:da:d6 brd ff:ff:ff:ff:ff:ff

[[email protected] mnt]# ip link add name veth0 type veth peer name veth1

[[email protected] mnt]# brctl addif docker0 veth0

[[email protected] mnt]# ip link set up veth0

[[email protected] mnt]# ip link set up veth1

[[email protected] mnt]# docker inspect vm4 | grep Pid

            "Pid": 21352,

            "PidMode": "",

            "PidsLimit": 0,

[[email protected] mnt]# cd /proc/21352

[[email protected] 21352]# 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] 21352]# cd ns/

[[email protected] ns]# ls

ipc  mnt  net  pid  user  uts

[[email protected] ns]# ip netns add test

[[email protected] ns]# ip netns list

test

[[email protected] ns]# cd /var/run/netns/

[[email protected] netns]# ls

test

[[email protected] netns]# ip netns del test

[[email protected] netns]# ls

[[email protected] netns]# ln -s /proc/21352/ns/net 21352

[[email protected] netns]# ip link set veth1 netns 21352

[[email protected] netns]# ip netns exec 21352 ip link set veth1 name eth0

[[email protected] netns]# ip netns exec 21352 ip link set up dev eth0

[[email protected] netns]# ip netns exec 21352 ip addr add 172.17.0.100/24

Not enough information: "dev" argument is required.

[[email protected] netns]# ip netns exec 21352 ip addr add 172.17.0.100/24 dev eth0

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

[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

75: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000

    link/ether 5a:19:45:43:da:d6 brd ff:ff:ff:ff:ff:ff

    inet 172.17.0.100/24 scope global eth0

       valid_lft forever preferred_lft forever

[email protected]:/# ping baidu.com

PING baidu.com (220.181.57.216) 56(84) bytes of data.

64 bytes from 220.181.57.216: icmp_seq=1 ttl=52 time=45.1 ms

64 bytes from 220.181.57.216: icmp_seq=2 ttl=52 time=46.9 ms

64 bytes from 220.181.57.216: icmp_seq=3 ttl=52 time=41.2 ms

^C

--- baidu.com ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2003ms

rtt min/avg/max/mdev = 41.276/44.457/46.912/2.357 ms

[[email protected] docker]# docker rm vm1 vm2

vm1

vm2

[[email protected] docker]# docker run  -d --name  vm1 nginx

1c5af164e3dca1fa48ba3a3afa66eff61509f10f12570c3c3d7368e3c9342853

[[email protected] docker]# docker run -it --name  vm2 --net container:vm1 ubuntu

[email protected]:/# netstat -antlp

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -               

[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

77: [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 brd 172.17.255.255 scope global eth0

       valid_lft forever preferred_lft forever

[email protected]:/# exit

[[email protected] docker]# docker rm vm2

vm2

為vm2建立vm1網路連結,可以在vm2上通過vm1的網路別名,對vm1進行相應操作,實際是在vm2上建立vm1的解析

[[email protected] docker]# docker run -it --name vm2 --link vm1:nginx ubuntu

[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.087 ms

64 bytes from nginx (172.17.0.2): icmp_seq=2 ttl=64 time=0.075 ms

^C

--- nginx ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 999ms

rtt min/avg/max/mdev = 0.075/0.081/0.087/0.006 ms

[email protected]:/# vi /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 1c5af164e3dc vm1

172.17.0.3      a72205944b17

[email protected]:/# env

HOSTNAME=a72205944b17

TERM=xterm

NGINX_ENV_NJS_VERSION=1.15.2.0.2.2-1~stretch

LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:

NGINX_ENV_NGINX_VERSION=1.15.2-1~stretch

NGINX_NAME=/vm2/nginx

NGINX_PORT_80_TCP_PROTO=tcp

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

PWD=/

SHLVL=1

HOME=/root

NGINX_PORT_80_TCP=tcp://172.17.0.2:80

NGINX_PORT_80_TCP_PORT=80

LESSOPEN=| /usr/bin/lesspipe %s

NGINX_PORT_80_TCP_ADDR=172.17.0.2

LESSCLOSE=/usr/bin/lesspipe %s %s

NGINX_PORT=tcp://172.17.0.2:80

_=/usr/bin/env