Docker容器系列文章|Docker技術入門(二)

Docker 對比 VMnginx

clipboard.png

Docker的網絡模式

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

分別是如下四種模式centos

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

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容器鏈接到一個虛擬網橋上。測試

運行容器

[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

隨機一個端口去自動映射80centos7

clipboard.png

參數說明spa

  • docker -P 隨機端口映射
  • docker -p 指定端口映射
  • -p hostport:containerport
  • -p ip:hostport:containerport

實例說明3d

[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

clipboard.png

能夠經過指定的端口來訪問啓動的容器服務

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

圖片描述

相關文章
相關標籤/搜索