Dockerhtml
Docker鏡像管理python
以前的文章,第一篇容器的搭建,第二篇DockerFile的介紹,今天講介紹docker的其餘輔助功能。web
倉庫是集中存放鏡像的地方,又分公共倉庫和私有倉庫。docker
1、Docker Hub公共鏡像市場數據庫
Docker Hub是Docker官方提供的最大的公共鏡像倉庫,目前包括了超過100 000的鏡像,地址爲:ubuntu
https://hub.docker.com/ 。具體的使用不介紹了。安全
2、Docker 搭建本地私有倉庫bash
1.使用registry 鏡像建立私有倉庫網絡
使用命令:docker run -d -p 5000:5000 registry:2app
默認狀況下,倉庫會被建立在容器的/var/lib/registry目錄下。能夠經過-v參數來將文件存放在本地的指定路徑。 命令:
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry regisrty:2而後對鏡像鏡像上傳,以Ubuntu爲例:
docker tag ubuntu:18.04 127.0.0.1:5000/test
使用命令進行上傳:
docker push 127.0.0.1:5000/test
問題:
Get https://registry-1.docker.io/v2/: net/http: request canceled (Client.Timeout exceeded while awaiting headers).
解決參考資料:
https://www.cnblogs.com/lkun/p/7990466.html
https://www.cnblogs.com/kangoroo/p/7994801.html
https://www.cnblogs.com/zeppelin/p/5906410.html
查看鏡像倉庫:
curl 127.0.0.1:5000/v2/search
2.下載鏡像
首先,修改Docker daemon的啓動參數,添加以下參數,表示信任這個私有倉庫,不進行安全證書檢查:
DOCKRE_OPTS="--insecure-registry 192.168.92.xxx:5000"
以後重啓Docker服務,並從私有倉庫中下載鏡像到本地:
service docker restart
docker pull 127.0.0.1:5000/test
Docker 數據管理
在生產環境中使用Docker,每每須要對數據進行持久化,或者須要在多個容器之間進行數據共享,這必然涉及容器的數據管理操做:
容器中的管理數據主要有兩種方式:
數據卷:容器內數據直接映射到本地主機環境。
數據卷容器:使用特定容器維護數據卷。
1、數據卷
數據卷是一個可供容器使用的特殊目錄,他將主機操做系統目錄直接映射進容器,相似於Linux中的mount行爲。
1.建立數據卷
Docker提供了volume子命令來管理數據卷,以下命令能夠快速在本地建立一個數據卷:
docker volume create -d local test
2.綁定數據卷
除了使用volume子命令來管理數據卷外。還能夠能夠在建立容器時將主機本地的任意路徑掛載到容器內做爲數據卷,這種形式建立的數據卷稱爲綁定數據卷。
在用docker run命令的時候,可使用-mount選項來使用數據卷。-mount選項的三種類型數據卷,包括:
volume:普通數據卷,映射到主機/var/lib/docker/volume路徑下。
bind:綁定數據卷,映射到主機指定路徑下。
tmpfs:臨時數據卷,只存在於內存中。
命令:
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry regisrty:2
2、數據卷容器
1.目的或者說是做用
若是用戶須要在多個容器之間共享一些持續更新的數據,最簡單的方式是使用數據卷容器。數據卷容器也是一個容器,可是它的目的是專門提供數據卷給其餘容器進行掛載。
2.建立和刪除
首先,建立一個數據卷容器dbdata,並在其中建立一個數據卷掛載到/dbdata:
docker run -it -v /dbdata --name dbdata ubuntu
進入容器,查看/dbdata目錄:
而後,能夠在其餘容器中使用 --volumes-from來掛載dbdata容器中的數據卷,例如:
docker run -it --volumes-from dbdata --name db1 ubuntu
docker run -it --volumes-from dbdata --name db2 ubuntu
此時,容器db1和db2都掛載同一個數據捲到相同的/dbdata目錄,三個容器如何一方,在該目錄下的寫入,其餘容器均可以看到。若是刪除了掛載的容器,數據卷並不會被自動刪除。若是要刪除一個數據卷,必須在刪除最後一個還掛載着它的容器時顯式使用docker rm -v 命令來指定同時刪除關聯的容器。
3.使用場景
能夠利用數據捲來對其中的數據進行備份,恢復,以實現數據的遷移。
3.1 備份
docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu cvf /backup/backup.tar /dbdata
3.2恢復
首先建立一個帶有數據卷的容器dbdata2:
docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
而後建立另外一個新的容器,掛載dbdata2的容器,並使用untar解壓備份文件到所掛載的容器卷中:
docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
端口映射與容器互聯
1、端口映射實現容器訪問
1.從外部訪問容器
當容器中運行一些網絡應用,要讓外部訪問這些容器應用的時候,能夠經過 -p 或 -P 參數來指定端口映射。當使用-P大寫的標記時,Docker會隨機映射一個49000~49900的端口。具體的使用,將不進行介紹,這個很簡單。
2、互聯機制實現便捷互訪
容器的互聯是一種讓多個容器中的應用進行快速交互的方式。它會在源和接收容器之間創建鏈接關係,接收容器能夠經過容器名快速訪問到源容器,而不用指定具體的IP地址。
1.自定義容器命名
目的是:一是好記,二是當要鏈接其餘容器時候,也可使用容器名稱而不用改變。
使用 --name 標記能夠爲容器自定義命名。
2.容器互聯
使用-- link 參數可讓容器之間安全地進行交互。
先建立一個新的數據庫容器:
docker run -d --name db training/postgres
而後建立一個新的web容器,並將它鏈接到db容器:
docker run -d -P --name web --link db:db training/webapp python app.py
此時,db容器和web容器創建了互聯關係。
--link參數的格式爲--link name:alias,其中name是要連接的容器的名稱,alias是別名。
Docker至關於在兩個互聯的容器之間建立了一個虛擬機通道,並且不用映射它們的端口到宿主機上。在啓動db容器的時候並無使用-p 或-P標記,從而避免了暴露數據庫服務端口到外部網絡上。
Docker經過兩種方式爲日期公開鏈接信息:一是更新環境變量,二是更新/etc/hosts文件。
使用env命令來查看web容器的環境變量:
docker run --rm --name web2 --link db:db training/webapp env
其中DB_開頭的環境變量是供web容器鏈接db容器使用,前綴採用大寫的鏈接別名。
除了環境變量,docker還添加host信息到父容器的/etc/hosts的文件。
docker run -t -i --rm --link db:db training/webapp /bin/bash
這裏有2個hosts信息,第一個是web容器,web容器用本身的id做爲默認主機名,第二個是db容器的IP和主機名。能夠在web容器中安裝ping命令來測試跟db容器的連通:
apt-get install -yqq inetutils-ping
ping db
繁榮Aaron
技術/英語/雜談
長按二維碼關注咱們