Play With Docker一個免費使用的基于web界面的Docker環境
常用docker指令
可使用
docker COMMAND --help
檢視指令的用法
Docker鏡像相關
- 1、
:用于下載下傳鏡像,鏡像從遠端鏡像倉庫服務的倉庫中下載下傳,預設從Docker Hub的倉庫中拉取docker image pull
# 格式:docker pull [OPTIONS] NAME[:TAG|@DIGEST]
# 說明:如果給出tag,一般拉取latest,name一般為username/repository,digest為鏡像摘要可不給出
docker image pull ubuntu:latest
# 這個拉取标簽為latest的ubuntu官方鏡像,latest: Pulling from library/ubuntu,latest不一定是最新鏡像
複制
- 2、
:列出本地Docker主機上存儲的鏡像docker image ls
- 3、
:檢視鏡像的細節,包括鏡像層資料和中繼資料docker image inspect
# docker image inspect [OPTIONS] IMAGE [IMAGE...]
# inspect後一般跟repository name或image id
複制
- 4、
:用于删除鏡像。如果鏡像存在關聯的容器,并且容器處于運作(Up)或停止(Exit)狀态時,不允許删除該鏡像。rm後可跟repository或image iddocker image rm
- 5、
:從Docker Hub查找鏡像dicker image search
- 6、
:根據Dockerfile建構鏡像docker image build
# 例如:使用目前目錄的 Dockerfile 建立鏡像,标簽為 runoob/ubuntu:v1。
docker build -t yeshan333/ubuntu:latest .
複制
- 7、
:用于檢視鏡像建構的相關資訊docker image history
Docker容器相關
- 1、
:用于啟動新容器docker container run
# 格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# 常用options:
# -d: 背景運作容器,并傳回容器ID;
# -i: 以互動模式運作容器,通常與 -t 同時使用;
# -t: 為容器重新配置設定一個僞輸入終端,通常與 -i 同時使用;
# -P: 随機端口映射,容器内部端口随機映射到主機的高端口
# -p: 指定端口映射,格式為:主機(宿主)端口:容器端口
# --name="container-name": 為容器指定一個名稱;
# 示例
docker container run -it ubuntu:latest /bin/bash
# 說明:-it使容器具備互動性并與終端連接配接,指令最後表明運作容器中的Bash Shell程式
複制
- 2、
:列出所有運作狀态的容器可用docker container ls
s代替,如果加個*-a附加參數,會列出所有容器(包括處于停止狀态的容器)docker p
- 3、
:停止運作中的容器,并将其狀态設定為Exited(0),stop後跟container name或container iddocker container stop
- 4、
:用于删除停止運作的容器,rm後跟container name或container id,使用-f參數可強制删除運作中的容器docker container rm
- 5、
:用于連接配接一個處于運作狀态的容器docker container exec
# 例如:
docker container exec -t <container-name or container-id> bash
# 該指令會将docker主機中的shell連接配接到一個運作中的容器,在容器内部啟動一個新的bash shell程序
複制
- 6、
:用于重新開機處于停止(Exited)狀态的容器,start後跟container name或container iddocker container start
- 7、
:檢視容器的配置資訊和運作時資訊,inspect後跟container name或container iddocker container inspect
- 8、快捷鍵
用于斷開docker主機的shell終端與容器終端的連接配接,并在退出後保證容器在背景運作Ctrl+PQ
應用容器化
(Containerizing|Dockerizing)即将應用整合到容器中并且運作的過程
應用容器化的一般步驟
- 1、編寫應用代碼
- 2、建立Dockerfile,其中包括目前應用的描述、依賴以及如何運作這個應用
- 3、對Dockerfile執行docker image build指令
- 4、等待Docker将應用程式建構到Docker鏡像中
Once your app is containerized (made into a Docker image), you’re ready to ship it and run it as a container.《Docker Deep Dive》
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICMyYTMvw1dvwlMvwlM3VWaWV2Zh1Wa-cmbw5iMzoGazQzMrV3bvwlM5kzNzIDNtUGall3LcVmdhNXLwRHdo9CXt92YucWbpRWdvx2Yx5yazF2Lc9CX6MHc0RHaiojIsJye.png)
使用Dockerfile定制鏡像
- Dockerfile最佳實踐
- 使用Dockerfile定制鏡像
Dockerfile中以#開頭的都是注釋行,除注釋之外,每一行都是一條指令
指令的的一般格式:INSTRUCTION argument,INSTRUCTION一般都為大寫
示例Dockerfile:https://github.com/yeshan333/psweb
FROM alpine
LABEL maintainer="[email protected]"
# Install Node and NPM
RUN apk add --update nodejs nodejs-npm
# Copy app to /src
COPY . /src
WORKDIR /src
# Install dependencies
RUN npm install
EXPOSE 8080
ENTRYPOINT ["node", "./app.js"]
複制
- 說明:
- 每個Dockerfile檔案檔案的第一行一般都是
指令。FROM指定的鏡像會作為目前鏡像的一個基礎鏡像層,目前應用的剩餘内容會作為新的鏡像層添加到基礎鏡像層之上。,FROM建議引用官方鏡像FROM
- LABEL指定目前鏡像維護者,給鏡像使用者一個溝通管道
-
将目前應用的依賴安裝到鏡像中,RUN指令會建立一個鏡像層存儲這些内容RUN apk add --update nodejs nodejs-npm
-
會将應用相關檔案從建構上下文複制到目前鏡像中,這會建立一個鏡像層COPY . /src
-
會為Dockerfile中未執行的指令設定工作目錄WORKDIR /src
-
在目前工作目錄中為應用安裝依賴,這會建立一個鏡像層RUN npm install
-
對外提供一個web服務端口EXPOSE 8080
-
指定了目前鏡像的入口程式,container運作時就會運作ENTRYPOINT ["node", "./app.js"]
- 每個Dockerfile檔案檔案的第一行一般都是
建構鏡像
使用docker image build根據Dockerfile制作鏡像,示例:
# -t用于指定制作好的鏡像的名字及标簽,通常 name:tag 或者 name
# 最後的 . 表示使用目前目錄作為建構上下文
docker image build -t web:latest .
複制
使用
docker image history web:latest
可以檢視建構鏡像過程中執行了哪些指令
推送鏡像到Docker Hub
- 推送鏡像前建議使用以下指令給鏡像打新标簽# new-tag建議以自己的 DockerHub ID/new-tag 的格式命名,友善推送到自己的repo docker image tag <current-tag> <new-tag>
- 使用
推送鏡像,推送前需要docker image push <tag-name>
,記得測試打包好的應用再推送!!!docker login
Dockerfile常用指令
指令 | 說明 |
---|---|
FROM | 指定要建構的鏡像的基礎鏡像,一般為Dockerfile檔案第一行 |
RUN | 用于在鏡像中執行指令,會建立一個鏡像層 |
COPY | 一般用于将應用代碼copy到鏡像中,這會建立一個鏡像層 |
WORKDIR | 用于設定Dockerfile中未執行的指令的工作目錄 |
ENTRYPOINT | 指定鏡像以容器方式啟動後預設運作的程式, ENTRYPOINT 的指令不會被docker run指定要執行的指令覆寫 |
CMD | 指定容器啟動時執行的指令,一個 Dockerfile 中隻能有一個 CMD 指令,如果寫了多個,那麼隻有最後一個會執行。CMD 和 ENTRYPOINT 同時存在時,CMD 中的内容會變成 ENTRYPOINT 中指令指令的預設參數,該參數可以被 docker run 時設定的指令覆寫 |
ENV | 設定鏡像中的環境變量 |
EXPOSE | 記錄應用所使用的網絡端口 |
更多:
- Dockerfile指令詳解
- Dockerfile reference