摘要:分鐘快速入門教程一歡迎來(lái)到世界與虛擬化在沒有的時(shí)代,我們會(huì)使用硬件虛擬化虛擬機(jī)以提供隔離。倉(cāng)庫(kù)分為公開倉(cāng)庫(kù)和私有倉(cāng)庫(kù),最大的公開倉(cāng)庫(kù)是官方倉(cāng)庫(kù),國(guó)內(nèi)的公開倉(cāng)庫(kù)也有很多選擇,例如阿里云等。
30 分鐘快速入門 Docker 教程 一、歡迎來(lái)到 Docker 世界 1. Docker 與虛擬化
在沒有 Docker 的時(shí)代,我們會(huì)使用硬件虛擬化(虛擬機(jī))以提供隔離。這里,虛擬機(jī)通過(guò)在操作系統(tǒng)上建立了一個(gè)中間虛擬軟件層 Hypervisor ,并利用物理機(jī)器的資源虛擬出多個(gè)虛擬硬件環(huán)境來(lái)共享宿主機(jī)的資源,其中的應(yīng)用運(yùn)行在虛擬機(jī)內(nèi)核上。但是,虛擬機(jī)對(duì)硬件的利用率存在瓶頸,因?yàn)樘摂M機(jī)很難根據(jù)當(dāng)前業(yè)務(wù)量動(dòng)態(tài)調(diào)整其占用的硬件資源,因此容器化技術(shù)得以流行。其中,Docker 是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上。
Docker 容器不使用硬件虛擬化,它的守護(hù)進(jìn)程是宿主機(jī)上的一個(gè)進(jìn)程,換句話說(shuō),應(yīng)用直接運(yùn)行在宿主機(jī)內(nèi)核上。因?yàn)槿萜髦羞\(yùn)行的程序和計(jì)算機(jī)的操作系統(tǒng)之間沒有額外的中間層,沒有資源被冗余軟件的運(yùn)行或虛擬硬件的模擬而浪費(fèi)掉。
Docker 的優(yōu)勢(shì)不僅如此,我們來(lái)比較一番。
特性 | Docker | 虛擬機(jī) |
---|---|---|
啟動(dòng)速度 | 秒級(jí) | 分鐘級(jí) |
交付/部署 | 開發(fā)、測(cè)試、生產(chǎn)環(huán)境一致 | 無(wú)成熟體系 |
性能 | 近似物理機(jī) | 性能損耗大 |
體量 | 極?。∕B) | 較大(GB) |
遷移/擴(kuò)展 | 跨平臺(tái),可復(fù)制 | 較為復(fù)雜 |
Docker 由鏡像(Image)、容器(Container)、倉(cāng)庫(kù)(Repository) 三部分組成。
Docker 的鏡像可以簡(jiǎn)單的類比為電腦裝系統(tǒng)用的系統(tǒng)盤,包括操作系統(tǒng),以及必要的軟件。例如,一個(gè)鏡像可以包含一個(gè)完整的 centos 操作系統(tǒng)環(huán)境,并安裝了 Nginx 和 Tomcat 服務(wù)器。注意的是,鏡像是只讀的。這一點(diǎn)也很好理解,就像我們刻錄的系統(tǒng)盤其實(shí)也是可讀的。我們可以使用 docker images 來(lái)查看本地鏡像列表。
Docker 的容器可以簡(jiǎn)單理解為提供了系統(tǒng)硬件環(huán)境,它是真正跑項(xiàng)目程序、消耗機(jī)器資源、提供服務(wù)的東西。例如,我們可以暫時(shí)把容器看作一個(gè) Linux 的電腦,它可以直接運(yùn)行。那么,容器是基于鏡像啟動(dòng)的,并且每個(gè)容器都是相互隔離的。注意的是,容器在啟動(dòng)的時(shí)候基于鏡像創(chuàng)建一層可寫層作為最上層。我們可以使用 docker ps -a 查看本地運(yùn)行過(guò)的容器。
Docker 的倉(cāng)庫(kù)用于存放鏡像。這一點(diǎn),和 Git 非常類似。我們可以從中心倉(cāng)庫(kù)下載鏡像,也可以從自建倉(cāng)庫(kù)下載。同時(shí),我們可以把制作好的鏡像 commit 到本地,然后 push 到遠(yuǎn)程倉(cāng)庫(kù)。倉(cāng)庫(kù)分為公開倉(cāng)庫(kù)和私有倉(cāng)庫(kù),最大的公開倉(cāng)庫(kù)是官方倉(cāng)庫(kù) Dock Hub,國(guó)內(nèi)的公開倉(cāng)庫(kù)也有很多選擇,例如阿里云等。
3. Docker 促使開發(fā)流程變更筆者認(rèn)為,Docker 對(duì)開發(fā)流程的影響在于使環(huán)境標(biāo)準(zhǔn)化。例如,原來(lái)我們存在三個(gè)環(huán)境:開發(fā)(日常)環(huán)境、測(cè)試環(huán)境、生產(chǎn)環(huán)境。這里,我們對(duì)于每個(gè)環(huán)境都需要部署相同的軟件、腳本和運(yùn)行程序,如圖所示。事實(shí)上,對(duì)于啟動(dòng)腳本內(nèi)容都是一致的,但是沒有統(tǒng)一維護(hù),經(jīng)常會(huì)出問(wèn)題。此外,對(duì)于運(yùn)行程序而言,如果所依賴的底層運(yùn)行環(huán)境不一致,也會(huì)造成困擾和異常。
現(xiàn)在,我們通過(guò)引入 Docker 之后,我們只需要維護(hù)一個(gè) Docker 鏡像。換句話說(shuō),多套環(huán)境,一個(gè)鏡像,實(shí)現(xiàn)系統(tǒng)級(jí)別的一次構(gòu)建到處運(yùn)行。此時(shí),我們把運(yùn)行腳本標(biāo)準(zhǔn)化了,把底層軟件鏡像化了,然后對(duì)于相同的將要部署的程序?qū)嵭袠?biāo)準(zhǔn)化部署。因此,Docker 為我們提供了一個(gè)標(biāo)準(zhǔn)化的運(yùn)維模式,并固化運(yùn)維步驟和流程。
通過(guò)這個(gè)流程的改進(jìn),我們更容易實(shí)現(xiàn) DevOps 的目標(biāo),因?yàn)槲覀兊溺R像生成后可以跑在任何系統(tǒng),并快速部署。此外,使用 Docker 的很大動(dòng)力是基于 Docker 實(shí)現(xiàn)彈性調(diào)度,以更充分地利用機(jī)器資源,節(jié)省成本。
哈哈,筆者在使用 Docker 過(guò)程中,還發(fā)現(xiàn)了一些很棒的收益點(diǎn),例如我們發(fā)布回滾的時(shí)候只需要切換 TAG 并重啟即可。還比如,我們對(duì)環(huán)境升級(jí),也只需要升級(jí)基礎(chǔ)鏡像,那么新構(gòu)建的應(yīng)用鏡像,自動(dòng)會(huì)引用新的版本。(歡迎補(bǔ)充~~~)
二、從搭建 Web 服務(wù)器開始說(shuō)起 1. 環(huán)境先行,安裝 Docker現(xiàn)在,我們需要安裝以下步驟安裝 Docker。
注冊(cè)帳號(hào):在 https://hub.docker.com/ 注冊(cè)賬號(hào)。 下載安裝
官方下載地址:(Mac):https://download.docker.com/m...
阿里云下載地址(Mac):http://mirrors.aliyun.com/doc...
阿里云下載地址(Windows):
http://mirrors.aliyun.com/doc...
安裝指南
這里,雙擊剛剛下載的 Doker.dmg 安裝包進(jìn)行安裝。
安裝完成后啟動(dòng), Mac 頂部導(dǎo)航欄出現(xiàn)了一個(gè)圖標(biāo),通過(guò)菜單可以進(jìn)行 docker 配置和退出等操作。
官方指南:https://docs.docker.com/install/ 阿里云指南(Linux):https://yq.aliyun.com/articles/110806?spm=5176.8351553.0.0.468b1991jdT95t
設(shè)置加速服務(wù)
市面上有很多加速服務(wù)的提供商,如:DaoCloud,阿里云等。這里,筆者使用的是阿里云。(注意的是,筆者操作系統(tǒng)是 Mac,其他操作系列參見阿里云操作文檔)
右鍵點(diǎn)擊桌面頂欄的 docker 圖標(biāo),選擇 Preferences ,在 Daemon 標(biāo)簽(Docker 17.03 之前版本為 Advanced 標(biāo)簽)下的 Registry mirrors 列表中將
https://xxx.mirror.aliyuncs.com 加到"registry-mirrors"的數(shù)組里,點(diǎn)擊 Apply & Restart 按鈕,等待 Docker 重啟并應(yīng)用配置的鏡像加速器。
阿里云操作文檔:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
查看版本
至此,我們已經(jīng)安裝完成了。這里,我們來(lái)查看版本。
docker version
查看結(jié)果,如下所示。
2. 實(shí)干派,從搭建 Web 服務(wù)器開始我們作為實(shí)干派,那么先來(lái)搭建一個(gè) Web 服務(wù)器吧。然后,筆者帶你慢慢理解這個(gè)過(guò)程中,做了什么事情。首先,我們需要拉取 centos 鏡像。
docker run -p 80 --name web -i -t centos /bin/bash
緊接著,我們安裝 nginx 服務(wù)器,執(zhí)行以下命令:
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
安裝完 Nginx 源后,就可以正式安裝 Nginx 了。
yum install -y nginx
至此,我們?cè)佥斎?whereis nginx 命令就可以看到安裝的路徑了。最后,我們還需要將 Nginx 跑起來(lái)。
nginx
現(xiàn)在,我們執(zhí)行 ctrl + P + Q 切換到后臺(tái)。然后,通過(guò) docker ps -a 來(lái)查看隨機(jī)分配的端口。
這里,筆者分配的端口是 32769 ,那么通過(guò)瀏覽器訪問(wèn) http://127.0.0.1:32769 即可。
大功告成,哈哈哈~
3. 復(fù)盤理解全過(guò)程現(xiàn)在,我們來(lái)理解下這個(gè)流程。首先,我們輸入 docker run -p 80 --name web -i -t centos /bin/bash 命令會(huì)運(yùn)行交互式容器,其中 -i 選項(xiàng)告訴 Docker 容器保持標(biāo)準(zhǔn)輸入流對(duì)容器開放,即使容器沒有終端連接,另一個(gè) -t 選項(xiàng)告訴 Docker 為容器分配一個(gè)虛擬終端,以便于我們接下來(lái)安裝 Nginx 服務(wù)器。(筆者備注:Docker 還支持輸入 -d 選項(xiàng)告訴 Docker 在后臺(tái)運(yùn)行容器的守護(hù)進(jìn)程)
Docker 會(huì)為我們創(chuàng)建的每一個(gè)容器自動(dòng)生成一個(gè)隨機(jī)的名稱。事實(shí)上,這種方式雖然便捷,但是可讀性很差,并且對(duì)我們后期維護(hù)的理解成本會(huì)比較大。因此,我們通過(guò) --name web 選項(xiàng)告訴 Docker 創(chuàng)建一個(gè)名稱是 web 的容器。此外,我們通過(guò) -p 80 告訴 Docker 開放 80 端口,那么, Nginx 才可以對(duì)外通過(guò)訪問(wèn)和服務(wù)。但是,我們的宿主機(jī)器會(huì)自動(dòng)做端口映射,比如上面分配的端口是 32769 ,注意的是,如果關(guān)閉或者重啟,這個(gè)端口就變了,那么怎么解決固定端口的問(wèn)題,筆者會(huì)在后面詳細(xì)剖析和帶你實(shí)戰(zhàn)。
這里,還有一個(gè)非常重要的知識(shí)點(diǎn) docker run 。Docker 通過(guò) run 命令來(lái)啟動(dòng)一個(gè)新容器。Docker 首先在本機(jī)中尋找該鏡像,如果沒有安裝,Docker 在 Docker Hub 上查找該鏡像并下載安裝到本機(jī),最后 Docker 創(chuàng)建一個(gè)新的容器并啟動(dòng)該程序。
但是,當(dāng)?shù)诙螆?zhí)行 docker run 時(shí),因?yàn)?Docker 在本機(jī)中已經(jīng)安裝該鏡像,所以 Docker 會(huì)直接創(chuàng)建一個(gè)新的容器并啟動(dòng)該程序。
注意的是,docker run 每次使用都會(huì)創(chuàng)建一個(gè)新的容器,因此,我們以后再次啟動(dòng)這個(gè)容器時(shí),只需要使用命令 docker start 即可。這里, docker start 的作用在用重新啟動(dòng)已存在的鏡像,而docker run 包含將鏡像放入容器中 docker create ,然后將容器啟動(dòng) docker start ,如圖所示。
現(xiàn)在,我們可以在上面的案例的基礎(chǔ)上,通過(guò) exit 命令關(guān)閉 Docker 容器。當(dāng)然,如果我們運(yùn)行的是后臺(tái)的守護(hù)進(jìn)程,我們也可以通過(guò) docker stop web 來(lái)停止。注意的是,docker stop 和 docker kill 略有不同,docker stop 發(fā)送 SIGTERM 信號(hào),而 docker kill 發(fā)送SIGKILL 信號(hào)。然后,我們使用 docker start 重啟它。
docker start web
Docker 容器重啟后會(huì)沿用 docker run 命令指定的參數(shù)來(lái)運(yùn)行,但是,此時(shí)它還是后臺(tái)運(yùn)行的。我們必須通過(guò) docker attach 命令切換到運(yùn)行交互式容器。
docker attach web4. 不止如此,還有更多命令
Docker 提供了非常豐富的命令。所謂一圖勝千言,我們可以從下面的圖片了解到很多信息和它們之前的用途。(可以直接跳過(guò)閱讀,建議收藏,便于擴(kuò)展閱讀)
官方閱讀鏈接:https://docs.docker.com/engin...5. 進(jìn)階:倉(cāng)庫(kù)與軟件安裝的簡(jiǎn)化
還記得筆者在文章開頭介紹的「鏡像、容器和倉(cāng)庫(kù)」嗎?Docker 的倉(cāng)庫(kù)用于存放鏡像。我們可以從中心倉(cāng)庫(kù)下載鏡像,也可以從自建倉(cāng)庫(kù)下載。同時(shí),我們可以把制作好的鏡像從本地推送到遠(yuǎn)程倉(cāng)庫(kù)。
首先,筆者先引入一個(gè)知識(shí)點(diǎn):Docker 的鏡像就是它的文件系統(tǒng),一個(gè)鏡像可以放在另外一個(gè)鏡像的上層,那么位于下層的就是它的父鏡像。所以,Docker 會(huì)存在很多鏡像層,每個(gè)鏡像層都是只讀的,并且不會(huì)改變。當(dāng)我們創(chuàng)建一個(gè)新的容器時(shí),Docker 會(huì)構(gòu)建出一個(gè)鏡像棧,并在棧的最頂層添加一個(gè)讀寫層,如圖所示。
現(xiàn)在,我們可以通過(guò) docker images 命令查看本地的鏡像。
docker images
這里,對(duì)幾個(gè)名詞解釋一下含義。
REPOSITORY:倉(cāng)庫(kù)名稱。
TAG: 鏡像標(biāo)簽,其中 lastest 表示最新版本。注意的是,一個(gè)鏡像可以有多個(gè)標(biāo)簽,那么我們就可以通過(guò)標(biāo)簽來(lái)管理有用的版本和功能標(biāo)-簽。
IMAGE ID :鏡像唯一ID。
CREATED :創(chuàng)建時(shí)間。
SIZE :鏡像大小。
那么,如果第一次我們通過(guò) docker pull centos:latest 拉取鏡像,那么當(dāng)我們執(zhí)行 docker run -p 80 --name web -i -t centos /bin/bash 時(shí),它就不會(huì)再去遠(yuǎn)程獲取了,因?yàn)楸緳C(jī)中已經(jīng)安裝該鏡像,所以 Docker 會(huì)直接創(chuàng)建一個(gè)新的容器并啟動(dòng)該程序。
事實(shí)上,官方已經(jīng)提供了安裝好 Nginx 的鏡像,我們可以直接使用。現(xiàn)在,我們通過(guò)拉取鏡像的方式重新構(gòu)建一個(gè) Web 服務(wù)器。首先,我們通過(guò) docker search 來(lái)查找鏡像。我們獲取到 Nginx 的鏡像清單。
docker search nginx
補(bǔ)充一下,我們也可以通過(guò)訪問(wèn) Docker Hub (https://hub.docker.com/)搜索倉(cāng)庫(kù),那么 star 數(shù)越多,說(shuō)明它越靠譜,可以放心使用。
現(xiàn)在,我們通過(guò) docker pull nginx 拉取最新的 Nginx 的鏡像。當(dāng)然,我們也可以通過(guò) docker pull nginx:latest 來(lái)操作。
docker pull nginx
然后,我們創(chuàng)建并運(yùn)行一個(gè)容器。與前面不同的是,我們通過(guò) -d 選項(xiàng)告訴 Docker 在后臺(tái)運(yùn)行容器的守護(hù)進(jìn)程。并且,通過(guò) 8080:80 告訴 Docker 8080 端口是對(duì)外開放的端口,80 端口對(duì)外開放的端口映射到容器里的端口號(hào)。
docker run -p 8080:80 -d --name nginx nginx
我們?cè)偻ㄟ^(guò) docker ps -a 來(lái)查看,發(fā)現(xiàn)容器已經(jīng)后臺(tái)運(yùn)行了,并且后臺(tái)執(zhí)行了 nginx 命令,并對(duì)外開放 8080 端口。
因此,通過(guò)瀏覽器訪問(wèn) http://127.0.0.1:8080 即可。
三、構(gòu)建我的鏡像通過(guò)上面的學(xué)習(xí),筆者相信你已經(jīng)對(duì) Docker 使用有了一個(gè)大致的了解,就好比我們通過(guò) VMware 安裝了一個(gè)系統(tǒng),并讓它跑了起來(lái),那么我們就可以在這個(gè) Linux 系統(tǒng)(CentOS 或者 Ubuntu ) 上面工作我們想要的任何事情。事實(shí)上,我們還會(huì)經(jīng)常把我們安裝好的 VMware 系統(tǒng)進(jìn)行快照備份并實(shí)現(xiàn)克隆來(lái)滿足我們下次快速的復(fù)制。這里,Docker 也可以構(gòu)建定制內(nèi)容的 Docker 鏡像,例如上面我們使用官方提供的安裝好 Nginx 的 Docker 鏡像。注意的是,我們通過(guò)基于已有的基礎(chǔ)鏡像,在上面添加鏡像層的方式構(gòu)建新鏡像而已。
總結(jié)一下,Docker 提供自定義鏡像的能力,它可以讓我們保存對(duì)基礎(chǔ)鏡像的修改,并再次使用。那么,我們就可以把操作系統(tǒng)、運(yùn)行環(huán)境、腳本和程序打包在一起,并在宿主機(jī)上對(duì)外提供服務(wù)。
Docker 構(gòu)建鏡像有兩種方式,一種方式是使用 docker commit 命令,另外一種方式使用 docker build 命令和 Dockerfile 文件。其中,不推薦使用 docker commit 命令進(jìn)行構(gòu)建,因?yàn)樗鼪]有使得整個(gè)流程標(biāo)準(zhǔn)化,因此,在企業(yè)的中更加推薦使用 docker build 命令和 Dockerfile 文件來(lái)構(gòu)建我們的鏡像。我們使用Dockerfile 文件可以讓構(gòu)建鏡像更具備可重復(fù)性,同時(shí)保證啟動(dòng)腳本和運(yùn)行程序的標(biāo)準(zhǔn)化。
1. 構(gòu)建第一個(gè) Dockerfile 文件現(xiàn)在,我們繼續(xù)實(shí)戰(zhàn)。這里,我們把一開始搭建的 Web 服務(wù)器構(gòu)建一個(gè)鏡像。首先,我們需要?jiǎng)?chuàng)建一個(gè)空的 Dokcerfile 文件。
mkdir dockerfile_test
cd dockerfile_test/
touch Dockerfile
nano Dockerfile
緊接著,我們需要編寫一個(gè) Dockerfile 文件,代碼清單如下
FROM centos:7 MAINTAINER LiangGzone "lianggzone@163.com" RUN rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm RUN yum install -y nginx EXPOSE 80
最后,我們通過(guò) docker build 命令進(jìn)行構(gòu)建。
docker build -t="lianggzone/nginx_demo:v1" .
現(xiàn)在, 我們來(lái)通過(guò) docker images 看下我們的新鏡像吧。
2. 理解 Dockerfile 全過(guò)程哇,我們通過(guò)編寫一個(gè) Dockerfile 文件順利構(gòu)建了一個(gè)新的鏡像。這個(gè)過(guò)程簡(jiǎn)單得讓人無(wú)法相信?,F(xiàn)在,讓我們來(lái)理解一下這個(gè)全過(guò)程吧。首先, FROM centos:7 是 Dockerfile 必須要的第一步,它會(huì)從一個(gè)已經(jīng)存在的鏡像運(yùn)行一個(gè)容器,換句話說(shuō),Docker 需要依賴于一個(gè)基礎(chǔ)鏡像進(jìn)行構(gòu)建。這里,我們指定 centos 作為基礎(chǔ)鏡像,它的版本是 7 (CentOS 7)。然后,我們通過(guò) MAINTAINER LiangGzone "lianggzone@163.com" 指定該鏡像的作者是 LiangGzone,郵箱是 lianggzone@163.com。這有助于告訴使用者它的作者和聯(lián)系方式。接著,我們執(zhí)行兩個(gè) RUN 指令進(jìn)行 Nginx 的下載安裝,最后通過(guò) EXPOSE 80 暴露 Dokcer 容器的 80 端口。注意的是,Docker 的執(zhí)行順序是從上而下執(zhí)行的,所以我們要明確整個(gè)流程的執(zhí)行順序。除此之外,Docker 在執(zhí)行每個(gè)指令之后都會(huì)創(chuàng)建一個(gè)新的鏡像層并且進(jìn)行提交。
我們使用 docker build 命令進(jìn)行構(gòu)建,指定 - t 告訴 Docker 鏡像的名稱和版本。注意的是,如果沒有指定任何標(biāo)簽,Docker 將會(huì)自動(dòng)為鏡像設(shè)置一個(gè) lastest 標(biāo)簽。還有一點(diǎn),我們最后還有一個(gè) . 是為了讓 Docker 到當(dāng)前本地目錄去尋找 Dockerfile 文件。注意的是,Docker 會(huì)在每一步構(gòu)建都會(huì)將結(jié)果提交為鏡像,然后將之前的鏡像層看作緩存,因此我們重新構(gòu)建類似的鏡像層時(shí)會(huì)直接復(fù)用之前的鏡像。如果我們需要跳過(guò),可以使用 --no-cache 選項(xiàng)告訴 Docker 不進(jìn)行緩存。
3. Dockerfile 指令詳解Dockerfile 提供了非常多的指令。筆者這里特別整理了一份清單,建議收藏查看。
官方地址:https://docs.docker.com/engin...指令辨別一:RUN、CMD、ENTRYPOINT
RUN 、 CMD 、 ENTRYPOINT 三個(gè)指令的用途非常相識(shí),不同在于,RUN 指令是在容器被構(gòu)建時(shí)運(yùn)行的命令,而CMD 、 ENTRYPOINT 是啟動(dòng)容器時(shí)執(zhí)行 shell 命令,而 RUN 會(huì)被 docker run 命令覆蓋,但是 ENTRYPOINT 不會(huì)被覆蓋。事實(shí)上,docker run 命令指定的任何參數(shù)都會(huì)被當(dāng)作參數(shù)再次傳遞給 ENTRYPOINT 指令。CMD 、 ENTRYPOINT 兩個(gè)指令之間也可以一起使用。例如,我們 可以使用 ENTRYPOINT 的 exec 形式設(shè)置固定的默認(rèn)命令和參數(shù),然后使用任一形式的 CMD 來(lái)設(shè)置可能更改的其他默認(rèn)值。
FROM ubuntu ENTRYPOINT ["top", "-b"] CMD ["-c"]指令辨別二:ADD、COPY
ADD 、 COPY 指令用法一樣,唯一不同的是 ADD 支持將歸檔文件(tar, gzip, bzip2, etc)做提取和解壓操作。注意的是,COPY 指令需要復(fù)制的目錄一定要放在 Dockerfile 文件的同級(jí)目錄下。
4. 將鏡像推送到遠(yuǎn)程倉(cāng)庫(kù) 遠(yuǎn)程倉(cāng)庫(kù):Docker Hub鏡像構(gòu)建完畢之后,我們可以將它上傳到 Docker Hub 上面。首先,我們需要通過(guò) docker login 保證我們已經(jīng)登錄了。緊接著,我們使用 docker push 命令進(jìn)行推送。
docker push lianggzone/nginx_demo:v1
這里,我們了解下它的使用,格式是 docker push [OPTIONS] NAME[:TAG] ,其中,筆者設(shè)置 NAME 是 lianggzone/nginx_demo,TAG 是 v1。 (筆者注:推送 Docker Hub 速度很慢,耐心等待) 最后,上傳完成后訪問(wèn):https://hub.docker.com/u/lian...
遠(yuǎn)程倉(cāng)庫(kù):阿里云
同時(shí),我們也可以使用國(guó)內(nèi)的倉(cāng)庫(kù),比如阿里云。首先,在終端中輸入訪問(wèn)憑證,登錄 Registry 實(shí)例。如果你不知道是哪個(gè),可以訪問(wèn) https://cr.console.aliyun.com...。
docker login --username=帳號(hào) registry.cn-hangzhou.aliyuncs.com
現(xiàn)在,將鏡像推送到阿里云鏡像倉(cāng)庫(kù)。其中, docker tag [IMAGE_ID] registry.cn-hangzhou.aliyuncs.com/[命名空間]/[鏡像名稱]:[版本] 和 docker push registry.cn-hangzhou.aliyuncs.com/[命名空間]/[鏡像名稱]:[版本] 命令的使用如下所示。
docker tag 794c07361565 registry.cn-hangzhou.aliyuncs.com/lianggzone/nginx_demo:v1
docker push registry.cn-hangzhou.aliyuncs.com/lianggzone/nginx_demo:v1
最后,上傳完成后訪問(wèn):https://cr.console.aliyun.com...,如圖所示。
5. Dockerfile 的 Github 源碼地址這里,附上我整理的 Dockerfile 的倉(cāng)庫(kù)。后面,筆者會(huì)陸續(xù)更新用到的一些常用文件,歡迎 star 關(guān)注。
https://github.com/lianggzone...附:參考資料
《Docker實(shí)戰(zhàn)》
《第一本Docker書》
Docker 命令參考文檔
Dockerfile 鏡像構(gòu)建參考文檔
寫在末尾
【服務(wù)端思維】:我們一起聊聊服務(wù)端核心技術(shù),探討一線互聯(lián)網(wǎng)的項(xiàng)目架構(gòu)與實(shí)戰(zhàn)經(jīng)驗(yàn)。同時(shí),擁有眾多技術(shù)大牛的「后端圈」大家庭,期待你的加入,一群同頻者,一起成長(zhǎng),一起精進(jìn),打破認(rèn)知的局限性。
更多精彩文章,盡在「服務(wù)端思維」!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/27784.html
摘要:分鐘快速入門教程一歡迎來(lái)到世界與虛擬化在沒有的時(shí)代,我們會(huì)使用硬件虛擬化虛擬機(jī)以提供隔離。倉(cāng)庫(kù)分為公開倉(cāng)庫(kù)和私有倉(cāng)庫(kù),最大的公開倉(cāng)庫(kù)是官方倉(cāng)庫(kù),國(guó)內(nèi)的公開倉(cāng)庫(kù)也有很多選擇,例如阿里云等。 原文地址:梁桂釗的博客博客地址:http://blog.720ui.com 歡迎關(guān)注公眾號(hào):「服務(wù)端思維」。一群同頻者,一起成長(zhǎng),一起精進(jìn),打破認(rèn)知的局限性。 30 分鐘快速入門 Docker 教程...
摘要:分鐘快速入門教程一歡迎來(lái)到世界與虛擬化在沒有的時(shí)代,我們會(huì)使用硬件虛擬化虛擬機(jī)以提供隔離。倉(cāng)庫(kù)分為公開倉(cāng)庫(kù)和私有倉(cāng)庫(kù),最大的公開倉(cāng)庫(kù)是官方倉(cāng)庫(kù),國(guó)內(nèi)的公開倉(cāng)庫(kù)也有很多選擇,例如阿里云等。 原文地址:梁桂釗的博客博客地址:http://blog.720ui.com 歡迎關(guān)注公眾號(hào):「服務(wù)端思維」。一群同頻者,一起成長(zhǎng),一起精進(jìn),打破認(rèn)知的局限性。 30 分鐘快速入門 Docker 教程...
摘要:編程書籍的整理和收集最近一直在學(xué)習(xí)深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的東西,發(fā)現(xiàn)深入地去學(xué)習(xí)就需要不斷的去提高自己算法和高數(shù)的能力然后也找了很多的書和文章,隨著不斷的學(xué)習(xí),也整理了下自己的學(xué)習(xí)筆記準(zhǔn)備分享出來(lái)給大家后續(xù)的文章和總結(jié)會(huì)繼續(xù)分享,先分享一部分的 編程書籍的整理和收集 最近一直在學(xué)習(xí)deep learning深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的東西,發(fā)現(xiàn)深入地去學(xué)習(xí)就需要不斷的去提高自己算法和高數(shù)的能力然后...
閱讀 4077·2021-10-08 10:04
閱讀 3060·2021-08-11 11:20
閱讀 2730·2021-07-25 21:37
閱讀 2680·2019-08-30 12:44
閱讀 2305·2019-08-30 11:12
閱讀 1313·2019-08-26 13:45
閱讀 2337·2019-08-26 11:53
閱讀 3056·2019-08-26 11:32