Skip to content

hgalytoby/LearnDocker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

筆記

docker 常用指令

  • 幫助命令
    • docker version
      • 顯示 docker 版本訊息
    • docker info
      • 顯示 docker 更詳細的訊息
    • docker --help
      • 顯示 docker 指令列表
  • 鏡像命令
    • docker run [options] IMAGE [COMMAND][ARG...]
    • options
    • --name="容器新名稱": 為容器指定一個名稱
    • -d: 後台運行容器,並返回容器ID,也即啟動守護式容器
    • -i: 以交互模式運行容器,通常與 -t 同時使用
    • -t: 為容器重新分配一個偽輸入終端,通常與 -t 同時使用
    • -P: 隨機 port 映射
    • -p: 指定 port 映射,有以下四種格式
      • ip:hostPort:containerPort
      • ip::containerPort
      • hostPort:containerPort
      • containerPort
    • 範例
      • docker run -it [IMAGE_ID] or [IMAGE_NAME]
        • 啟動容器並進入 docker 容器內
      • docker run -it --name=mydocker ubuntu:18.04
      • docker run -it --name=mydocker ubuntu:18.04 /bin/bash
        • 用 bash 形式
  • 容器命令
    • docker ps
      • 顯示所有 docker 正在執行的容器
      • options
        • -a: 顯示當前所有正在運行的容器 + 歷史上運行過的
        • -l: 顯示上一個運行容器的訊息
        • -n: 顯示最近n個創建的容器
        • -q: 靜默模式,只顯示容器編號
        • --no-trunc: 不截斷輸出
      • 範例
        • docker ps -a
        • docker ps -l
        • docker ps -n
        • docker ps -n 3
          • 顯示 3 個最近運行的
        • docker ps -q
        • docker ps -lq
          • -l 是顯示上一個運行容器的訊息,加上 q 就會只顯示容器編號
    • docker 退出容器
      • 兩種退出方式
        • exit
          • 容器停止退出
        • ctrl + P + Q
          • 容器不停止退出
    • docker 啟動重啟停止
      • docker start [CONTAINER_ID] or [CONTAINER_NAME]
    • docker 重啟
      • docker restart [CONTAINER_ID] or [CONTAINER_NAME]
    • docker 停止
      • docker stop [CONTAINER_ID] or [CONTAINER_NAME]
    • docker 強制停止
      • docker kill [CONTAINER_ID] or [CONTAINER_NAME]
    • docker 刪除容器
      • docker rm [CONTAINER_ID] or [CONTAINER_NAME]
    • docker 強制刪除容器(正在運行的)
      • docker rm -f [CONTAINER_ID] or [CONTAINER_NAME]
    • docker 一次性刪除多個容器
      • docker rm -f $(docker ps -a -q)
      • docker ps -a -q | xargs docker rm
  • 重要
    • 啟動守護式容器
      • docker run -d [CONTAINER_ID] or [CONTAINER_NAME]
        • 如果沒有命令的話,一啟動就會停止
        • 可以用 shell 不讓容器停止
          • docker run -d ubuntu:18.04 /bin/bash -c "while true; do echo hello; sleep 2; done"
    • 查看容器日誌
      • docker logs -f -t --tall [CONTAINER_ID] or [CONTAINER_NAME]
        • -t 是加入時間戳
        • -f 跟隨最新的日誌印出
        • --tail 數字 顯示最後多少條
      • 範例
        • docker logs [CONTAINER_ID] or [CONTAINER_NAME]
        • docker logs -t [CONTAINER_ID] or [CONTAINER_NAME]
        • docker logs -t -f --tail 3 [CONTAINER_ID] or [CONTAINER_NAME]
          • 只顯示 3 條訊息
    • 查看容器內運行的 process
      • docker top [CONTAINER_ID] or [CONTAINER_NAME]
    • 查看容器內部細節
      • docker inspect [CONTAINER_ID] or [CONTAINER_NAME]
      • 顯示容器內部所有細節
    • 進入正在運行的容器並以命令行交互
      • docker exec it [CONTAINER_ID] or [CONTAINER_NAME] bashShell
      • 重新進入 docker attach [CONTAINER_ID] or [CONTAINER_NAME]
      • 上面兩個區別
        • attach
          • 直接進入容器啟動命令的終端,不會啟動新的 process
        • exec
          • 是在容器中打開新的終端,並且可以啟動新的 process
          • 範例
            • docker exec -t [CONTAINER_ID] or [CONTAINER_NAME] ls -l
              • 送指令到容器內直接拿到結果
            • docker exec -t [CONTAINER_ID] or [CONTAINER_NAME] /bin/bash or docker exec -t [CONTAINER_ID] or [CONTAINER_NAME] bash
              • bash 形式進入到容器內,但不能互動。
              • 使用 it 就可以在容器互動了。
    • 從容器內拷貝文件到主機上
      • docker cp [CONTAINER_ID] or [CONTAINER_NAME]:CONTAINER路徑 目的本機路徑
        • 範例
          • docker cp [CONTAINER_ID] /tmp/hello.txt /root
  • 小總結
    • 常用命令
      • attach 當前 shell 下 attach 連接指定運行鏡像
      • build 通過 Dockerfile 客制鏡像
      • commit 提交當前容器為新的鏡像
      • cp 從容器中複製指定文件或者目錄到主機上
      • create 創建一個新的容器,同 run,當不啟動容器
      • diff 查看 docker 容器變化
      • events 從 docker 服務獲取容器實時事件
      • exec 在已存在的容器上運行命令
      • export 導出容器的內容留作為一個 tar 歸檔文件[對應 import]
      • history 顯示一個鏡像形成歷史
      • images 顯示系統當前鏡像
      • import 從 tar 包中的內容創建一個新的文件系統映像[對應export]
      • info 顯示系統相關訊息
      • inspect 查看容器詳細訊息
      • kill kill 指定 docker 容器
      • load 從一個 tar 包加載一個鏡像[對應 save]
      • login 註冊或登入一個 docker 源伺服器
      • logout 從當前 Docker registry 退出
      • logs 輸出當前容器日誌訊息
      • port 查看映射 port 對應容器內部源 port
      • pause 暫停容器
      • ps 列出容器列表
      • pull 從 docker 鏡像伺服器拉取指定鏡像或者庫鏡像
      • restart 重新啟動運行的容器
      • rm 移除一個或多個容器
      • rmi 移除一個或多個鏡像 [無容器使用該鏡像才可刪除,否則需刪除相關容器才可以繼續或 -f 強制刪除]
      • run 創建一個新的容器並運行一個命令
      • save 保存一個鏡像為 tar 包
      • search 在 docker hub 中搜尋鏡像
      • start 啟動容器
      • stop 停止容器
      • tag 給源中鏡像打上標籤
      • top 查看容器中運行的 process 訊息
      • unpause 取消暫停容器
      • version 查看 docker 版本訊息
      • wait 擷取容器停止時的退出狀態值

docker images

  • options
    • -a: 列出本機所有的鏡像(含中間印象層)
    • -q: 只顯示鏡像ID
    • --digests: 顯示鏡像的摘要訊息
    • --no-trunc: 顯示完整的鏡像訊息
  • 範例
    • docker images
    • docker images -a
    • docker images -d

docker search

  • 網站
  • options
    • --no-trunc: 顯示完整的鏡像訊息
    • -s: 列出星星操過指定值得鏡像
    • --automated: 只列出 automated build 類型的鏡像。
  • 範例
    • docker search nginx
    • docker search -s 30 nginx
    • docker search -s 30 --no-trunc nginx

docker pull

  • docker pull nginx 等同於 docker pull nginx:latest

docker rmi

  • 刪除單個
    • docker rmi [IMAGE_ID] or [IMAGE_NAME]
    • 不給版本預設刪除
  • 刪除多個
    • docker rmi -f [IMAGE_NAME]:TAG [IMAGE_NAME]:TAG
  • 刪除全部
    • docker rmi -f $(docker images -q)
      • q 指的是顯示本機所有的Image ID
      • a 指的是過往與當前活著的全部 ID

docker commit

  • 1.docker commit
    • 提交容器副本使之成為一個新的鏡像
  • 2.docker commit -m
    • 提交描述訊息
  • 3.docker commit -a
    • 作者
  • 範例:
    • docker commit -a "dudulu" -m "提交" [IMAGE_ID] or [IMAGE_NAME] 自定義名稱
    • docker commit -a "dudulu" -m "First Commit" 1qaz2wsx3edc myimage:48.7.63

docker 容器數據卷

  • 是什麼
    • 類似 Redis 裡面的 rdb 和 aof 文件
  • 能做什麼
    • 容器得持久化
    • 容器間繼承 + 共享數據
  • 數據卷
    • 直接命令添加
      • 命令
        • docker run -it -v /本機絕對路徑:/容器內目錄 鏡像名
        • docker run -it -v /Users/dudulu/Desktop/All/Docker/LearnDocker/mydata:/mydata ubuntu:18.04
      • 查看數據卷是否掛載成功
      • 容器和本機之間數據共享
      • 容器停止後,主機修改數據是否同步
      • 命令(帶權限,只能讀不能寫)
        • docker run -it -v /本機絕對路徑:/容器內目錄:ro 鏡像名
        • docker run -it -v /Users/dudulu/Desktop/All/Docker/LearnDocker/mydata:/mydata:ro ubuntu:18.04
        • ro = Read-only
    • Dockerfile 添加
      • 跟目錄下創建 Dockerfile
      • 可在 Docker 中使用 VOLUME 指令給鏡像增加一個或多個數據卷
      • File 構建
      • build 後生成鏡像
        • 獲得一個新鏡像
        • -f = dockerfile 在哪裡
        • -t = 自定義名字
        • 範例
          • docker build -f ./DockerfileTest/Dockerfile -t dudulu/ubuntu .
      • run 容器
      • VOLUME 默認位置要用 docker inspect [CONTAINER_ID] or [CONTAINER_NAME] 之後查看 Volumes 或者 Mounts
        • Mac 找不到 VOLUME 位置,但是 Ubuntu 有找到。
    • 備註
      • 如果 Docker 掛載本機目錄 Docker 出現 cannot open directory.:Permission denied
        • 在掛載目錄後多加一個 --privileged-true 參數即可
          • docker run -it -v /Users/dudulu/Desktop/All/Docker/LearnDocker/mydata:/mydata --privileged-true ubuntu:18.04`
  • 數據卷容器
    • 先啟動一個父容器
      • docker run -it --name dc01 dudulu/ubun:1.0
    • dc02/dc03 繼承自 dc01
      • docker run -it --name dc02 --volumes-from dc01 dudulu/ubun:1.0
      • docker run -it --name dc03 --volumes-from dc01 dudulu/ubun:1.0
    • 回到 dc01 可以看到 02/03 都能互相新增資料並共享。
    • 刪除 dc01,dc02 修改後 dc03 是否可以訪問(可以)。
    • 刪除 dc02,dc03 是否可以訪問(可以)。
    • 新增 dc04 繼承 dc03 後在刪除 dc03, dc04 是否有共享數據(有)。
      • docker run -it --name dc04 --volumes-from dc03 dudulu/ubun:1.0
    • 結論: 容器之間設置訊息的傳遞,數據卷的生命週期一直持續到沒有容器使用它為止。
  • 特點
    • 1.數據卷可在容器之間共享或重用
    • 2.數據卷中的更改可以直接生效
    • 3.數據卷中的更改不會包含在鏡像的更新中
    • 4.數據卷的生命週期一直持續到沒有容器使用它為止

DockerFile 解析

  • 是什麼
    • Dockerfile 是用來創建 Docker 鏡像的創建文件,是由一系列命令和參數組成的腳本。
    • 創建三步驟
      • 編寫 Dockerfile 文件
      • docker build
      • docker run
  • DockerFile 構建過程解析
    • Dockerfile 內容基礎知識
      • 每條保留字指令都必須為大寫字母且後面一定要跟隨至少一個參數
      • 指令按照從上到下,順序執行
      • "#表示注釋"
      • 每條指令都會創建一個新的鏡像層,並對鏡像進行提交
    • Docker 執行 Dockerfile 的大致流程
      • docker 從基礎鏡像運行一個容器
      • 執行一條指令並對容器作出修改
      • 執行類似 docker commit 的操作提交一個新的鏡像層
      • docker 在基於剛提交的鏡像運行一個新容器
      • 執行 dockerfile 中的下一條指令直到所有指令都執行完成
  • DockerFile 體系結構
    • FROM
      • 基礎鏡像,當前新鏡像是基於哪個鏡像的
    • MAINTAINER
      • 鏡像維護者的姓名和電子信箱
    • RUN
      • 容器創建時需要運行的命令
    • EXPOSE
      • 容器對外暴露出的端口
    • WORKDIR
      • 創建容器後,終端默認登入進來的工作目錄,工作路徑
    • ENV
      • 用來創建鏡像過程中設定環境變量
        • ENV MY_PATH /usr/mytest
          • 這個環境變量可以在後續的任何 RUN 指令中使用,這就如同在命令前面指定了環境變量前綴一樣
          • 也可以在其他指令中直接使用這些環境變量
        • 比如: WORKDIR $MY_PATH
    • ADD
      • 將本機目錄下的文件複製到鏡像且 ADD 命令會自動處理 URL 和解壓 tar 壓縮檔
    • COPY
      • 類似 ADD,複製文件和目錄到鏡像中
      • 將從創建上下文目錄中 <來源路徑> 的文件/目錄複製到新一層的鏡像內 <目標路徑> 位置
        • COPY src dest
        • COPY ["src", "dest"]
    • VOLUME
      • 容器數據卷,用於數據保存和持久化工作
    • CMD
      • 容器啟動時要運行的命令與 RUN 相似
      • Dockerfile 中可以有多個 CMD 指令,但只有最後一個生效,CMD 會被 docker run 之後的參數替換
    • ENTRYPOINT
      • 容器啟動時要運行的命令
      • ENTRYPOINT 的目的和 CMD 一樣,都是在指定容器啟動程式及參數
    • ONBUILD
      • 當創建一個被繼承的 Dockerfile 時運行命令,父鏡像在被子繼承後父鏡像的 onbuild 會觸發

About

Learn Docker

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published