Docker網絡和存儲

本節內容:html

  • Docker網絡訪問
  • 端口映射
  • 數據管理

 

1、Docker網絡訪問

1. docker自帶的網絡node

  • docker network ls:列出當前docker中已有的網絡
  • docker network inspect:查看網絡詳情,好比查看網絡中有哪些容器
  • docker run --network=<NETWORK>:指定運行容器時使用哪一個網絡

 

2. host網絡nginx

容器的網絡接口跟主機同樣。docker

 

3. none網絡centos

除了lo接口外,容器沒有任何其餘網絡接口。bash

 

4. bridge網絡網絡

這是新建容器時默認使用的網絡,也是使用得最多的網絡。網絡中的全部容器能夠經過IP互相訪問。spa

bridge網絡經過網絡接口docker0跟主機橋接,能夠在主機上經過ifconfig docker0查看到該網絡接口的信息。日誌

 

2、端口映射

docker使用端口映射來讓容器裏面某一個端口對外。一種是隨機映射,一種是指定端口映射。code

 

1. 隨機映射

docker run -P
    -P參數 隨機映射端口。隨機端口的好處是不會衝突。

舉個例子:

[root@node1 ~]# docker pull nginx
[root@node1 ~]# docker run -d -P nginx

能夠訪問Docker日誌:

[root@node1 ~]# docker logs 1822a2ea3ff3
172.16.4.81 - - [22/Aug/2017:09:20:25 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36" "-"
2017/08/22 09:20:25 [error] 5#5: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 172.16.4.81, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "172.16.7.151:32768", referrer: "http://172.16.7.151:32768/"
172.16.4.81 - - [22/Aug/2017:09:20:25 +0000] "GET /favicon.ico HTTP/1.1" 404 571 "http://172.16.7.151:32768/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36" "-"

 

2. 指定端口映射

docker run -p hostPort:containerPort
docker run -p ip:hostPort:containerPort
docker run -p ip::containerPort
docker run -p hostPort:containerPort:udp
    -p 指定端口映射,前面的是主機端口,後面的是容器端口。
[root@node1 ~]# docker run -d -p 81:80 nginx

 

3、數據管理

兩種方式:

  • 數據卷
  • 數據卷容器

 

1. 數據卷

啓動一個容器,把宿主機的某個目錄掛載到容器目錄上。

  • -v /data
  • -v src:dst 指定一個目錄掛載進容器。

 

【示例1】:未指定宿主機目錄掛載

[root@node1 ~]# docker run -it --name volume-test1 -v /data centos    
[root@5d485979254b /]# ls -l /data 
total 0

這個容器裏的/data 確定在宿主機的某個位置。打開一個新的終端,查看這個位置:

[root@node1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
5d485979254b        centos              "/bin/bash"              2 minutes ago       Up 2 minutes                                volume-test1                                 test
[root@node1 ~]# docker inspect 5d485979254b

在宿主機上的目錄中建立文件:

[root@node1 ~]# cd /var/lib/docker/volumes/7f37e83849f079275545b7d1f3381903795e946d113e1c43ff24fc1a7717e00f/_data
[root@node1 _data]# ls -l
total 0
[root@node1 _data]# touch test.txt

回到容器中,查看/data目錄下是否有剛纔建立的文件:

[root@5d485979254b /]# ls -l /data 
-rw-r--r--. 1 root root 0 Aug 23 02:07 test.txt

 

【示例2】:指定宿主機目錄掛載

[root@node1 ~]# docker run -it -v /opt:/opt centos
[root@850031902bb7 /]# ls /opt/
ansible_playbooks  rh
[root@850031902bb7 /]# exit
exit

宿主機的/opt:

[root@node1 ~]# ls /opt
ansible_playbooks  rh

掛載的時候能夠指定權限:

[root@node1 ~]# docker run -it -v /opt:/opt:rw centos
rw: 讀寫
ro: 只讀

掛載單個文件到容器:

[root@node1 ~]# docker run -it -v ~/.bash_history:/.bash_history centos

 

2. 數據卷容器

--volumes-from  讓一個容器訪問另一個容器的卷

 

【示例3】:建立一個容器做爲數據卷,啓動其餘容器訪問這個容器的卷。

[root@node1 ~]# docker run -it --name nfs -v /data centos /bin/bash 
[root@72bb5caa54db /]#

Ctrl+P Ctrl +Q退出交互式容器的bash,這樣容器就會在後臺運行。

[root@node1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
72bb5caa54db        centos              "/bin/bash"              37 seconds ago      Up 36 seconds                            nfs
[root@node1 ~]# docker inspect 72bb5caa54db
[root@node1 ~]# cd /var/lib/docker/volumes/8f1e1da837d5d86f79ac14e5d57c0e47243e3c68d5ca822d4f7a498386c07a59/_data
[root@node1 _data]# touch test2.txt

啓動其餘容器,訪問這個容器的卷:

[root@node1 _data]# docker run -it --name test1 --volumes-from nfs centos
[root@9097c1af8e86 /]# ls /data/
test2.txt
[root@9097c1af8e86 /]# 

這個數據卷容器能夠用來做收容器間數據共享,哪怕這個數據卷容器nfs停了,依然能夠經過其在宿主機上真實的目錄訪問裏面的數據。這個數據卷容器建立後能夠什麼都不幹,直接關閉,其餘容器掛載過來。

相關文章
相關標籤/搜索