Docker部署文檔

Docker部署文檔
目錄
Docker部署文檔 1
一、什麼是Docker 3
1.1Docker簡介 3
1.2對比傳統虛擬機總結 4
1.3Docker通常用於如下場景: 5
1.4基本概念 5
Docker 鏡像 5
Docker 容器 6
Docker Registry 7
二、Docker原理 9
三、安裝Docker 9
3.1Centos系統要求 9
3.2在安裝前卸載舊的版本 10
3.3安裝Docker 10
3.3.1使用Docker官方腳本自動安裝 10
3.3.2阿里雲方式安裝 11
3.3.3DaoCloud 的安裝腳本 13
3.3.4yum安裝 13
3.4啓動 Docker 引擎 13
3.5建立Docker用戶組 14
四、Docker加速器 14
3.1常用Docker加速器 14
3.2Centos7配置Docker加速器 15
3.3重新加載配置並且重新啓動。 15
3.4檢查加速器是否生效 15
3.5Docker加速器地址 15
五、登錄退出Docker Hub 15
登錄docker login 15
退出Docker Hub 16
六、Docker鏡像使用 16
6.1查看docker版本 16
6.1.1使用docker version查看版本信息 16
6.1.2使用docker -v查看版本信息 16
6.2搜索並獲取鏡像 17
6.2.1使用docker search搜索可用的docker鏡像 17
6.2.2使用docker pull命令獲取鏡像 17
6.3列出當前鏡像列表 19
6.3.1使用docker images命令查看 19
6.3.2列出部分鏡像 20
6.3.3查看鏡像摘要 20
6.4刪除本地鏡像 20
6.4.1docker rmi語法: 20
6.4.2使用鏡像名刪除本地鏡像 21
6.4.3使用ID刪除本地鏡像 22
6.4.4使用鏡像摘要刪除本地鏡像 22
七、操作容器 22
7.1列出所有運行中的容器 22
7.2創建啓動容器 23
7.2.1啓動容器的兩種方式 23
7.2.2新建容器 24
7.2.3新建並啓動容器 24
7.3暫停終止容器 27
7.4重啓暫停的容器 28
7.5刪除容器 29
六、安裝Docker Rancher 29
6.0 Docker Hub鏡像獲取方法 29
6.1 快速安裝Docker rancher 29
6.2 查看是否正常啓動docker rancher 30
6.3Web訪問Docker Rancher 30
6.4配置部署Rancher 31
6.4.1添加主機 31
5.4.2添加鏡像庫 33

一、什麼是Docker
1.1Docker簡介
Docker 最初是 dotCloud 公司創始人 Solomon Hykes 在法國期間發起的一個公司 內部項目,它是基於 dotCloud 公司多年雲服務技術的一次革新,並於 2013 年 3 月以 Apache 2.0 授權協議開源),主要項目代碼在 GitHub 上進行維護。Docker 項 目後來還加入了 Linux 基金會,併成立推動開放容器聯盟。
Docker 自開源後受到廣泛的關注和討論,至今其 GitHub 項目已經超過 3 萬 6 千個 星標和一萬多個 fork。甚至由於 Docker 項目的火爆,在 2013 年底,dotCloud 公 司決定改名爲 Docker。Docker 最初是在 Ubuntu 12.04 上開發實現的;Red Hat 則 從 RHEL 6.5 開始對 Docker 進行支持;Google 也在其 PaaS 產品中廣泛應用 Docker。
Docker 使用 Google 公司推出的 Go 語言 進行開發實現,基於 Linux 內核的 cgroup,namespace,以及 AUFS 類的 Union FS 等技術,對進程進行封裝隔離, 屬於操作系統層面的虛擬化技術。由於隔離的進程獨立於宿主和其它的隔離的進 程,因此也稱其爲容器。最初實現是基於 LXC,從 0.7 以後開始去除 LXC,轉而使 用自行開發的 libcontainer,從 1.11 開始,則進一步演進爲使用 runC 和 containerd。
Docker 在容器的基礎上,進行了進一步的封裝,從文件系統、網絡互聯到進程隔 離等等,極大的簡化了容器的創建和維護。使得 Docker 技術比虛擬機技術更爲輕 便、快捷。
下面的圖片比較了 Docker 和傳統虛擬化方式的不同之處。傳統虛擬機技術是虛擬 出一套硬件後,在其上運行一個完整操作系統,在該系統上再運行所需應用進程; 而容器內的應用進程直接運行於宿主的內核,容器內沒有自己的內核,而且也沒有進行硬件虛擬。因此容器要比傳統虛擬機更爲輕便。

1.2對比傳統虛擬機總結
特性 容器 虛擬機
啓動 秒級 分鐘級
硬盤使用 一般爲 MB 一般爲 GB
性能 接近原生 弱於
系統支持量 單機支持上千個容器 一般幾十個
Docker是一個開源的引擎,可以輕鬆的爲任何應用創建一個輕量級的、可移植的、自給自足的容器。開發者在筆記本上編譯測試通過的容器可以批量地在生產環境中部署,包括VMs(虛擬機)、bare metal、OpenStack 集羣和其他的基礎應用平臺。
1.3Docker通常用於如下場景:
• web應用的自動化打包和發佈;
• 自動化測試和持續集成、發佈;
• 在服務型環境中部署和調整數據庫或其他的後臺應用;
• 從頭編譯或者擴展現有的OpenShift或Cloud Foundry平臺來搭建自己的PaaS環境。
1.4基本概念
Docker 包括三個基本概念
鏡像(lmage)
容器(Container)
倉庫(Repository)
理解了這三個概念,就理解了Docker的整個生命週期
Docker 鏡像
我們都知道,操作系統分爲內核和用戶空間。對於 Linux 而言,內核啓動後,會掛載 root 文件系統爲其提供用戶空間支持。而 Docker 鏡像(Image) ,就相當於是一個 root 文件系統。比如官方鏡像 ubuntu:14.04 就包含了完整的一套Ubuntu 14.04 最小系統的 root 文件系統。
Docker 鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等) 。鏡像不包含任何動態數據,其內容在構建之後也不會被改變。
分層存儲
因爲鏡像包含操作系統完整的 root 文件系統,其體積往往是龐大的,因此在Docker 設計時,就充分利用 Union FS 的技術,將其設計爲分層存儲的架構。所以嚴格來說,鏡像並非是像一個 ISO 那樣的打包文件,鏡像只是一個虛擬的概念,其實際體現並非由一個文件組成,而是由一組文件系統組成,或者說,由多層文件系統聯合組成。
鏡像構建時,會一層層構建,前一層是後一層的基礎。每一層構建完就不會再發生改變,後一層上的任何改變只發生在自己這一層。比如,刪除前一層文件的操作,實際不是真的刪除前一層的文件,而是僅在當前層標記爲該文件已刪除。在最終容器運行的時候,雖然不會看到這個文件,但是實際上該文件會一直跟隨鏡像。因此,在構建鏡像的時候,需要額外小心,每一層儘量只包含該層需要添加的東西,任何額外的東西應該在該層構建結束前清理掉。
分層存儲的特徵還使得鏡像的複用、定製變的更爲容易。甚至可以用之前構建好的鏡像作爲基礎層,然後進一步添加新的層,以定製自己所需的內容,構建新的鏡像。
關於鏡像構建,將會在後續相關章節中做進一步的講解。
Docker 容器
鏡像(Image) 和容器(Container) 的關係,就像是面向對象程序設計中的 類 和 實例 一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啓動、停止、刪除、暫停等。
容器的實質是進程,但與直接在宿主執行的進程不同,容器進程運行於屬於自己的獨立的 命名空間。因此容器可以擁有自己的 root 文件系統、自己的網絡配置、自己的進程空間,甚至自己的用戶 ID 空間。容器內的進程是運行在一個隔離的環境裏,使用起來,就好像是在一個獨立於宿主的系統下操作一樣。這種特性使得容器封裝的應用比直接在宿主運行更加安全。也因爲這種隔離的特性,很多人初學Docker 時常常會把容器和虛擬機搞混。
前面講過鏡像使用的是分層存儲,容器也是如此。每一個容器運行時,是以鏡像爲基礎層,在其上創建一個當前容器的存儲層,我們可以稱這個爲容器運行時讀寫而準備的存儲層爲容器存儲層。
容器存儲層的生存週期和容器一樣,容器消亡時,容器存儲層也隨之消亡。因此,任何保存於容器存儲層的信息都會隨容器刪除而丟失。按照 Docker 最佳實踐的要求,容器不應該向其存儲層內寫入任何數據,容器存儲層要保持無狀態化。所有的文件寫入操作,都應該使用 數據卷(Volume) 、或者綁定宿主目錄,在這些位置的讀寫會跳過容器存儲層,直接對宿主(或網絡存儲)發生讀寫,其性能和穩定性更高。
數據卷的生存週期獨立於容器,容器消亡,數據卷不會消亡。因此,使用數據卷後,容器可以隨意刪除、重新 run ,數據卻不會丟失。
Docker Registry
鏡像構建完成後,可以很容易的在當前宿主上運行,但是,如果需要在其它服務器上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務,Docker Registry就是這樣的服務。
一個 Docker Registry 中可以包含多個倉庫(Repository) ;每個倉庫可以包含多個標籤(Tag) ;每個標籤對應一個鏡像。通常,一個倉庫會包含同一個軟件不同版本的鏡像,而標籤就常用於對應該軟件的各個版本。我們可以通過 <倉庫名>:<標籤> 的格式來指定具體是這個軟件哪個版本的鏡像。如果不給出標籤,將以 latest 作爲默認標籤。以 Ubuntu 鏡像 爲例, ubuntu 是倉庫的名字,其內包含有不同的版本標籤,如, 14.04 , 16.04 。我們可以通過 ubuntu:14.04 ,或者 ubuntu:16.04來具體指定所需哪個版本的鏡像。如果忽略了標籤,比如 ubuntu ,那將視爲ubuntu:latest 。
倉庫名經常以 兩段式路徑 形式出現,比如 jwilder/nginx-proxy ,前者往往意味着 Docker Registry 多用戶環境下的用戶名,後者則往往是對應的軟件名。但這並非絕對,取決於所使用的具體 Docker Registry 的軟件或服務。
Docker Registry 公開服務
Docker Registry 公開服務是開放給用戶使用、允許用戶管理鏡像的 Registry 服務。一般這類公開服務允許用戶免費上傳、下載公開的鏡像,並可能提供收費服務供用戶管理私有鏡像。
最常使用的 Registry 公開服務是官方的 Docker Hub,這也是默認的 Registry,並擁有大量的高質量的官方鏡像。除此以外,還有 CoreOS 的 Quay.io,CoreOS 相關的鏡像存儲在這裏;Google 的 Google Container Registry,Kubernetes 的鏡像使用的就是這個服務。
由於某些原因,在國內訪問這些服務可能會比較慢。國內的一些雲服務商提供了針對 Docker Hub 的鏡像服務(Registry Mirror) ,這些鏡像服務被稱爲加速器。常見的有 阿里雲加速器、DaoCloud 加速器、靈雀雲加速器等。使用加速器會直接從國倉庫的地址下載 Docker Hub 的鏡像,比直接從官方網站下載速度會提高很多。在後面的章節中會有進一步如何配置加速器的講解。
國內也有一些雲服務商提供類似於 Docker Hub 的公開服務。比如 時速雲鏡像倉庫、網易雲鏡像服務、DaoCloud 鏡像市場、阿里雲鏡像庫等。
私有 Docker Registry
除了使用公開服務外,用戶還可以在本地搭建私有 Docker Registry。Docker 官方提供了 Docker Registry 鏡像,可以直接使用做爲私有 Registry 服務。在後續的相關章節中,會有進一步的搭建私有 Registry 服務的講解。
開源的 Docker Registry 鏡像只提供了 Docker Registry API 的服務端實現,足以支持 docker 命令,不影響使用。但不包含圖形界面,以及鏡像維護、用戶管理、訪問控制等高級功能。在官方的商業化版本 Docker Trusted Registry 中,提供了這些高級功能。
除了官方的 Docker Registry 外,還有第三方軟件實現了 Docker Registry API,甚至提供了用戶界面以及一些高級功能。比如,VMWare Harbor 和 SonatypeNexus
二、Docker原理
參考文章《Docker原理》和《docker入門到實踐(第二版)》
三、安裝Docker
參考文章《docker安裝》和《docker入門到實踐(第二版)》
3.1Centos系統要求
Docker 最低支持 CentOS 7。
Docker 需要安裝在 64 位的 x86 平臺或 ARM 平臺上(如樹莓派) ,並且要求內核版本不低於 3.10。但實際上內核越新越好,過低的內核版本可能會出現部分功能無法使用,或者不穩定。CentOS 7 滿足最低內核的要求,但由於內核版本比較低,部分功能(如 overlay2 存儲層驅動) 無法使用,並且部分功能可能不太穩定。
用戶可以通過如下命令檢查自己的內核版本詳細信息。
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]#

3.2在安裝前卸載舊的版本
$ sudo yum remove docker \
docker-common \
docker-selinux \
docker-engine

3.3安裝Docker
3.3.1使用Docker官方腳本自動安裝
Docker 官方爲了簡化安裝流程,提供了一套安裝腳本,CentOS 系統上可以使用這套腳本安裝:
curl -sSL https://get.docker.com/ | sh
執行這個命令後,腳本就會自動的將一切準備工作做好,並且把 Docker 安裝在系統中。不過,由於偉大的牆的原因,在國內使用這個腳本可能會出現某些下載出現錯誤的情況。國內的一些雲服務商提供了這個腳本的修改版本,使其使用國內的 Docker軟件源鏡像安裝,這樣就避免了牆的干擾。
3.3.2阿里雲方式安裝
3.3.2.1yum安裝
CentOS 7 (使用yum進行安裝)
## step 1: 安裝必要的一些系統工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
## Step 2: 添加軟件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
## Step 3: 更新並安裝 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
## Step 4: 開啓Docker服務
sudo service docker start
注意:
官方軟件源默認啓用了最新的軟件,您可以通過編輯軟件源的方式獲取各個版本的軟件包。例如官方並沒有將測試版本的軟件源置爲可用,你可以通過以下方式開啓。同理可以開啓各種測試版本等。
vim /etc/yum.repos.d/docker-ee.repo
將 [docker-ce-test] 下方的 enabled=0 修改爲 enabled=1

安裝指定版本的Docker-CE:
Step 1: 查找Docker-CE的版本:
yum list docker-ce.x86_64 --showduplicates | sort -r
Loading mirror speeds from cached hostfile
Loaded plugins: branch, fastestmirror, langpacks
docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable
docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
Available Packages
Step2 : 安裝指定版本的Docker-CE: (VERSION 例如上面的 17.03.0.ce.1-1.el7.centos)
sudo yum -y install docker-ce-[VERSION]**
安裝校驗
root@iZbp12adskpuoxodbkqzjfZ:$ docker version
Client:
Version: 17.03.0-ce
API version: 1.26
Go version: go1.7.5
Git commit: 3a232c8
Built: Tue Feb 28 07:52:04 2017
OS/Arch: linux/amd64

Server:
Version: 17.03.0-ce
API version: 1.26 (minimum version 1.12)
Go version: go1.7.5
Git commit: 3a232c8
Built: Tue Feb 28 07:52:04 2017
OS/Arch: linux/amd64
Experimental: false
3.3.2.2阿里雲的安裝腳本
3.3.3DaoCloud 的安裝腳本
curl -sSL https://get.daocloud.io/docker | sh
3.3.4yum安裝
這個centos-extras倉庫必須啓用。這個庫是默認可用的,但如果不能使用,你需要重新啓用它。(不建議使用默認extras倉庫安裝,因爲安裝版本較低,建議自行添加docker倉庫)
執行下面的命令添加 yum 軟件源
cat >/etc/yum.repos.d/docker.repo <<-EOF
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
更新 yum 軟件源緩存,並安裝 docker-engine 。
$ sudo yum makecache
$ sudo yum install docker-engine

3.4啓動 Docker 引擎
設置開機啓動Docker Daemon進程
systemctl start docker.service
systemctl enable docker.service
查看docker進程的狀態
ps -ef | grep docker
關閉firewalld防火牆,並啓用iptables
systemctl stop firewalld.service
systemctl disable firewalld.service
添加iptables防火牆並啓動
yum -y install iptables-services
systemctl enable iptables
systemctl start iptables

3.5建立Docker用戶組
默認情況下, docker 命令會使用 Unix socket 與 Docker 引擎通訊。而只有root 用戶和 docker 組的用戶纔可以訪問 Docker 引擎的 Unix socket。出於安全考慮,一般 Linux 系統上不會直接使用 root 用戶。因此,更好地做法是將需要使用 docker 的用戶加入 docker 用戶組。建立 docker 組:
$ sudo groupadd docker
將當前用戶加入 docker 組:
$ sudo usermod -aG docker $USER
四、Docker加速器
3.1常用Docker加速器
國內訪問 Docker Hub 有時會遇到困難,此時可以配置鏡像加速器。國內很多雲服
務商都提供了加速器服務,例如:
阿里雲加速器
DaoCloud 加速器
靈雀雲加速器
註冊用戶並且申請加速器,會獲得如https://8sqvv6ih.mirror.aliyuncs.com 這樣的地址。我們需要將其配置給Docker 引擎。
3.2Centos7配置Docker加速器
對於使用 systemd 的系統,用 systemctl enable docker 啓用服務後,編輯
/etc/systemd/system/multi-user.target.wants/docker.service 文件,找到 ExecStart= 這一行,在這行最後添加加速器地址 --registry-mirror=<加速器地址> ,如:鏡像加速器
ExecStart=/usr/bin/dockerd --registry-mirror=https://8sqvv6ih.mirror.aliyuncs.com
注:對於 1.12 以前的版本, dockerd 換成 docker daemon 。
3.3重新加載配置並且重新啓動。
systemctl daemon-reload
systemctl restart docker
3.4檢查加速器是否生效
Linux系統下配置完加速器需要檢查是否生效,在命令行執行 ps -ef | grep dockerd ,如果從結果中看到了配置的 --registry-mirror 參數說明配置成功。
$ sudo ps -ef | grep dockerd
root 5346 1 0 19:03 ? 00:00:00 /usr/bin/dockerd
--registry-mirror=https://jxus37ad.mirror.aliyuncs.com

3.5Docker加速器地址
阿里雲加速器地址https://8sqvv6ih.mirror.aliyuncs.com
五、登錄退出Docker Hub
登錄docker login
登錄命令爲docker login,按照步驟輸入在Docker Hub註冊的用戶名和密碼進行登錄即可
退出Docker Hub
退出登錄命令爲docker logout,運行後直接從指定服務器退出,默認爲官方Docker Hub服務器
六、Docker鏡像使用
6.1查看docker版本
6.1.1使用docker version查看版本信息
[root@localhost ~]# docker version
Client:
Version: 17.07.0-ce
API version: 1.31
Go version: go1.8.3
Git commit: 8784753
Built: Tue Aug 29 17:42:01 2017
OS/Arch: linux/amd64

Server:
Version: 17.07.0-ce
API version: 1.31 (minimum version 1.12)
Go version: go1.8.3
Git commit: 8784753
Built: Tue Aug 29 17:43:23 2017
OS/Arch: linux/amd64
Experimental: false
6.1.2使用docker -v查看版本信息
[root@localhost ~]# docker -v
Docker version 17.07.0-ce, build 8784753
[root@localhost ~]# docker --version
Docker version 17.07.0-ce, build 8784753
[root@localhost ~]#
注:docker –v 和docker –version這兩條命令相同

6.2搜索並獲取鏡像
6.2.1使用docker search搜索可用的docker鏡像
命令行的格式爲:
docker search 鏡像名字
如:

6.2.2使用docker pull命令獲取鏡像
現在默認使用的是Docker Hub上的高質量的鏡像,下面開始介紹如何獲取這些鏡像。獲取鏡像的命令爲docker pull 。
docker pull命令格式爲
源格式:docker pull [OPTIONS] NAME[:TAG|@DIGEST]
docker pull [選項] [Docker Registry地址] 倉庫名[:標籤]
docker pull 用戶名/鏡像名
鏡像名稱格式:
Docker Registry地址:地址的格式一般是 <域名/IP>[:端口號] 。默認地址是Docker Hub。
倉庫名:如之前所說,這裏的倉庫名是兩段式名稱,既 <用戶名>/<軟件名> 。對於 Docker Hub,如果不給出用戶名,則默認爲 library ,也就是官方鏡像。
鏡像都是按照用戶名/鏡像名的方式來存儲的。有一組比較特殊的鏡像用戶名/鏡像名可通過“docker search 鏡像名字”搜索即可查看
如:
$docker pull learn/tutorial
直接寫鏡像名字也可以
$ docker pull centos

上面的命令中沒有給出 Docker Registry 地址,因此將會從 Docker Hub 獲取鏡
像。而鏡像名稱是 ubuntu:14.04 ,因此將會獲取官方鏡像 library/ubuntu倉庫中標籤爲 14.04 的鏡像。從下載過程中可以看到我們之前提及的分層存儲的概念,鏡像是由多層存儲所構成。下載也是一層層的去下載,並非單一文件。下載過程中給出了每一層的 ID 的前 12 位。並且下載結束後,給出該鏡像完整的 sha256 的摘要,以確保下載一致性。在實驗上面命令的時候,你可能會發現,你所看到的層 ID 以及 sha256 的摘要和這裏的不一樣。這是因爲官方鏡像是一直在維護的,有任何新的 bug,或者版本更新,都會進行修復再以原來的標籤發佈,這樣可以確保任何使用這個標籤的用戶可以獲得更安全、更穩定的鏡像。
如果從 Docker Hub 下載鏡像非常緩慢,可以參照後面的章節配置加速器。
6.3列出當前鏡像列表
6.3.1使用docker images命令查看
要想列出已經下載下來的鏡像,可以使用 docker images 命令
列表包含了倉庫名、標籤、鏡像 ID、創建時間以及所佔用的空間。其中倉庫名、標籤在之前的基礎概念章節已經介紹過了。鏡像 ID 則是鏡像的唯一標識,一個鏡像可以對應多個標籤。因此,在上面的例子中,我們可以看到ubuntu:16.04 和 ubuntu:latest 擁有相同的 ID,因爲它們對應的是同一個鏡像。
6.3.2列出部分鏡像
在不加任何參數的情況下,docker images會列出所有的鏡像,但有時會只希望列出部分鏡像可以使用下面的命令進行列出部分鏡像內容。
使用命令進行查看docker images 倉庫名字
6.3.3查看鏡像摘要
使用命令$ docker images --digests進行查看鏡像摘要,如下

6.4刪除本地鏡像
6.4.1docker rmi語法:
刪除本地的鏡像,可以使用docker rmi命令,其格式爲:
docker rmi [選項] 鏡像1 [鏡像...]
參數:
-f 強行移除該鏡像,即使正在使用中
--no-prune
注:docker rm命令是刪除容器,docker rmi命令是刪除本地鏡像
在刪除鏡像時其中[鏡像1]可以是ID 、鏡像名、摘要 來刪除鏡像,其中ID我們可以使用完整的ID也就是長ID,也可以使用斷ID來刪除鏡像,其中短ID就是說一般取前3個字符以上,只要足夠區分與別的鏡像就可以了,docker images已經列出來的已經算是斷ID了。
如:使用docker imager查看鏡像列表

6.4.2使用鏡像名刪除本地鏡像
也就是 <倉庫名>:<標籤> ,來刪除鏡像
6.4.3使用ID刪除本地鏡像

6.4.4使用鏡像摘要刪除本地鏡像
docker rmi REPOSITORY@ DIGEST
七、操作容器
容器是docker的核心概念,容器是獨立運行的一個或一組應用,以及他們的運行狀態環境
7.1列出所有運行中的容器
命令格式語法:docker ps [OPTIONS]
參數選項:
-a 列出所有運行中的容器
-q 僅列出容器ID
-s 顯示容器大小
-n=1 列出最近創建的n個容器
如:

7.2創建啓動容器
7.2.1啓動容器的兩種方式
7.1.1新建容器並啓動
這種啓動方式爲基於鏡像新建一個容器並啓動,所需要的命令主要爲docker run,相當於先執行docker create命令在執行docker start命令進行啓動容器
7.1.2終止狀態的容器並啓動
這一種啓動方式爲容器在停止狀態(stopped)的容器使用docker start命令進行重新啓動
7.2.2新建容器
可以使用docker create命令新建容器,但此時創建的容器處於停止狀態,可以使用docker start命令來啓動。

7.2.3新建並啓動容器
新建容器並啓動容器的命令主要爲docker run命令。
7.2.3.1Docker run語法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
選項:
-i選項讓容器的標準輸入保持打開,以交互模式運行容器,通常與-t同時使用
-t 選項讓Docker分配一個僞終端(pseudo-tty)並綁定到容器的標準輸入上通常與-i同時使用
-d或者-d=true選項則是讓docker容器以守護狀態在後臺運行而不是直接把執行命令的結果輸出在當前的宿主機下並返回容器ID
--name nginx 指定容器名稱,如果沒有指定則會自動生成一個隨機字符串UUID
-h hostname 指定容器的hostname
-P (大P)映射到主機的隨機端口
-p (小p) 將容器的端口映射到主機端口 如: –p 80:80將容器的80端口映射到主機80端口
-v 將主機的目錄映射到容器的目錄 如:-v /data:/data將主機的data目錄映射到容器的data目錄
--dns 強制容器使用dns服務器,例如docker –d --dns 8.8.8.8
7.2.3.2創建並啓動容器時執行過程
當利用docker run來創建並啓動容器時,docker在後臺運行的標準操作包括:
1、 檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載
2、 利用鏡像創建並啓動一個鏡像
3、 分配一個文件系統,並在只讀的鏡像層外面掛載一層可讀寫層
4、 從宿主機配置的網橋接口中橋接一個虛擬接口到容器中
5、 從地址池配置一個ip地址給容器
6、 執行用戶指定的應用程序
7、 執行完畢後容器被終止

7.2.3.3運行容器
7.2.3.3.1新建一個容器並輸出hello world 並終止容器

docker run ubuntu:14.04 echo hello-world

    本條命令啓動ubuntu:14.04版本的鏡像,並在其中運行打印hello world的命令;

由於我們的命令是一個簡單的語句,並不會持續很長時間,當命令執行完畢時,容器就退出了因此,我們通過docker ps –a可以看到容器的狀態是停止狀態

7.2.3.3.2新建一個容器並啓動一個bash終端,允許用戶進行交互
docker run -i -t centos /bin/bash
在交互式模式下可以在終端下使用命令如下

用戶可以使用exit命令退出容器

對於創建的bash容器,當使用命令exit退出容器時,該容器就自動處於終止狀態了,這是因爲對於docker容器來說,當運行的應用退出後,容器也就沒有繼續運行的必要了。
7.2.3.3.3後臺運行一個容器 使用-d選項

7.2.3.3.4運行nginx服務鏡像
$ docker run -d -p 80:80 --name webserver nginx
安裝成功後,可以使用瀏覽器訪問http:// ip地址,如能訪問則nginx成功安裝並啓動。

7.2.3.3.5新建一個web容器能訪問
新建一個nginx web服務器映射本機80端口,使其能正常訪問

7.3暫停終止容器
停止上面創建的nginx服務鏡像
命令docker stop Docker_Name

$ docker stop webservice

在如停止上面例子中後臺運行的centos

7.4重啓暫停的容器
使用docker restart 命令會將一個運行狀態爲終止的容器進行重新啓動

進入容器
在使用-d參數時,容器啓動後會進入後臺,用戶無法查看到容器中的信息,有些時候如果需要進入容器進行操作時,可以進入到容器進行操作,有很多方法包括docker attach命令,docker exec命令以及nsenter工具等
docker attche命令
docker attche命令是docker自帶的命令,可查看下面例子使用該命令

使用docker attach命令時,當多人同時使用docker attach到同一個容器的時候,所有的窗口都會同步顯示,當某個窗口因命令阻塞時,其他窗口也無法執行操作。 

7.5刪除容器
可以使用docker rm命令刪除處於終止狀態的容器,
其格式爲docker rm [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS選項:
-f 強行終止並刪除一個運行中的容器
-l 刪除容器的連接,但保留容器
-v刪除容器掛載的數據卷

$ docker rm webservice

先暫停centos服務在刪除centos容器

使用-f強行刪除運行中的容器

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