鏡像


CentOS安裝 Docker

從 2017 年 3 月開始 docker 在原來的基礎上分爲兩個分支版本: Docker CE 和 Docker EE。
Docker CE 即社區免費版,Docker EE 即企業版,強調安全,但需付費使用。
本文介紹 Docker CE 的安裝使用。
移除舊的版本:
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
安裝一些必要的系統工具:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加軟件源信息(至關於在  /etc/yum.repos.d/下 生成xxx.repo文件):
sudo yum-config-manager --add-repo http:// mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
更新 yum 緩存:
sudo yum makecache fast
安裝 Docker-ce:
sudo yum -y install docker-ce
啓動 Docker 後臺服務
sudo systemctl start docker
測試運行 hello-world
[root@runoob ~]# docker run hello-world
因爲本地沒有hello-world這個鏡像,因此會下載一個hello-world的鏡像,並在容器內運行。
 
 
1、鏡像
 
頂層鏡像  -- 中間層鏡像(被頂層鏡像所依賴)  -- 虛懸鏡像
docker 運行容器前須要本地存在對應的鏡像,若是鏡像不存在,docker會嘗試先從默認鏡像倉庫下載(默認使用Docker Hub公共註冊服務器中的倉庫),也能夠經過配置,使用自定義的鏡像倉庫。
 
獲取鏡像:
docker  pull  NAME[:TAG]
 
NAME 是鏡像倉庫名稱(用來區分鏡像,),倉庫名是兩段式名稱 ,即 <用戶名>/<軟件名>。對於 Docker Hub,若是不給出用戶名,則默認爲 library,也就是官方鏡像。
TAG 是鏡像標籤(表示版本信息)。若是不顯示指定TAG,則默認會選擇latest標籤,下載倉庫中最新版本的鏡像。
嚴格的講,鏡像的倉庫名稱中還應該添加 倉庫地址( <域名/IP>[:端口號])做爲前綴,只是默認使用的是官方 Docker Hub 服務,該前綴能夠忽略。
如,docker  pull  registry.hub.docker.com/ubuntu:18.04命令,即從默認的註冊服務器中的ubuntu倉庫來下載標記爲18.04的鏡像。
若是從非官方的倉庫下載,則須要在倉庫名稱前指定完整的倉庫地址。如,docker  pull   hub.c.163.com/public/ubuntu:18.04
須要使用 鏡像代理服務 來加速Docker鏡像獲取過程,能夠在Docker服務啓動配置中增長 --registry-mirror=proxy_URL 來指定鏡像代理服務地址。--registry-mirror=http://hub-mirror.c.163.com
http://141e5461.m.daocloud.io
{
    "registry-mirrors": [
        " https://reg-mirror.qiniu.com",
        " http://hub-mirror.c.163.com"
    ]
}
鏡像是由多層存儲所構成。下載也是一層層的去下載,並不是單一文件。 下載過程當中給出了每一層的 ID 的前 12 位。而且下載結束後,給出該鏡像完整的 sha256 的摘要,以確保下載一致性。
當不一樣的鏡像包括相同的層時,本地僅存儲了層的一分內容,減少了存儲空間。
docker image ls 顯示的是鏡像下載到本地後,展開的大小,準確說,是展開後的各層所佔空間的總和,而 Docker Hub 中顯示的體積是壓縮後的體積。
查看鏡像、容器、數據卷所佔用的空間:
 
生成容器:
 
docker  tag 命令添加的標籤實際上起到了相似連接的做用。
 
docker  inspect  命令獲取鏡像的詳細信息。
獲取其中的一項
列出各層的建立信息
 
鏡像列表:
 
搜尋鏡像:
docker  search   xxxx
 
刪除鏡像:
容器是以鏡像爲基礎,再加一層容器存儲層,組成這樣的多層存儲結構去運行的。 若是有用這個鏡像啓動的容器存在(即便容器沒有運行),那麼一樣不能夠刪除這個鏡像。
刪除行爲分爲 Untagged  和 Deleted。 鏡像的惟一標識是其 ID 和摘要,而一個鏡像能夠有多個標籤。因此並不是全部的 docker image rm 都會產生刪除鏡像的行爲,有可能僅僅是取消了某個標籤而已。
docker  rmi  或  docker  image  rm  命令
若是有容器依賴,則正確的作法是先刪除依賴該鏡像的全部容器,再刪除鏡像
一、使用鏡像名刪除 ,<倉庫名>:<標籤>
二、使用鏡像ID刪除
三、搭配命令行刪除
如,刪除全部在 mongo:3.2 以前的鏡像:
$ docker image rm $(docker image ls -q -f before=mongo:3.2)
 
清理鏡像:
清理一些臨時的鏡像文件,以及一些沒有被使用的鏡像(包括虛懸鏡像)。
docker  images  prune 命令
 
建立鏡像:
一、基於已有的容器建立(慎用,適合幫助理解鏡像分層存儲的概念)
背景:修改了容器的文件也就是改動了容器的存儲層,可用docker diff 命令查看具體的改動。docker commit 命令,能夠將容器的存儲層保存下來成爲鏡像。
換句話說,就是在原有鏡像的基礎上,再疊加上容器的存儲層,並構成新的鏡像。
缺點:除當前層外,以前的每一層都是不會發生改變的,換句話說,任何修改的結果僅僅是在當前層進行標記、添加、修改,而不會改動上一層。若是使用 docker commit 製做鏡像,以及後期修改的話,每一次修改都會讓鏡像更加臃腫一次,所刪除的上一層的東西並不會丟失,會一直如影隨形的跟着這個鏡像,即便根本沒法訪問到。這會讓鏡像更加臃腫。
 
docker commit  [OPTIONS]  CONTAINER  [REPOSITORY[:TAG]],
不要使用 docker commit 定製鏡像,定製鏡像應該使用 Dockerfile 來完成。
OPTIONS:
-a : 做者
-c : 提交的時候執行Dockerfile指令
-m : 提交消息
-p : 提交時暫停容器運行
CONTAINER :
容器名 或 容器ID
 
二、基於本地模板導入
格式:docker import [選項] <文件>|<URL>|- [<倉庫名>[:<標籤>]]
壓縮包能夠是本地文件、遠程 Web 文件,甚至是從標準輸入中獲得。壓縮包將會在鏡像 / 目錄展開,並直接做爲鏡像第一層提交。
 
三、基於Dockerfile建立(最多見)
背景:鏡像的定製實際上就是定製每一層所添加的配置、文件。若是咱們能夠把每一層修改、安裝、構建、操做的命令都寫入一個腳本,用這個腳原本構建、定製鏡像,那麼以前說起的沒法重複的問題、鏡像構建透明性的問題、體積的問題就都會解決。這個腳本就是 Dockerfile。
Dockerfile 是一個文本文件,其內包含了一條條的 指令(Instruction),每一條指令構建一層,所以每一條指令的內容,就是描述該層應當如何構建。
Union FS 是有最大層數限制的,好比 AUFS,曾經是最大不得超過 42 層,如今是不得超過 127 層。
鏡像是多層存儲,每一層的東西並不會在下一層被刪除,會一直跟隨着鏡像。所以鏡像構建時,必定要確保每一層只添加真正須要添加的東西,任何無關的東西都應該清理掉。
 
寫一個簡答的Dockerfile 文件 , 涉及到了兩條指令,FROM 和 RUN
FROM:指定基礎鏡像( 必備)
所謂定製鏡像,那必定是以一個鏡像爲基礎,在其上進行定製。
FROM 是必備的指令,而且必須是第一條指令。
除了選擇現有鏡像爲基礎鏡像外,Docker 還存在一個特殊的鏡像,名爲 scratch。這個鏡像是虛擬的概念,並不實際存在,它表示一個空白的鏡像。
FROM scratch
...
若是你以 scratch 爲基礎鏡像的話,意味着你不以任何鏡像爲基礎,接下來所寫的指令將做爲鏡像第一層開始存在。
RUN: 執行命令( 最經常使用的指令之一)
 
其格式有兩種:
一、shell 格式: RUN <命令>,就像直接在命令行中輸入的命令同樣。
二、 exec 格式: RUN ["可執行文件", "參數1", "參數2"],這更像是函數調用中的格式。
 
docker build [選項] <上下文路徑/URL/->
--target=階段名 -t 指定生成鏡像名
docker build  命令構建鏡像,其實並不是在本地構建,而是在服務端,也就是 Docker 引擎中構建的。
 
上下文的概念。當構建的時候,用戶會指定構建鏡像上下文的路徑,docker build 命令得知這個路徑後,會將路徑下的全部內容打包,而後上傳給 Docker 引擎(注意看上圖第二行)。這樣 Docker 引擎收到這個上下文包後,展開就會得到構建鏡像所需的一切文件。 寫一個 .dockerignore 用於剔除不須要做爲上下文傳遞給 Docker 引擎的。
 
導出和載入鏡像( 如今已經不推薦):
一、存出鏡像
docker   save命令  將鏡像保存爲歸檔文件。支持 -o string 參數,導出到指定的文件中。
二、載入鏡像
docker   load命令。支持 -i string 參數,從指定文件中讀入鏡像內容。
 
上傳鏡像:
docker  [image]  push NAME[:TAG]上傳鏡像到倉庫(須要登陸),默認爲Docker Hub倉庫。
相關文章
相關標籤/搜索