在探討微服務(wù)的路上,docker的概念也是經(jīng)常出現(xiàn),自己只是粗略的了解docker是個啥,現(xiàn)在是時候認(rèn)真學(xué)習(xí)一下docker了,親自操作一下才能更加深入的理解。

00. docker介紹
docker是開源的一個基于輕量級虛擬化技術(shù)的容器引擎項(xiàng)目。它通過分層鏡像標(biāo)準(zhǔn)化和內(nèi)核虛擬化技術(shù),使得應(yīng)用開發(fā)者和運(yùn)維工程師可以以統(tǒng)一的方式跨平臺發(fā)布應(yīng)用,并且以幾乎沒有額外開銷的情況下提供資源隔離的應(yīng)用運(yùn)行環(huán)境。
docker有三個核心概念:
- 鏡像
docker鏡像,是一個只讀的鏡像,位于第1層,它不能被修改或不能保存狀態(tài)。
一個docker鏡像可以構(gòu)建于另一個docker鏡像之上,這種層疊關(guān)系可以是多層的。第1層的鏡像層我們稱之為基礎(chǔ)鏡像(Base Image),其他層的鏡像(除了最頂層)我們稱之為父層鏡像(Parent Image)。這些鏡像繼承了他們的父層鏡像的所有屬性和設(shè)置,并在Dockerfile中添加了自己的配置。
鏡像是用來創(chuàng)建Docker容器的。一個鏡像可以包含一個完整的操作系統(tǒng)環(huán)境和用戶需要的其它應(yīng)用程序。在docker hub 里面有大量現(xiàn)成的鏡像提供下載。一個鏡像可以創(chuàng)建多個容器。 - 容器
容器是使用docker鏡像創(chuàng)建的。
它會在所有的鏡像層之上增加一個可寫層。這個可寫層有運(yùn)行在CPU上的進(jìn)程,而且有兩個不同的狀態(tài):運(yùn)行態(tài)(Running)和退出態(tài)(Exited)。這就是Docker容器。當(dāng)我們使用docker run啟動容器,Docker容器就進(jìn)入運(yùn)行態(tài),當(dāng)我們停止Docker容器時,它就進(jìn)入退出態(tài)。
當(dāng)我們有一個正在運(yùn)行的Docker容器時,從運(yùn)行態(tài)到停止態(tài),我們對它所做的一切變更都會永久地寫到容器的文件系統(tǒng)中。要切記,對容器的變更是寫入到容器的文件系統(tǒng)的,而不是寫入到Docker鏡像中的。
我們可以用同一個鏡像啟動多個Docker容器,這些容器啟動后都是活動的,彼此還是相互隔離的。我們對其中一個容器所做的變更只會局限于那個容器本身。 - 倉庫
倉庫是集中存放鏡像文件的地方。
每個倉庫中又包含了多個鏡像,每個鏡像有不同的標(biāo)簽(tag)。
最大的公開倉庫是DockerHub,存放了數(shù)量龐大的鏡像供用戶下載。國內(nèi)的公開倉庫包括DockerPool等,可以提供大陸用戶更穩(wěn)定快速的訪問。當(dāng)然,用戶也可以在本地網(wǎng)絡(luò)內(nèi)創(chuàng)建一個私有倉庫。
01. docker準(zhǔn)備
準(zhǔn)備一個能夠連接互聯(lián)網(wǎng)的Ubuntu操作系統(tǒng),Ubuntu是安裝docker最好的環(huán)境。docker是在ubuntu的環(huán)境下開發(fā)的,測試也是最充分的環(huán)境。
安裝docker
這里的安裝docker指的是安裝docker的后臺守護(hù)進(jìn)程,安裝docker的方式有兩種,在線安裝和離線安裝。我使用的是在線安裝的方式,命令如下:
sudo apt install docker.io。免sudo使用docker命令
安裝完成docker的守護(hù)進(jìn)程之后,默認(rèn)服務(wù)是啟動。但是此時我們在使用各種docker命令的時候都需要使用sudo權(quán)限,這樣顯然是有些麻煩的,下面一系列命令幫你免sudo使用docker命令:
sudo groupadd docker
sudo gpasswd -a ${USER} docker
sudo service docker restart
newgrp - docker配置docker加速器
由于國內(nèi)用戶訪問docker hub緩慢的問題,下載鏡像速度很慢,需要配置一下加速器,國內(nèi)很多docker平臺都提供了加速器服務(wù),這些服務(wù)一般都是免費(fèi)的。我這里使用的是DaoCloud的加速器服務(wù),配置方法很簡單:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://475d9f5e.m.daocloud.io
使用cat /etc/docker/daemon.json查看是否配置成功,輸出如下為成功:
{"registry-mirrors": ["http://475d9f5e.m.daocloud.io"]}
更詳細(xì)的配置方法見鏈接。
02. docker體驗(yàn)
- 查看docker的版本:
docker --version - 從倉庫種搜索一個鏡像:
docker search tomcat - 挑選一個鏡像下載:
docker pull tomcat,這里選的是鏡像名為tomcat的鏡像。 - 查看擁有的鏡像:
docker images - 刪除一個鏡像:
docker rmi <image id> - 創(chuàng)建一個tomcat的docker容器:
docker run -p 8080:8080 tomcat,這里的-p參數(shù)是映射主機(jī)端口和容器端口。 - 查看正在運(yùn)行的容器:
docker ps - 查看所有的容器:
docker ps -a - 停止一個正在運(yùn)行的容器:
docker stop 容器名(容器id前四位) - 啟動一個已創(chuàng)建的容器:
docker start 容器名(容器id前四位) - 重啟一個正在運(yùn)行的容器:
docker restart 容器名(容器id前四位) - 刪除一個已創(chuàng)建的容器:
docker rm 容器名(容器id前四位) - 一個復(fù)雜點(diǎn)的命令:
docker run -i -t --name hello_tomcat -p 8081:8080 tomcat /bin/bash,其中-i -t是進(jìn)入到容器的交互式的窗口,--name為容器指定一個名字。
到這里為止,就簡單體驗(yàn)了一把docker容器的基本操作。