docker核心概念(鏡像、容器、倉庫)及基本操做

概要

    docker是一種linux容器技術。容器有效的將由單個操做系統掛管理的資源劃分到孤立的組中,以便更好的在組之間平衡有衝突的資源使用需求。可簡單理解爲一種沙盒 。每一個容器內運行一個應用,不一樣的容器之間相互隔離,容器之間也能夠創建通訊機制。容器的建立和中止都十分快速,資源需求遠遠低於虛擬機。 linux

    

好處 docker

    能高效地構建應用。 ubuntu

    對於運維開發來講, centos

    能快速的交付和部署 api

    高效的資源利用 安全

    輕鬆的遷移擴展 bash

    簡單的更新管理 服務器

    

與虛擬機的比較 網絡

 

docker與虛擬化 運維

    虛擬化是一種資源管理技術,是將計算機的各類實體資源,如服務器,網絡,內存等抽象、轉化後呈現出來,使用戶以更好的方式來應用這些資源。虛擬化目標每每是爲了在同一個主機上運行多個系統或者應用,從而提升資源的利用率,下降成本,方便管理及容錯容災。

操做系統級的虛擬化:內核經過建立多個虛擬的操做系統實例(內核和庫)來隔離不一樣的進程。docker以及其餘容器技術就屬於此範疇。

 

傳統虛擬化方式是在硬件層面實現虛擬化,須要有額外的虛擬機管理應用和虛擬機操做系統層。而docker容器是在操做系統層面上實現虛擬化,直接複用本地主機操做系統,更加輕量。

 

docker核心概念

鏡像(Image)

容器(Container)

倉庫(Repository)

 

鏡像:相似虛擬機鏡像

容器:相似linux系統環境,運行和隔離應用。容器從鏡像啓動的時候,docker會在鏡像的最上一層建立一個可寫層,鏡像自己是隻讀的,保持不變。

倉庫:每一個倉庫存放某一類鏡像。

 

容器、倉庫、鏡像運行關係圖:

 

docker的安裝以及鏡像,容器,倉庫的基本操做

 

docker的安裝(centos7中能夠直接yum安裝)

    yum install –y docker

更新須要自行經過源碼安裝,或者下載二進制文件安裝。

 

鏡像

# 搜索鏡像

docker search <image> # 在docker index中搜索image

    --automated=false 僅顯示自動建立的鏡像

    --no-trunc=false 輸出信息不截斷顯示

    -s 0 指定僅顯示評價爲指定星級的鏡像

 

# 下載鏡像

docker pull <image> # 從docker registry server 中下拉image

還可經過指定標籤下載某鏡像

    docker pull [:TAG]

    docker pull centos:7

 

# 查看鏡像/刪除

docker images: # 列出images

docker images -a # 列出全部的images(包含歷史)

docker ps -a #列出本機全部容器

docker rmi <image ID>: # 刪除一個或多個image

 

# 存出和載入鏡像

    存出本地鏡像文件爲.tar

    docker save -o ubuntu_14.04.tar ubuntu:14.04

    導入鏡像到本地鏡像庫

    docker load --input ubuntu_14.04.tar或者

    docker load < ubuntu_14.04.tar

 

# 上傳鏡像

    用戶在dockerhub網站註冊後,便可上傳自制的鏡像。

    docker push NAME[:TAG]

 

容器

    容器是鏡像的一個運行實例,不一樣的是它帶有額外的可寫層。

    可認爲docker容器就是獨立運行的一個或一組應用,以及它們所運行的必需環境。

    

# 建立(使用鏡像建立容器):

    首先得查看鏡像的REPOSITORY和TAG

docker run -i -t REPOSITORY:TAG (等價於先執行docker create 再執行docker start 命令)

其中-t選項讓docker分配一個僞終端並綁定到容器的標準輸入上, -i則讓容器的標準輸入保持打開。若要在後臺以守護態(daemonized)形式運行,可加參數-d

 

在執行docker run來建立並啓動容器時,後臺運行的標準包括:

  • 檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載
  • 利用鏡像建立並啓動一個容器
  • 分配一個文件系統,並在只讀的鏡像層外面掛載一層可讀可寫層
  • 從宿主機配置的網橋接口中橋接一個虛擬接口到容器
  • 從地址池配置一個ip地址給容器
  • 執行用戶指定的應用程序
  • 執行完畢後容器被終止

     

docker start/stop/restart <container> #:開啓/中止/重啓container

 

# 進入容器:

docker attach [container_id] #鏈接一個正在運行的container實例(即實例須爲start狀態,能夠多個 窗口同時attach 一個container實例),但當某個窗口因命令阻塞時,其它窗口也沒法執行了。

 

exec可直接在容器內運行的命令。docker exec -ti [container_id] /bin/bash

 

# 刪除容器:

docker rm <container...> #:刪除一個或多個container

docker rm `docker ps -a -q` #:刪除全部的container

docker ps -a -q | xargs docker rm #:同上, 刪除全部的container

 

docker -rm

    -f 強制停止並運行的容器

    -l 刪除容器的鏈接,但保留容器

    -v 刪除容器掛載的數據卷

    

# 修改容器:

docker commit <container> [repo:tag] # 將一個container固化爲一個新的image,後面的repo:tag可選。

 

# 導入和導出容器:

    導出到一個文件,無論是否處於運行狀態。

    docker export CONTAINER > test.tar

    

    導入爲鏡像:

cat test.tar | docker import - centos:latest

 

倉庫

    倉庫是集中存放鏡像的地方。每一個服務器上能夠有多個倉庫。

    倉庫又分爲公有倉庫(DockerHub、dockerpool)和私有倉庫

 

DockerHub:docker官方維護的一個公共倉庫https://hub.docker.com,其中包括了15000多個的鏡像,大部分均可以經過dockerhub直接下載鏡像。也可經過docker search和docker pull命令來下載。

DockerPool:國內專業的docker技術社區,http://www.dockerpool.com也提供官方鏡像的下載。

 

docker私有倉庫的搭建:

192.168.2.189 倉庫

192.168.2.201 客戶端

1.先拉取registry鏡像(用來啓動倉庫)和busybox鏡像(用來上傳)

docker pull registry

docker pull busybox

我這裏下載的是registry 2

 

2.使用docker tag命令將這個鏡像標記爲192.168.2.189:5000/busybox

docker tag IMAGR[:TAG] NAME[:TAG]

docker tag docker.io/busybox 192.168.2.189:5000

 

3.修改docker配置文件,增長參數 --insecure-registry=192.168.2.189:5000

此處的參數指定爲非安全模式,也就是http而不是https,而後重啓docker服務。

 

4.建立registry容器並啓動

docker run -d -p 5000:5000 --privileged=true -v /myregistry:/var/lib/registry registry

–privileged=true :CentOS7中的安全模塊selinux把權限禁掉了,參數給容器加特權,不加上傳鏡像會報權限錯誤(OSError: [Errno 13] Permission denied: '/tmp/registry/repositories/liibrary')或者(Received unexpected HTTP status: 500 Internal Server Error)錯誤

-v選項指定將/myregistry/目錄掛載給/var/lib/registry/,/tmp/registry是registry版本1的倉庫目錄。

/myregistry爲本地建立的目錄。

 

5.把本地標記的鏡像push到倉庫

docker push 192.168.2.189:5000/busybox

 

6.查看本地目錄/myregistry以及在客戶端上pull剛纔push的鏡像

客戶端在pull以前也須要修改配置文件指定倉庫,也和上面同樣添加參數--insecure-registry=192.168.2.189:5000,而後重啓docker。

 

7.也能夠經過registry v2 api來查看push的鏡像是否存在於倉庫

GET /v2/_catalog檢索列出全部存儲庫(Listing Repositories),也就是存儲在庫中的鏡像。     

相關文章
相關標籤/搜索