Docker的基本使用

1. 為什么引入Docker

Docker現(xiàn)在大受追捧,風(fēng)光無二。Docker是一個(gè)輕量級(jí)的容器技術(shù),類似于虛擬機(jī)技術(shù)(xen、kvm、vmware、virtual)。Docker是直接運(yùn)行在當(dāng)前操作系統(tǒng)(Linux)之上,而不是運(yùn)行在虛擬機(jī)中,但是也實(shí)現(xiàn)了虛擬機(jī)技術(shù)的資源隔離,性能遠(yuǎn)遠(yuǎn)高于虛擬機(jī)技術(shù)。
Docker支持將軟件編譯成一個(gè)鏡像,在這個(gè)鏡像里做好對(duì)軟件的各項(xiàng)配置,然后發(fā)布這個(gè)鏡像,使用者可以運(yùn)行這個(gè)鏡像,運(yùn)行中的鏡像稱之為容器,容器的啟動(dòng)時(shí)非常快的,一般都是以秒為單位。
目前各大主流云計(jì)算平臺(tái)都支持Docker容器技術(shù),包括阿里云、百度云平臺(tái)(資源隔離通過Docker實(shí)現(xiàn))、Cloud Foundry(和Spring一家公司的,目前最成熟也最穩(wěn)定)、Heroku等等;連微軟也實(shí)現(xiàn)了在Windows Server及其云平臺(tái)Azure上支持Docker,這樣看來Docker大有統(tǒng)一云計(jì)算的趨勢(shì)。
這里的云計(jì)算平臺(tái)一般指的是PaaS(平臺(tái)即服務(wù)),它是一個(gè)這樣的云計(jì)算:平臺(tái)提供了存儲(chǔ)、數(shù)據(jù)庫、網(wǎng)絡(luò)、負(fù)載均衡、自動(dòng)擴(kuò)展等功能,你只需將你的程序交給云計(jì)算平臺(tái)就可以了。你的程序可以是用不同的編程語言開發(fā)的,而使用的Docker的云計(jì)算平臺(tái)就是用Docker來實(shí)現(xiàn)以上功能及不同程序之間隔離的。
目前主流的軟件以及非主流的軟件大部分都有人將其封裝成Docker鏡像,我們只需下載Docker鏡像,然后運(yùn)行鏡像就可以快速獲得已配置好并且可運(yùn)行的軟件。
Docker并不是為開發(fā)測(cè)試方便而提供的小工具,而是可以用于實(shí)際生產(chǎn)環(huán)境的一種極好的部署方式。

2. Docker的安裝

2.1 Linux下安裝

CentOS安裝命令:

sudo yum update
sudo yum install docker

ubuntu安裝命令:

sudo apt-get update
sudo apt-get docker.io

2.2 Windows下安裝(略)

3. Docker常用命令及參數(shù)

基于Docker的鏡像是可以自己編譯的。通常情況下,Docker的鏡像都是放置在Docker的官網(wǎng)上,地址是:https://registry.hub.docker.com

3.1 Docker鏡像命令

image.png

(1) Docker鏡像檢索
除了可以在https://registry.hub.docker.com網(wǎng)站檢索Docker鏡像外,還可以使用下面的命令進(jìn)行檢索:

docker search 鏡像名

例如檢索Redis,輸入 docker search redis
(2) 鏡像下載

docker pull 鏡像名

例如下載Redis,輸入 docker pull redis
(3) 鏡像列表
查看本地鏡像列表:

docker images
查看Docker本地鏡像列表

其中REPOSITORY是鏡像名,TAG是版本名,IMAGE ID是當(dāng)前鏡像的唯一標(biāo)識(shí),CREATE是當(dāng)前鏡像的創(chuàng)建時(shí)間,SIZE是當(dāng)前鏡像的大小.
(4)鏡像刪除
刪除指定鏡像通過以下命令:

docker rmi image-id|image名稱
或者:docker rm image image-id|image名稱

image-id是鏡像的id
示例:dcoker rmi ubuntu:16.04 根據(jù)鏡像名稱刪除鏡像
刪除所有的鏡像:

docker rmi ${docker image -q}

3.2 Docker 容器命令

(1)容器的基本操作
最簡(jiǎn)單的運(yùn)行鏡像為容器的命令如下:

docker run --name container-name -d image-name

運(yùn)行一個(gè)容器只要通過docker run命令即可實(shí)現(xiàn),其中,--name代表為容器起的名稱,-d表示detached,意味著執(zhí)行這段命令后控制臺(tái)將不會(huì)被阻礙,可以繼續(xù)輸入命令操作;最后的image-name是要使用哪個(gè)鏡像來運(yùn)行容器.
例如來運(yùn)行一個(gè)Redis容器:

docker run --name redis-test -d redis

Docker會(huì)為我們的容器生成一個(gè)唯一的標(biāo)識(shí)
(2)容器列表
通過下面命令,查看運(yùn)行中容器列表:

docker ps

如圖所示:

運(yùn)行中容器列表

其中CONTAINER_ID是啟動(dòng)容器的時(shí)候生成的ID,IMAGE是該容器使用的鏡像,COMMOND是容器啟動(dòng)的時(shí)候調(diào)用的命令,CREATE是容器的創(chuàng)建時(shí)間;STATUS是當(dāng)前容器的啟動(dòng)狀態(tài);PORTS是容器系統(tǒng)所使用的端口號(hào),Redis默認(rèn)使用的6379端口,NAMES是剛才在啟動(dòng)容器的時(shí)候給容器指定的名稱(--name后面的),在這里可以看到我們剛剛啟動(dòng)的redis容器--redis-test
通過下面的命令可以查看運(yùn)行中和停止?fàn)顟B(tài)的容器:

docker ps -a

(3)停止和啟動(dòng)容器

  • 停止容器
    停止容器可以使用下面的命令:
docker stop container-name/container-id

也就是說可以通過指定容器名或者容器的id來停止容器
以停止上面的redis為例:

docker stop redis-test

或者

docker stop  7048692cb777
  • 啟動(dòng)容器
    啟動(dòng)容器通過以下的命令:
docker start container-name/container-id

再次啟動(dòng)我們剛剛停止的redis容器

docker start redis-test

注意:運(yùn)行鏡像為容器的命令和運(yùn)行停止的容器的命令,一個(gè)是docker run,一個(gè)是docker start

  • 端口映射
    Docker容器中運(yùn)行的軟件所使用的端口,在本機(jī)和本機(jī)的局域網(wǎng)是不能訪問的,所以我們就需要將Docker容器中的端口映射到當(dāng)前主機(jī)的端口上,這樣就可以在本機(jī)和本機(jī)所在的局域網(wǎng)就能夠訪問該軟件了.
    Dokcer的端口映射是通過一個(gè)-p參數(shù)來實(shí)現(xiàn)的。我們以剛才的redis為例,映射容器的6379端口到本機(jī)(docker的宿主機(jī))的6378端口,命令如下:
docker run -d -p 6378:6379 --name port-redis redis

-d指的是以守護(hù)態(tài)運(yùn)行,因?yàn)楹芏嗲闆r下需要讓容器在后臺(tái)運(yùn)行而不是直接把執(zhí)行命令的結(jié)果輸出在當(dāng)前的宿主機(jī)下(控制臺(tái))
-p指定端口
--name指定容器名

  • 刪除容器
    刪除單個(gè)容器:
docker rm container-id

刪除所有容器的命令:

docker rm ${docker ps -a -q}
  • 容器日志
    查看當(dāng)前容器日志的命令:
docker 
  • 登錄容器(進(jìn)入容器)
    運(yùn)行中的容器其實(shí)是一個(gè)功能完備的Linux操作系統(tǒng),所以我們可以像常規(guī)的的操作系統(tǒng)一樣登錄并訪問容器。
    我們可以使用下面的命令,登錄訪問當(dāng)前運(yùn)行中的容器,登錄后我們可以在容器中進(jìn)行常規(guī)的Linux系統(tǒng)操作指令,還可以使用exit命令退出登錄
docker exec -it container-id/container-name bash

-it:這是兩個(gè)命令,i指的是交互式操作,-t指的是終端,這里我們是進(jìn)入bash執(zhí)行一些命令,并查看返回結(jié)果,因此我們需要交互式終端.(可以簡(jiǎn)單理解為:主線程是阻塞式的(相當(dāng)于java中的main線程,而工作線程相當(dāng)于我們new了一個(gè)Thread并start,工作線程的運(yùn)行我們是交互不了的,而這里的交互式終端就是運(yùn)行了這個(gè)容器))。注意 docker run 是啟動(dòng)一個(gè)鏡像為容器,對(duì)于同一個(gè)image,每次docker run的時(shí)候啟動(dòng)的是不同的容器。

示例:
doker run -it -rm ubuntu:16.04 bash
以交互式終端的方式運(yùn)行名為ubuntu:16.04的鏡像為一個(gè)容器,-rm表示當(dāng)退出容器的時(shí)候,刪除該容器, bash指的是我們希望有個(gè)交互式的shell,因此用的是bash

拓展:鏡像相當(dāng)于java中的類,而容器相當(dāng)于創(chuàng)建出來的對(duì)象,容器啟動(dòng)以后,相當(dāng)于在內(nèi)存中創(chuàng)建了一個(gè)對(duì)象,當(dāng)容器退出的時(shí)候,這個(gè)對(duì)象的狀態(tài)變了,并且可以發(fā)現(xiàn)容器運(yùn)行時(shí)和停止時(shí)他們的container_id是不一樣的.有的時(shí)候?yàn)榱斯?jié)約空間,在容器停止的時(shí)候就將次容器刪除掉,所以就會(huì)在run的時(shí)候加上-rm的指令

參考:https://www.funtl.com/zh/docker 強(qiáng)烈推薦
參考:《Spring Boot實(shí)戰(zhàn)》,感興趣的可以閱讀下這本書,強(qiáng)烈推薦。

最后編輯于
?著作權(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)容

  • docker命令簡(jiǎn)單使用 1.1 鏡像 Docker 運(yùn)行容器前需要本地存在對(duì)應(yīng)的鏡像,如果本地不存在該鏡像,Do...
    道無虛閱讀 599評(píng)論 0 0
  • Docker現(xiàn)在是一門非常流行的技術(shù),其實(shí)之前就一直想學(xué),不過一是沒什么時(shí)間;二是沒有結(jié)合實(shí)踐,官方文檔又介紹的不...
    tommy990607閱讀 1,123評(píng)論 0 2
  • dokcer的基本組成 鏡像 相當(dāng)于掛在了root文件系統(tǒng)的Linux。 容器 鏡像與容器的關(guān)系,就像是面向?qū)ο笾?..
    彩虹之夢(mèng)閱讀 599評(píng)論 0 0
  • 一、基本概念 1. 什么是Docker ... 2. Docker的基本概念 鏡像(Image) 是一個(gè)只讀模板,...
    Air_cc閱讀 6,817評(píng)論 0 2
  • 0x01 核心概念 Docker鏡像類似于虛擬機(jī)鏡像,可以理解為一個(gè)面向Docker引擎的只讀模板,包含了文件系統(tǒng)...
    閑云逸心閱讀 4,955評(píng)論 0 9

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