Docker部署文檔
目錄
Docker部署文檔 1
1、什麼是Docker 3
1.1Docker簡介 3
1.2對比傳統虛擬機總結 4
1.3Docker一般用於以下場景: 5
1.4基本概念 5
Docker 鏡像 5
Docker 容器 6
Docker Registry 7
2、Docker原理 9
3、安裝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
4、Docker加速器 14
3.1經常使用Docker加速器 14
3.2Centos7配置Docker加速器 15
3.3從新加載配置而且從新啓動。 15
3.4檢查加速器是否生效 15
3.5Docker加速器地址 15
5、登陸退出Docker Hub 15
登陸docker login 15
退出Docker Hub 16
6、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
7、操做容器 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
6、安裝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添加鏡像庫 33linux
1、什麼是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 和傳統虛擬化方式的不一樣之處。傳統虛擬機技術是虛擬 出一套硬件後,在其上運行一個完整操做系統,在該系統上再運行所需應用進程; 而容器內的應用進程直接運行於宿主的內核,容器內沒有本身的內核,並且也沒有進行硬件虛擬。所以容器要比傳統虛擬機更爲輕便。nginx
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
2、Docker原理
參考文章《Docker原理》和《docker入門到實踐(第二版)》
3、安裝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 ~]#web
3.2在安裝前卸載舊的版本
$ sudo yum remove docker \
docker-common \
docker-selinux \
docker-enginedocker
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/amd64ubuntu
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-enginevim
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 iptablescentos
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
4、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
5、登陸退出Docker Hub
登陸docker login
登陸命令爲docker login,按照步驟輸入在Docker Hub註冊的用戶名和密碼進行登陸便可
退出Docker Hub
退出登陸命令爲docker logout,運行後直接從指定服務器退出,默認爲官方Docker Hub服務器
6、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
7、操做容器
容器是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在後臺運行的標準操做包括:
一、 檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載
二、 利用鏡像建立並啓動一個鏡像
三、 分配一個文件系統,並在只讀的鏡像層外面掛載一層可讀寫層
四、 從宿主機配置的網橋接口中橋接一個虛擬接口到容器中
五、 從地址池配置一個ip地址給容器
六、 執行用戶指定的應用程序
七、 執行完畢後容器被終止
7.2.3.3運行容器
7.2.3.3.1新建一個容器並輸出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強行刪除運行中的容器