Docker
Getting Started
1.打開cmd窗口輸入腥光,docker運(yùn)行指令
docker run -d -p 80:80 docker/getting-started
簡寫版本: docker run -dp 80:80 docker/getting-started
參數(shù)解釋
-d: -以分離模式運(yùn)行容器(在后臺)
-p 80:80: -將主機(jī)的端口80映射到容器中的端口80
getting-started: -使用的映像
2.什么是容器()
簡單地說愧驱,容器只是您機(jī)器上與主機(jī)上所有其他進(jìn)程隔離的另一個進(jìn)程。這種隔離利用了內(nèi)核名稱空間和cgroup,這些特性在Linux中已經(jīng)存在很長時間了褒傅。Docker致力于使這些功能易于接近和使用乾戏。
3.什么是容器圖像
在運(yùn)行容器時,它使用一個獨(dú)立的文件系統(tǒng)直颅。此自定義文件系統(tǒng)由容器映像提供氧吐。由于映像包含容器的文件系統(tǒng),因此它必須包含運(yùn)行應(yīng)用程序所需的所有內(nèi)容—所有依賴項末盔、配置筑舅、腳本、二進(jìn)制文件等陨舱。映像還包含容器的其他配置翠拣,例如環(huán)境變量、要運(yùn)行的默認(rèn)命令和其他元數(shù)據(jù)游盲。
Our Application
1.Getting our App
1-1:localhost/assets/app.zip
1-2: 解壓后用編譯器打開
2.Building the App's Container Image(構(gòu)建應(yīng)用程序的容器映像)
2-1: 在package.json同級目錄下新建Dockerfile添加以下信息
FROM node:12-alpine
RUN apk add --no-cache python g++ make
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
請檢查Dockerfile文件是否沒有類似.txt的文件擴(kuò)展名误墓。某些編輯器可能會自動附加此文件擴(kuò)展名蛮粮,這將導(dǎo)致下一步出錯。
2-2: 如果您還沒有這樣做谜慌,請打開一個終端并使用Dockerfile轉(zhuǎn)到app目錄∪幌耄現(xiàn)在使用docker build命令構(gòu)建容器映像
在app文件夾下cmd 輸入docker build -t getting-started .
此命令使用Dockerfile構(gòu)建新的容器映像。你可能已經(jīng)注意到下載了很多“層”欣范。這是因為我們指示建筑商我們要從node:12-alpine image. 但是变泄,因為我們的機(jī)器上沒有這個,所以需要下載這個圖像恼琼。
圖像下載后妨蛹,我們復(fù)制到應(yīng)用程序中,并使用yarn安裝應(yīng)用程序的依賴項晴竞。CMD指令指定從該圖像啟動容器時要運(yùn)行的默認(rèn)命令蛙卤。
最后,-t標(biāo)志標(biāo)記我們的圖像噩死。把它簡單地看作是最終圖像的可讀名稱颤难。由于我們將圖像命名為getting started,因此在運(yùn)行容器時可以引用該圖像甜滨。
這個乐严。在docker build命令的末尾,docker應(yīng)該在當(dāng)前目錄中查找Dockerfile衣摩。
Starting an App Container
在app文件夾下cmd 輸入docker run -dp 3000:3000 getting-started
Updating our App
1.在app項目下的:src/static/js/app.js文件中修改第56行
刪掉<p className="text-center">No items yet! Add one above!</p>
新增<p className="text-center">You have no todo items yet! Add one above!</p>
2.使用build來更新已有的映像昂验,用之前使用的命令構(gòu)建(注意后面的點)
docker build -t getting-started .
3.然后創(chuàng)建一個新的同期來更新代碼
docker run -dp 3000:3000 getting-started
4.你會發(fā)現(xiàn)報一個錯誤(端口被占用)
docker: Error response from daemon: driver failed programming external connectivity on endpoint laughing_burnell
(bb242b2ca4d67eba76e79474fb36bb5125708ebdabd7f45c8eaf16caaabde9dd): Bind for 0.0.0.0:3000 failed: port is already allocated.
Replacing our Old Container
使用CLI刪除容器
1.查看容器(docker ps獲取到ID)
docker ps
2.docker stop停用容器
docker stop
3.docker rm移除容器
docker rm
當(dāng)然也可以在docker應(yīng)用程序中直接移除
Starting our updated app container
1.現(xiàn)在啟動更新過的app
docker run -dp 3000:3000 getting-started
圖片.png
Sharing our App
1.創(chuàng)建回購(Create a Repo)
1-1:https://hub.docker.com/ 登錄
1-2: 點擊 Create Repository 按鈕
1-3: 對于回購的名稱, 使用 getting-started. 確保 Visibility 是 Public
1-4: 點擊 Create 按鈕!
如果出現(xiàn)下圖表示成功
圖片.png
Pushing our Image
1.在命令行端口,試著在 Docker Hub 運(yùn)行push命令艾扮,你的命令行會使用你的命名空間而不是docker
$ docker push docker/getting-started
The push refers to repository [docker.io/docker/getting-started]
An image does not exist locally with the tag: docker/getting-started
2.在網(wǎng)站使用docker login -u YOUR-USER-NAME登錄
docker login -u YOUR-USER-NAME
##在DOS輸入密碼的時候是不會提示有信息既琴,輸入完密碼之后回車就可以了
3.使用docker tag來給getting-startted映像一個新的名字,確保調(diào)出YOUR-USER-NAME
docker tag getting-started YOUR-USER-NAME/getting-started
4., Docker will use a tag called latest
docker push YOUR-USER-NAME/getting-started