1. 程式人生 > >docker管理應用程式資料、容器網路

docker管理應用程式資料、容器網路

管理應用程式資料

Docker提供三種方式將資料從宿主機掛載到容器中:

  • • volumes:Docker管理宿主機檔案系統的一部分(/var/lib/docker/volumes)。儲存資料的最佳方式。
  • • bind mounts:將宿主機上的任意位置的檔案或者目錄掛載到容器中。
  • • tmpfs:掛載儲存在主機系統的記憶體中,而不會寫入主機的檔案系統。如果不希望將資料持久儲存在任何位置,可以使用
  • tmpfs,同時避免寫入容器可寫層提高效能。

管理卷:路徑都是在/var/lib/docker/volumes/下的,路徑不可改變

[[email protected] ~]# docker volume create nginx-vol
nginx-vol
[
[email protected]
~]# docker volume ls DRIVER VOLUME NAME local nginx-vol [[email protected] ~]# docker volume inspect nginx-vol [ { "CreatedAt": "2018-11-26T15:25:23+08:00", "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/nginx-vol/_data", "Name": "nginx-vol", "Options": {}, "Scope": "local" } ]

volumes

用卷建立一個容器:
[[email protected] ~]# docker run -d --name=nginx-test1 --mount src=nginx-vol,dst=/usr/share/nginx/html -p 88:80 nginx:1.15
9d1d1fe4e0f189b8d66e7e6682ef725b441a355b7cb9e85ee62406249fcffd6d

[[email protected] ~]# cd /var/lib/docker/volumes/nginx-vol/_data --這裡的資料卷是和容器中的是一樣的內容
[[email protected]

_data]# ls
50x.html index.html
[[email protected] _data]# echo 'nginx1' > index.html

驗證:
[[email protected] _data]# curl 192.168.1.13:88
nginx1

注意:

  1. 如果沒有指定卷,自動建立。
  2. 建議使用--mount,更通用

Bind Mounts

用卷建立一個容器:指定type=bind --》這個是將宿主機上app/wwwroot 掛載到/usr/share/nginx/html 上
[[email protected] _data]# docker run -d -it --name=nginx-test --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html -p 88:80 nginx

驗證:
[[email protected] wwwroot]# curl 192.168.1.13:88
nginx1
進入到了該容器:
[email protected]:/# cd /usr/share/nginx/html/
[email protected]:/usr/share/nginx/html# ls
index.html

注意:

  1. 如果原始檔/目錄沒有存在,不會自動建立,會丟擲一個錯誤。
  2. 如果掛載目標在容器中非空目錄,則該目錄現有內容將被隱藏。

小結

Volume特點:

  • • 多個執行容器之間共享資料。
  • • 當容器停止或被移除時,該卷依然存在。
  • • 多個容器可以同時掛載相同的卷。
  • • 當明確刪除卷時,卷才會被刪除。
  • • 將容器的資料儲存在遠端主機或其他儲存上
  • • 將資料從一臺Docker主機遷移到另一臺時,先停止容器,然後備份卷的目錄(/var/lib/docker/volumes/)

Bind Mounts特點:

  • • 從主機共享配置檔案到容器。預設情況下,掛載主機/etc/resolv.conf到每個容器,提供DNS解析。
  • • 在Docker主機上的開發環境和容器之間共享原始碼。例如,可以將Maven target目錄掛載到容器中,每次在Docker主機
  • 上構建Maven專案時,容器都可以訪問構建的專案包。
  • • 當Docker主機的檔案或目錄結構保證與容器所需的繫結掛載一致時

容器網路

網路模式

bridge
–net=bridge
預設網路,Docker啟動後建立一個docker0網橋,預設建立的容器也是新增到這個網橋中。
• host
–net=host
容器不會獲得一個獨立的network namespace,而是與宿主機共用一個。這就意味著容器不會有自己的網絡卡資訊,而是使用宿主
機的。容器除了網路,其他都是隔離的。
• none
–net=none
獲取獨立的network namespace,但不為容器進行任何網路配置,需要我們手動配置。

• container   2個容器的網路可以通訊   
–net=container:Name/ID
與指定的容器使用同一個network namespace,具有同樣的網路配置資訊,兩個容器除了網路,其他都還是隔離的。
• 自定義網路
與預設的bridge原理一樣,但自定義網路具備內部DNS發現,可以通過容器名或者主機名容器之間網路通訊。

容器網路訪問原理

docker管理應用程式資料、容器網路

docker管理應用程式資料、容器網路

驗證:
注意系統必須指定 -it 不然啟動失敗
[[email protected] wwwroot]# docker run -itd --net=bridge --name=icar1 -h icar1 centos
90b9a40f6290e6136e438bab5dcbd2720ed1b2c0a7b9c6abaede64574d4831e8

[[email protected] wwwroot]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
90b9a40f6290 centos "/bin/bash" 4 seconds ago Up 3 seconds icar1
[[email protected] wwwroot]# docker exec -it 90b9a40f6290 bash