【容器技術】Docker容器技術入門(二)

【容器技術】Docker容器技術入門(二)nginx

收錄於話題
#Docker 專輯
9個

【容器技術】Docker容器技術入門(二)

接上一篇文章
【容器技術】Docker容器技術入門(一)
【容器技術】Docker容器技術入門(二)
今天接着上次聊一聊有關Docker網絡、數據存儲相關的技術點


面試

01 Docker網絡模式

Dokcer 經過使用 Linux 橋接提供容器之間的通訊,Docker的網絡模式有四種
分別是如下四種模式
docker

host 模式,使用--net=host 指定。
container 模式,使用--net=container:NAMEorID 指定。
none 模式,使用--net=none 指定。
bridge 模式,使用--net=bridge 指定,默認配置


centos

host 模式

若是容器使用 host 模式,那麼容器將不會得到一個獨立的 Network Namespace,而是和宿主機共用一個 Network Namespace。容器將不會虛擬出本身的網卡與配置 IP 等,而是使用宿主機的 IP 和端口。就和直接跑在宿主機中同樣。可是容器的文件系統、進程列表等仍是和宿主機隔離的。bash

container 模式

這個模式指定新建立的容器和已經存在的一個容器共享一個 Network Namespace,而不是和宿主機共享。新建立的容器不會建立本身的網卡與配置 IP,而是和一個指定的容器共享 IP、端口範圍等。一樣,兩個容器除了網絡方面,其餘方面仍然是隔離的。網絡

none模式

此模式不一樣於前兩種,Docker 容器有本身的 Network Namespace,可是,Docker容器沒有任何網絡配置。而是須要咱們手動給 Docker容器添加網卡、配置 IP 等。tcp

bridge 模式

此模式是Docker默認的網絡設置,此模式會爲每個容器分配Network Namespace,並將一個主機上的Docker容器鏈接到一個虛擬網橋上。ide

02 運行容器

[root@centos7 ~]# docker run -d -P nginx  #-d啓動到後臺運行
6135db66a7d7c1237901a79974f88f1079b3d467c14ce83fc46bc6b4eb8b3240
[root@centos7 ~]# docker ps
CONTAINER ID  IMAGE  COMMAND    CREATED   STATUS   PORTS   NAMES
6135db66a7d7   nginx   "nginx -g 'daemon off"   33 seconds ago  Up 31 seconds   0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp   gigantic_meitner

隨機一個端口去自動映射80
【容器技術】Docker容器技術入門(二)
參數說明

工具

docker -P 隨機端口映射
docker -p 指定端口映射
-p hostport:containerport
-p ip:hostport:containerport
實例說明



測試

[root@centos7 ~]# docker run -d -p 81:80 nginx
3ca9f847bebec3684952b0f2c081d31f84b9489de50b635246d9a592cc06d46c
[root@centos7 ~]# docker ps
CONTAINER ID   IMAGE   COMMAND  CREATED   STATUS   PORTS   NAMES
3ca9f847bebe  nginx  "nginx -g 'daemon off"  8 seconds ago   Up 6 seconds  443/tcp, 0.0.0.0:81->80/tcp  goofy_mcnulty

【容器技術】Docker容器技術入門(二)
能夠經過指定的端口來訪問啓動的容器服務

03 Docker數據存儲

docker管理數據的方式有兩種:

數據卷
數據卷容器
數據卷
數據卷是一個或多個容器專門指定繞過Union File System的目錄,爲持續性或共享數據提供一些有用的功能:
數據卷能夠在容器間共享和重用
數據卷數據改變是直接修改的
數據卷數據改變不會被包括在容器中
數據卷是持續性的,直到沒有容器使用它們
參數說明
-v /data直接將數據目錄掛載到容器/data目錄
-v src:dst 將物理機目錄掛載到容器目錄
實例操做
[```
root@centos7 ~]# docker run -it --name test-001 -v /data centos
[root@4578675314b9 /]# ls -l /data/
total 0
[root@centos7 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4578675314b9 centos "/bin/bash" 2 minutes ago Up 2 minutes test-001
[root@centos7 ~]# docker inspect 4578675314b9
"Mounts": [
{
"Name": "ab2f85f900a68813c4fdbf3b0fe88242247e7e8320bb75035b1367ab82804115",
"Source": "/var/lib/docker/volumes/ab2f85f900a68813c4fdbf3b0fe88242247e7e8320bb75035b1367ab82804115/_data",
"Destination": "/data", ##能夠看出是將容器中的存儲目錄掛載到/data
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
[root@centos7 ~]# cd /var/lib/docker/volumes/ab2f85f900a68813c4fdbf3b0fe88242247e7e8320bb75035b1367ab82804115/_data ###這是物理機的目錄
[root@centos7 _data]# ll
total 0
[root@centos7 _data]# mkdir test

































容器裏查看數據
[root@4578675314b9 /]# cd /data/  ###這個是容器裏的目錄
[root@4578675314b9 data]# ll
total 0
drwxr-xr-x 2 root root 6 Apr 10 08:54 test

能夠看出容器的數據目錄下一樣存在剛剛物理機建立的test目錄

一樣還可使用下面的方法掛載
docker run -it -v /data1:/mnt centos
#前者是物理機目錄(掛載成功自動在物理機上建立此目錄)後者是容器目錄

[root@centos7 ~]# docker run -it -v /data1:/mnt centos
[root@425569ce9eef /]# cd /mnt/
[root@425569ce9eef mnt]# ll
total 0
[root@centos7 ~]# cd /data1/
[root@centos7 data1]# echo "hello">test.txt
[root@centos7 data1]# ll
total 4
-rw-r--r-- 1 root root 6 Apr 10 17:09 test.txt
[root@centos7 data1]# cat test.txt
hello

檢查容器目錄是否有文件與內容

[root@425569ce9eef mnt]# ll
total 4
-rw-r--r-- 1 root root 6 Apr 10 09:09 test.txt
[root@425569ce9eef mnt]# cat test.txt 
hello
[root@425569ce9eef mnt]# pwd
/mnt
[root@425569ce9eef mnt]# hostname
425569ce9eef

此種方法適合開發代碼管理,代碼目錄直接掛載到容器中,修改WEB站點目錄便可訪問

docker run -it -v /data2:/opt:ro centos
#指定只讀權限進行掛載
docker run -it -v /data2:/opt:rw centos
#指定讀寫權限進行掛載
docker run -it -v /root/file1:file1 centos
#掛載單個文件到容器目錄




容器卷的方式

--volumes-from #使用其它容器的目錄
[root@centos7 ~]# docker run -d --name mydocker -v /data centos  
4f243ada709ee87d8f1e50bf13ab225c8dfd6b38f7dad97fa84ab0cb3d7d517b
[root@centos7 ~]# docker run -it --name mynfs --volumes-from mydocker centos
[root@82a489adb07a /]# ll /data/
total 0

此時進入mydocker容器/data目錄寫入數據進行測試

[root@centos7~]# cd /var/lib/docker/volumes/8421a48b58337a30ac4750c06748e01a3f328bdc2fa3b945d7f9737d9bc1b002/_data
[root@centos7 _data]# ls
[root@centos7 _data]# echo "welcome to here">file
[root@centos7 _data]# ll
total 4
-rw-r--r-- 1 root root 16 Apr 10 17:34 file

再查看剛剛的容器中是否有數據

[root@82a489adb07a /]# hostname
82a489adb07a
[root@82a489adb07a /]# cd /data/
[root@82a489adb07a data]# ll
total 4
-rw-r--r-- 1 root root 16 Apr 10 09:34 file
[root@82a489adb07a data]# cat file 
welcome to here

推薦閱讀
[強烈推薦] 精心整理|公衆號文章目錄大全
[容器技術] Docker容器技術入門(一)
[管理工具]進程管理工具Supervisor(送書活動)
[職業規劃]圖解菜鳥到大拿實現財務自由之路
[資源分享]史上最全的技術類視頻資源在這裏
[聊聊面試]「金三銀四」的折騰之聊一聊面試
[人生感悟]或許這些你會感興趣??
[有問必答]民工哥 「有問必答」 專欄開通,歡迎來撩
【容器技術】Docker容器技術入門(二)

相關文章
相關標籤/搜索