Docker的基本概念和操作

1        概論

1.1 定義

“build once, configure once and run anywhere”。

Docker是一個開源的引擎,可以輕鬆的爲任何應用創建一個輕量級的、可移植的、自給自足的容器。

虛擬化技術包括硬件級虛擬化(如VMWare、VirtualBox、AWS、阿里雲等)和操作系統級虛擬化(如Docker)。

Docker是操作系統虛擬化(容器化)技術中目前最流行的一種實現。

1.2 應用場景

Docker通常用於如下場景:

Ø        web應用的自動化打包和發佈;

Ø        自動化測試和持續集成、發佈;

Ø        在服務型環境中部署和調整數據庫或其他的後臺應用;

Ø        從頭編譯或者擴展現有的OpenShift或Cloud Foundry平臺來搭建自己的PaaS環境。

Docker能處理的事情包括:

Ø        隔離應用依賴

Ø        創建應用鏡像並進行復制

Ø        創建容易分發的即啓即用的應用

Ø        允許實例簡單、快速地擴展

Ø        測試應用並隨後銷燬它們

2        基礎概念

2.1 Docker鏡像

類似虛擬機的快照,是自定義一套的操作系統環境。

創建鏡像有兩種方式:

Ø        從公共Docker倉庫裏選擇一個鏡像在其基礎上修改(常用)。

Ø        自己創建(後續詳解)。

2.2 Docker倉庫

Docker倉庫用於保存鏡像, Docker 倉庫分爲公有和私有倉庫。公有的 Docker 倉庫名字爲Docker Hub,提供了大量的鏡像集合供使用。

2.3 Docker容器

使用鏡像創建Docker容器,可以理解爲鏡像的一個實例,容器裏可以運行應用。容器可以對外開放服務端口。

容器是設計來運行一個應用的,而非一臺機器。停止一個Docker容器,對初始狀態(創建容器所用的鏡像的狀態)做的所有變化都會丟失,所以業務數據不能存儲在容器裏,容器只是運行應用的環境。

Docker設計者極力推崇“一個容器一個進程的方式”,容器被設計用來運行單進程,無法很好地模擬一個完整的環境(如需模擬完整環境則參閱LXC)。

當容器被啓動後,一個讀寫層會被添加到鏡像的頂層。當分配到合適的網絡和IP地址後,需要的應用程序就可以在容器中運行了。

2.4 數據卷

數據卷使得開發者可以不受容器生命週期影響而進行數據持久化。它們表現爲容器內的空間,但實際數據保存在容器之外,從而允許我們在不影響數據的情況下銷燬、重建、修改、丟棄容器。

Docker允許定義應用部分和數據部分,並提供工具可以將它們分開。使用Docker時必須做出的最大思維變化之一就是:容器應該是短暫和一次性的。

卷是針對容器的,可以使用同一個鏡像創建多個容器並定義不同的卷。卷保存在運行Docker的宿主文件系統上,可以指定卷存放的目錄,或讓Docker保存在默認位置。保存在其他類型文件系統上的都不是一個卷。卷還可以用來在容器間共享數據。

2.5 鏈接

Docker允許在創建一個新容器時引用其它現存容器,在剛創建的容器裏被引用的容器將獲得一個別名,則視爲這兩個容器鏈接在了一起。

容器啓動時,將被分配一個隨機的私有IP,其它容器可以使用這個IP地址與其進行通訊。這點非常重要,原因有二:一是它提供了容器間相互通信的渠道,二是容器將共享一個本地網絡。

3        安裝(CentOS 7)

參考:https://docs.docker.com/engine/installation/linux/centos/

3.1 前置條件

安裝Docker需要64位的內核爲3.10或以上的Linux系統。

可使用以下命令查看內核:

# uname -r

輸出如:3.10.0-229.el7.x86_64

3.2 通過yum安裝

3.2.1  更新yum軟件包到最新版本

# yum update

3.2.2  添加docker yum repo

# vi /etc/yum.repos.d/docker.repo

[dockerrepo]

name=Docker Repository

baseurl=https://yum.dockerproject.org/repo/main/centos/7/

enabled=1

gpgcheck=1

gpgkey=https://yum.dockerproject.org/gpg

3.2.3  安裝

# yum install -y docker-engine

3.2.4  啓用服務

# systemctl enable docker.service

3.2.5  啓動

# systemctl start docker

3.2.6  驗證

# docker run --rm hello-world

docker將自動下載hello-world:latest鏡像,下載完成後運行結果包含:

Hello from Docker!

This message shows that your installation appears to beworking correctly.

則表示docker已正確安裝。

3.3 通過官方腳本安裝

下載官方的docker安裝腳本進行安裝,本質上也是通過yum安裝,步驟與yum安裝類似。

# yum update

# curl -fsSL https://get.docker.com/ | sh

# systemctl enable docker.service

# systemctl start docker

# docker run --rm hello-world

3.4 創建docker group

Docker的守護進程啓動後會爲名稱爲docker的用戶組下的用戶賦予Unix Socket的讀寫權限,有需要的話可以創建docker用戶組。

4        鏡像操作

在使用 docker 的時候,首先需要拉取鏡像,然後再通過一個容器來運行這個鏡像。通過鏡像是可以生成容器的。同時,當容器運行到一個時間的時候,我們也可以通過 docker commit,將容器的可讀可寫層轉化爲鏡像。因此,鏡像和容器是相生相伴的,缺一不可的。

本節以下載ubuntu鏡像爲例。

4.1 查看本機鏡像

# docker images

4.2 搜索鏡像

# docker search <鏡像名關鍵詞>

4.3 下載鏡像

# docker pull ubuntu

docker pull 會默認從 docker hub 拉取鏡像,如果本地已經有了就直接結束,否則的話會根據文件系統分層逐個下載。

4.4 push鏡像到遠程庫

4.4.1       tag鏡像

# docker tag <鏡像名稱[:TAG]> <要標記成的鏡像名稱[:TAG]>

如:

# docker tag ubuntu my-ubuntu-tag

4.4.2       push

# docker push <標記成鏡像名稱[:TAG]>

4.5 刪除鏡像

# docker rmi <要刪除的鏡像名稱>

5        容器操作

5.1 從鏡像運行一個含shell的容器

# docker run -i -t <鏡像名稱> /bin/bash

如:

# docker run -i -t ubuntu /bin/bash

5.2 查看運行的容器

# docker ps

運行容器後,可通過該命令查看到運行的容器的信息,如ID:f70b2a474d88。

5.3 容器的啓停

包括啓動、停止、重啓、強行停止和刪除。

# docker start f70b2a474d88

# docker stop f70b2a474d88

# docker restart f70b2a474d88

# docker kill f70b2a474d88

# docker remove f70b2a474d88

5.4 持久化容器

容器在退出後並不會更改鏡像,如果希望保存容器中的數據,就需要通過 commit 來保存成鏡像

# docker commit <容器ID> <要保存成的鏡像名>

如:

# docker commit f70b2a474d88 my-ubunt-checkpoint

5.5 查看容器配置

# docker inspect <容器ID>

6        參考

官網:https://www.docker.com/

http://www.docker.org.cn/book/docker/what-is-docker-16.html

http://yuedu.baidu.com/ebook/d817967416fc700abb68fca1?pn=1

http://archive.ghostcloud.cn/docker%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A-%E5%85%A5%E9%97%A8%E7%AF%87.pdf

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章