您好,登錄后才能下訂單哦!
鏡像,從本質上來講,鏡像相當于一個文件系統。鏡像是只讀的,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包好了一些為運行時準備的一些配置參數,如匿名卷、環境變量、用戶等。鏡像不包含任何動態數據,其內容在構建之后也不會被改變。一個鏡像可以運行多個container,鏡像可以通過dockerfile創建,也可以從dicker hub/registory上下載。
容器,容器的實質是進程,但是是運行在屬于自己的獨立的命名空間,因此容器可以擁有自己的root文件系統,自己的網絡配置,自己的進程空間,甚至自己的用戶id空間。說白了就是運行在一個隔離的環境里。
倉庫,顧名思義,就是一個用來存儲用的空間。鏡像構建完成后,可以很容易的在當前宿主機上運行,但是,如果要在其他服務器上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務,docker registry就是這樣的服務
鏡像就相當于打包好的版本,鏡像啟動之后運行在容器中,倉庫就是存儲鏡像的地方
因為鏡像包含操作系統完整的root文件系統,其體積往往是龐大的,因此在docker設計時,就充分利用Union FS的技術,將其設計為 分層存儲 的架構。嚴格來講,鏡像并非是像一個ISO那樣的打包文件,鏡像只是一個虛擬的概念,其實際體現并非由一個文件組成,而是由一組文件系統組成,或者說,是由對曾文件系統聯合組成。
鏡像構建時,會一層層構建,前一層作為后一層的基礎,每一層構建完就不會再發生改變,后一層上的改變只發生在自己這一層上。
Docker采用了C/S架構,包括客戶端和服務端。Docker守護進程(Daemon)作為服務端接受來自客戶端的請求,并處理這些請求(創建、運行、分發容器)
Docker守護進程一般在宿主機主機后臺運行,等待接受來自客戶端的消息,Docker客戶端則為用戶提供一系列可執行命令,用戶用這些命令實現跟Docker 守護京城交互:
Docker也為我們提供了Remote API來操作Docker的守護進程,也意味著我們可以通過自己的進程來控制Docker的運行。客戶端和服務端既可以運行在一個機器上,也可通過socket或RESTfuk API來進行通信:
至于Docker的客戶端與守護進程之間的通信,其連接方式為socket連接,主要有三種連接方式:
#啟動一個容器
docker run -it nginx /bin/bash
#查看容器
docker ps [-a] [-l]
-a all 列出所有容器
-l latest 列出最近的容器
#查看指定容器
docker inspect name | id
name指代具體的容器名稱,id則是容器的唯一標識
#啟停容器
docker start|stop name | id
#刪除停止的容器
docker rm name| id
#進入正在運行的容器
#docker attach name | id 退出時要使用Ctrl+P Ctrl+Q
docker exec -it name | id bash 退出時可以使用exit
#啟動后臺運行的容器
docker -d ...
#查看容器日志
docker logs [-f] [-t] [–tail] name|id
-f –follows=true | false,默認是false,顯示更新
-t –timestamps=true | false,默認是false,顯示時間戳
–tail=“all” | 行數,顯示最新行數的日志
#查看容器內進程
docker top name|id
#查詢鏡像
#docker search name [options]
–automated=false,僅顯示自動化構建的鏡像
–no-trunc=false,不以截斷的方式輸出
–filter,添加過濾條件
#拉取鏡像
docker pull [OPTIONS] NAME [:TAG]
-a,–all-tags=false,下載所有的鏡像(包含所有TAG)
#推送鏡像
docker push [OPTIONS] NAME [:TAG]
#列出鏡像
docker images [OPTIONS] [REPOSITORY]
-a,–all=false,顯示所有鏡像
-f,–filter=[],顯示時過濾條件
–no-trunc=false,指定不使用截斷的形式顯示數據
-q,–quiet=false,只顯示鏡像的唯一id
#查看鏡像
docker inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE]
-f,–format=“”
#構建鏡像
構建docker鏡像,可以保存對容器的修改,并且再次使用。構建鏡像提供了自定義鏡像的能力,以軟件的形式打包并分發服務及其運行環境。Docker中提供了兩種方式來構建鏡像:
- 通過容器構建:docker commit
- 通過Dockerfile: docker build
1. 使用commit命令構建鏡像
命令:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
參數:-a,–author=“”,指定鏡像的作者信息
-m,–message=“”,提交信息
-p,–pause=true,commit時是否暫停容器
ccs-iMac:~ cc$ docker commit -a 'hxl' -m 'test commit an image' reverent_allen web
sha256:464ca63bbb182e5d7fd2809da1dcb6942484ece7b89e242ecaabdb9c8d5552
2.使用Dockerfile文件構建鏡像
Docker允許我們利用一個類似配置文件的形式來進行構建自定義鏡像,在文件中可以指定原始的鏡像,自定義鏡像的維護人信息,對原始鏡像采取的操作以及暴露的端口等信息。比如:
Sample Dockerfile
FROM ubuntu:16.04
MAINTAINER wgp "Kingdompin@163.com"
RUN apt-get update
RUN apt-get install -y nginx
EXPOSE 80
命令:docker build [OPTIONS] DockerFile_PATH | URL | -
參數:–force-rm=false
–no-cache=false
–pull=false
-q,quite=false,構建時不輸出信息
–rm=true
-t,tag=“”,指定輸出的鏡像名稱信息
#鏡像遷移
我們制作好鏡像,一般要分享給別人。Docker提供了幾種遷移的方式,但是常用的一般有兩種:
1.使用registory 來分享,可選Docker HUb 和私有倉庫
2.docker load 和docker save 來打包分享
倉庫一般就是Dokcer Hub 和私有自建registry 至于如何自建私有倉庫,本篇就不敘述了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。