概述
docker 是一個(gè)開(kāi)源的應(yīng)用容器引擎,讓開(kāi)發(fā)者可以打包他們的應(yīng)用以及依賴(lài)包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的 linux 機(jī)器上,也可以實(shí)現(xiàn) 虛擬化 。
docker的配圖很形象。一只鯨魚(yú)(容器)上面裝載著貨物(應(yīng)用)。
docker安裝
debian/ubuntu等系統(tǒng)可以直接下載deb進(jìn)行安裝
1
|
sudo dpkg -i package-name.deb |
其他平臺(tái)參照 docker官網(wǎng) docker hello world
安裝好docker之后,執(zhí)行下面語(yǔ)句確認(rèn)docker是否安裝成功
1
|
sudo docker info |
如果docker沒(méi)有啟動(dòng),則執(zhí)行
1
2
3
|
sudo /etc/init .d /docker start 或 sudo service docker start |
執(zhí)行下面的語(yǔ)句啟動(dòng)一個(gè)docker容器
1
|
sudo docker run -i -t ubuntu:14.04 /bin/bash |
docker run ,運(yùn)行容器的命令 -i -t , 執(zhí)行docker以交互(將執(zhí)行的過(guò)程顯示到shell中)的形式啟動(dòng)容器 ubuntu:14.04 , ubuntu表示鏡像名,14.04表示鏡像的標(biāo)簽 /bin/bash , 表示要讓啟動(dòng)的容器執(zhí)行/bin/bash語(yǔ)句
首次執(zhí)行這段代碼時(shí),docker會(huì)下載ubuntu:14.04對(duì)應(yīng)的鏡像。
docker鏡像和容器
鏡像和容器,是docker中最最重要的兩個(gè)概念。
鏡像:在某一操作系統(tǒng)(一般是linux)的基礎(chǔ)上,添加某個(gè)服務(wù)(如mysql服務(wù)),所構(gòu)成的一個(gè)處于靜態(tài)的系統(tǒng)鏡像,可以理解為某系統(tǒng)的iso鏡像文件。(我自己的理解[捂臉])
容器:根據(jù)鏡像安裝之后的狀態(tài)
1
|
sudo docker images |
上面語(yǔ)句列出本電腦(宿主機(jī))上的鏡像
1
|
sudo docker pull redis:3 |
上面語(yǔ)句可以從docker官方hub中獲取一個(gè)鏡像名為redis且標(biāo)簽為3的鏡像。看它的名字可以知道是安裝了redis 3 版本的鏡像
鏡像的自定義 創(chuàng)建一個(gè)安裝好redis服務(wù)器的鏡像
1 . 創(chuàng)建目錄和dockerfile
2. 下載163的源文件到redis文件夾下,和dockfile同一目錄下(由于ubuntu原來(lái)的軟件源賊慢,所以將其替換)
3. 編寫(xiě)dockfile,dockfile中的內(nèi)容如下
1
2
3
4
5
6
7
8
9
10
|
from ubuntu:14.04 maintainer dkpaulwen "wen229267643@gmail.com" add $ pwd /sources .list.trusty /etc/apt/sources .list run [ "apt-get" , "-y" , "update" ] run [ "apt-get" , "-y" , "install" , "redis-server" , "redis-tools" ] expose 6379 cmd [ "/usr/bin/redis-server" ] |
from ubuntu:14.04 : 表明我們所構(gòu)建的鏡像是基于ubuntu:14.04鏡像的 maintainer name email : 構(gòu)建人的名字和郵箱 add path1 path2 : 將宿主機(jī)中的path1文件/目錄 復(fù)制到 docker中 run ["command","option",...] : 表示執(zhí)行command命令 , 也可以寫(xiě)作 run command option parameter 這樣的形式。上面執(zhí)行的兩個(gè)語(yǔ)句更新了源,安裝了redis expose 6379 : 表示docker機(jī)會(huì)將6379端口暴露給宿主機(jī),可以將宿主機(jī)的某個(gè)端口與這個(gè)端口連接,這樣就可以在外部使用這個(gè)容器中運(yùn)行的應(yīng)用 cmd ["command","option",...] : 表示啟動(dòng)容器時(shí)若不指定執(zhí)行的命令,就執(zhí)行這個(gè)命令指定的命令
4 . 構(gòu)建鏡像
在redis目錄下執(zhí)行命令
1
|
sudo docker build -t dkpaulwen /redis . |
-t 選項(xiàng)用來(lái)告訴docker daemon要構(gòu)建的鏡像的倉(cāng)庫(kù)名和鏡像名為dkpaulwen/redis,其中dkpaulwen為倉(cāng)庫(kù)名,redis為鏡像名
1
|
sudo docker images |
查看鏡像
1
2
3
|
root@izm5ejdk51ejf0nkzwz3koz:~ /dockers/redis # docker images repository tag image id created virtual size dkpaulwen /redis latest eb4b76ccb49c 18 minutes ago 213.4 mb |
5. 用自定義的鏡像創(chuàng)建容器
執(zhí)行下面的命令
1
|
sudo docker run -d -p 6379 --name myredis dkpaulwen /redis |
-d 選項(xiàng)告訴docker以后臺(tái)的形式啟動(dòng)容器 -p 6379 告訴docker將docker機(jī)的6379端口與宿主機(jī)的隨機(jī)端口(隨機(jī)分配一個(gè)大端口號(hào))相關(guān)聯(lián),也可以這樣 -p 6666:6379,前者是宿主機(jī),后者docker機(jī) --name myredis 指定容器名 dkpaulwen/redis 是鏡像名 這里沒(méi)有指定要執(zhí)行的命令,默認(rèn)執(zhí)行dockerfile中的cmd指定的命令
6. 查看創(chuàng)建的docker容器
docker ps 命令
1
2
3
|
root@izm5ejdk51ejf0nkzwz3koz:~ /dockers/redis # docker ps container id image command created status ports names 3e1366140973 dkpaulwen /redis "/usr/bin/redis-serve" 23 minutes ago up 23 minutes 0.0.0.0:32788->6379 /tcp myredis |
這里包含容器的一些屬性,其中一個(gè)是ports——端口,可以看到,0.0.0.0:32788 -> 6379/tcp ,32788是宿主機(jī)端口,6379是被關(guān)聯(lián)的docker容器端口,類(lèi)型是tcp
7. 連接這個(gè)容器
1
|
redis-cli -h localhost -p 32788 |
1
2
3
4
|
root@izm5ejdk51ejf0nkzwz3koz:~ /dockers/redis # redis-cli -h localhost -p 32788 localhost:32788> get username "glen" localhost:32788> |
因?yàn)槲以谖业姆?wù)器上安裝的docker,所以我也可以在自己的電腦上連接服務(wù)器上的docker容器
1
2
3
4
|
paul@paul-inspiron-5420:~$ redis-cli -h www.wenjingyi. top -p 32788 www.wenjingyi. top :32788> get username "glen" www.wenjingyi. top :32788> |