天天看點

docker學習筆記常用docker指令應用容器化

Play With Docker一個免費使用的基于web界面的Docker環境

常用docker指令

可使用

docker COMMAND --help

檢視指令的用法

Docker鏡像相關

  • 1、

    docker image pull

    :用于下載下傳鏡像,鏡像從遠端鏡像倉庫服務的倉庫中下載下傳,預設從Docker Hub的倉庫中拉取
# 格式: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 image ls

    :列出本地Docker主機上存儲的鏡像
  • 3、

    docker image inspect

    :檢視鏡像的細節,包括鏡像層資料和中繼資料
# docker image inspect [OPTIONS] IMAGE [IMAGE...]
# inspect後一般跟repository name或image id           

複制

  • 4、

    docker image rm

    :用于删除鏡像。如果鏡像存在關聯的容器,并且容器處于運作(Up)或停止(Exit)狀态時,不允許删除該鏡像。rm後可跟repository或image id
  • 5、

    dicker image search

    :從Docker Hub查找鏡像
  • 6、

    docker image build

    :根據Dockerfile建構鏡像
# 例如:使用目前目錄的 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

    :列出所有運作狀态的容器可用

    docker p

    s代替,如果加個*-a附加參數,會列出所有容器(包括處于停止狀态的容器)
  • 3、

    docker container stop

    :停止運作中的容器,并将其狀态設定為Exited(0),stop後跟container name或container id
  • 4、

    docker container rm

    :用于删除停止運作的容器,rm後跟container name或container id,使用-f參數可強制删除運作中的容器
  • 5、

    docker container exec

    :用于連接配接一個處于運作狀态的容器
# 例如:
docker container exec -t <container-name or container-id> bash
# 該指令會将docker主機中的shell連接配接到一個運作中的容器,在容器内部啟動一個新的bash shell程序           

複制

  • 6、

    docker container start

    :用于重新開機處于停止(Exited)狀态的容器,start後跟container name或container id
  • 7、

    docker container inspect

    :檢視容器的配置資訊和運作時資訊,inspect後跟container name或container id
  • 8、快捷鍵

    Ctrl+PQ

    用于斷開docker主機的shell終端與容器終端的連接配接,并在退出後保證容器在背景運作

應用容器化

(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》
docker學習筆記常用docker指令應用容器化

使用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 apk add --update nodejs nodejs-npm

      将目前應用的依賴安裝到鏡像中,RUN指令會建立一個鏡像層存儲這些内容
    • COPY . /src

      會将應用相關檔案從建構上下文複制到目前鏡像中,這會建立一個鏡像層
    • WORKDIR /src

      會為Dockerfile中未執行的指令設定工作目錄
    • RUN npm install

      在目前工作目錄中為應用安裝依賴,這會建立一個鏡像層
    • EXPOSE 8080

      對外提供一個web服務端口
    • ENTRYPOINT ["node", "./app.js"]

      指定了目前鏡像的入口程式,container運作時就會運作

建構鏡像

使用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
docker學習筆記常用docker指令應用容器化