Docker 配置和使用

0、基本概念

鏡像

Docker鏡像通過(guò)鏡像ID進(jìn)行識(shí)別。鏡像ID是一個(gè)64字符的十六進(jìn)制的字符串。但是當(dāng)我們運(yùn)行鏡像時(shí),通常我們不會(huì)使用鏡像ID來(lái)引用鏡像,而是使用鏡像名來(lái)引用。要列出本地所有有效的鏡像,可以使用命令

$ docker images

鏡像可以發(fā)布為不同版本,這種機(jī)制我們稱之為標(biāo)簽(Tag)。

容器

Docker容器可以使用命令創(chuàng)建:

$ docker run imagename

它會(huì)在所有的鏡像層之上增加一個(gè)可寫層。這個(gè)可寫層有運(yùn)行在CPU上的進(jìn)程,而且有兩個(gè)不同的狀態(tài):運(yùn)行態(tài)(Running)和退出態(tài)(Exited)。這就是Docker容器。當(dāng)我們使用docker run啟動(dòng)容器,Docker容器就進(jìn)入運(yùn)行態(tài),當(dāng)我們停止Docker容器時(shí),它就進(jìn)入退出態(tài)。

對(duì)容器的變更是寫入到容器的文件系統(tǒng)的,而不是寫入到Docker鏡像中的。

用同一個(gè)鏡像啟動(dòng)多個(gè)Docker容器,這些容器啟動(dòng)后都是活動(dòng)的,彼此還是相互隔離的。我們對(duì)其中一個(gè)容器所做的變更只會(huì)局限于那個(gè)容器本身。

如果對(duì)容器的底層鏡像進(jìn)行修改,那么當(dāng)前正在運(yùn)行的容器是不受影響的,不會(huì)發(fā)生自動(dòng)更新現(xiàn)象。

1、配置

1.1 安裝

$ sudo apt-get update
$ sudo apt-get install docker

編輯/etc/default/docker增加如下配置,自定義docker鏡像存放路徑

DOCKER_OPTS="--graph=/home/david/opt/docker"

sudo service docker start #啟動(dòng)
sudo service docker stop #關(guān)閉
sudo service docker restart #重啟

1.2 pull一個(gè)鏡像

查看鏡像:此時(shí)應(yīng)該沒(méi)有鏡像
docker images

下載鏡像

sudo docker pull ubuntu

1.3 創(chuàng)建容器

docker ps命令

$ sudo docker ps #列出當(dāng)前所有正在運(yùn)行的container
$ sudo docker ps -l #列出最近一次啟動(dòng)的,且正在運(yùn)行的container
$ sudo docker ps -a #列出所有的container

啟動(dòng)容器,并且進(jìn)入到Ubuntu容器的bash命令

$ sudo docker run -itv /home/david/docker:/home/davida/gitlab  ubuntu  /bin/bash

其中,

1.4 提交容器

退出容器,使用 docker commit 命令來(lái)提交更新后的副本。

$ sudo docker commit -m 'xmo run evn' -a 'david' bde4f2f2db5f  ubuntu-ruby:v1

其中,-m 來(lái)指定提交的說(shuō)明信息,跟我們使用的版本控制工具一樣;-a 可以指定更新的作者信息;之后是用來(lái)創(chuàng)建鏡像的容器的ID;最后指定目標(biāo)鏡像的倉(cāng)庫(kù)名和 tag 信息。創(chuàng)建成功后會(huì)返回這個(gè)鏡像的 ID 信息。v1是tag(版本號(hào))

$ sudo docker inspect ubuntu-ruby

查看詳細(xì)信息

1.5 Dockerfile提交容器

Dockerfile的指令是忽略大小寫的,建議使用大寫,使用 # 作為注釋,每一行只支持一條指令,每條指令可以攜帶多個(gè)參數(shù)。
Dockerfile的指令根據(jù)作用可以分為兩種,構(gòu)建指令和設(shè)置指令。構(gòu)建指令用于構(gòu)建image,其指定的操作不會(huì)在運(yùn)行image的容器上執(zhí)行;設(shè)置指令用于設(shè)置image的屬性,其指定的操作將在運(yùn)行image的容器中執(zhí)行。

1)FROM 基礎(chǔ)image

基礎(chǔ)image可以是官方遠(yuǎn)程倉(cāng)庫(kù)中的,也可以位于本地倉(cāng)庫(kù)。

FROM <image> 

或者

FROM <image>:<tag>  

制定某個(gè)tag版本

1.4 用SSH訪問(wèn)容器

先安裝ssh

apt-get update
apt-get install openssh-server

需要修改/etc/ssh/sshd_config文件中內(nèi)容

RSAAuthentication yes #啟用 RSA 認(rèn)證
PubkeyAuthentication yes #啟用公鑰私鑰配對(duì)認(rèn)證方式
AuthorizedKeysFile .ssh/authorized_keys #公鑰文件路徑(和上面生成的文件同)
PermitRootLogin yes #root能使用ssh登錄

重啟sshd服務(wù)

/etc/init.d/ssh stop
/etc/init.d/ssh start

2、常用命令

docker start和docker run

docker run 命令先是利用鏡像創(chuàng)建了一個(gè)容器,然后運(yùn)行這個(gè)容器。

docker run命令類似于git pull命令。git pull命令就是git fetch 和 git merge兩個(gè)命令的組合,同樣的,docker run就是docker create和docker start兩個(gè)命令的組合。

docker ps

docker ps 命令會(huì)列出所有運(yùn)行中的容器。這隱藏了非運(yùn)行態(tài)容器的存在,如果想要找出這些容器,我們需要使用docker ps -a

docker images

docker images命令會(huì)列出了所有頂層(top-level)鏡像。實(shí)際上,在這里我們沒(méi)有辦法區(qū)分一個(gè)鏡像和一個(gè)只讀層,所以我們提出了top-level 鏡像。只有創(chuàng)建容器時(shí)使用的鏡像或者是直接pull下來(lái)的鏡像能被稱為頂層(top-level)鏡像,并且每一個(gè)頂層鏡像下面都隱藏了多個(gè)鏡像層。

docker images -a

docker images –a命令列出了所有的鏡像,也可以說(shuō)是列出了所有的可讀層。如果你想要查看某一個(gè)image-id下的所有層,可以使用docker history來(lái)查看。

docker stop <container-id>

docker stop命令會(huì)向運(yùn)行中的容器發(fā)送一個(gè)SIGTERM的信號(hào),然后停止所有的進(jìn)程。

docker commit <container-id>

docker commit命令將容器的可讀寫層轉(zhuǎn)換為一個(gè)只讀層,這樣就把一個(gè)容器轉(zhuǎn)換成了不可變的鏡像。

dockesr exec <running-container-id>

docker exec 命令會(huì)在運(yùn)行中的容器執(zhí)行一個(gè)新進(jìn)程。

docker save <image-id>

docker save命令會(huì)創(chuàng)建一個(gè)鏡像的壓縮文件,這個(gè)文件能夠在另外一個(gè)主機(jī)的Docker上使用。和export命令不同,這個(gè)命令為每一個(gè)層都保存了它們的元數(shù)據(jù)。這個(gè)命令只能對(duì)鏡像生效。

docker export <container-id>

docker export命令創(chuàng)建一個(gè)tar文件,并且移除了元數(shù)據(jù)和不必要的層,將多個(gè)層整合成了一個(gè)層,只保存了當(dāng)前統(tǒng)一視角看到的內(nèi)容(expoxt后 的容器再import到Docker中,通過(guò)docker images –tree命令只能看到一個(gè)鏡像;而save后的鏡像則不同,它能夠看到這個(gè)鏡像的歷史鏡像)。

參考

Ubuntu 15.04下安裝Docker

Docker的鏡像和容器的區(qū)別

Docker容器和鏡像區(qū)別

Docker學(xué)習(xí)筆記(3)-- 如何使用Dockerfile構(gòu)建鏡像

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容