| Invalid Date
字数 0阅读时长 1 分钟
材料類別
線上課
技術類別
Docker
重要性
⭐️
來源
完成
完成
更新
Dec 10, 2021
已過天數
12
第一章,開始上手
dk version
notion image
從這裡就能看到,dk engine裡的系列是linux!
裡面有一個東西叫「containerd」也是有自己的版本的,基本上就是dk的真正版本
notion image
 

容器與img

容器就是img(唯讀)+讀寫層!
  • 讀寫層又叫「container layer
一個img可以創建多個容器

小秘訣

指定id時,不一定只限於全文或固定id頭的幾個字
即使是用不固定長度的id頭也能選取,只要沒有重複即可!!
notion image
只用了一點點id頭來選取:
  • 1a
  • 258
超好用!
 
肖鵬建議用新的指令,才知道你在操作什麼對象
 
使用短id頭停用複數容器:
notion image
大量停用:書上也有
notion image
 

容器的 detached 和 attached 模式

dkc run -p 80:80 nginx
預設的模式是 attached,也就是前台執行
-d則是 detached模式,在後台執行
notion image

如何重新 attached 以回到前景模式?使用 attach 指令

attach作用僅僅只是回到前景
notion image
>> 顯然行為和 dkc exec 並不相同
肖鵬:一般而言不推薦使用 attached 模式,無論是不加-d或加了但又attached回來,都不推薦!
  • 盡可能使用detached模式,也就是運行容器盡可能加上-d
官方文件的 attach 說明:

docker attach

Description

Attach local standard input, output, and error streams to a running container

Usage

$ docker attach [OPTIONS] CONTAINER
👉
由此可知,即使重新attach回容器,也是只是讓它變成attched的狀態而已,也就是把std重新接回來前景而已,而前景不能做任何事,attach後就只是重新看到前景,所以真的很不實用
 
 
動態追縱容器的logs,請加上-f
 
nginx直接執行容器run就會運行,因為它預設就是有指令會執行。如果執行ubuntu這種沒有預設指令的img,就要給定一個指令才行
>> 之所以會持續運行,是因為COMMAND這一欄是有值的,也就是有指令
notion image
  • ubuntu使用-it參數時,不用/bin/bash之類的指令也可以直接進入互動模式
  • 而且和使用/bin/bash界面略有不同!(少了root那些資訊)
notion image
notion image
 

dkc exec,非常頻繁使用的指令

先執行一個python3的容器
要進入:
notion image
使用上的注意要點:
  • 通常會和-it伴隨使用
  • 需要兩個引數,一個是容器名,一個是指令!
 

⭐️ 容器就是程序(process)

申言之,就是一個指令產生一個程序
比如nginx,裡面的entrypoint有一個指令,會啟動一個nginx程序!
可用指令查看:dkc top bcc(容器頭id)
notion image
要懂一下PID和PPID才容易看得懂,不過都是process
 

docker container run 背後發生了什麼?

比如:
  • 在本地查找是否有nginx這個image鏡像,但是沒有發現
  • 去遠程的image registry查找nginx鏡像(默認的registry是Docker Hub)
  • 下載最新版本的nginx鏡像 (nginx:latest 默認)
  • 基於nginx鏡像來創建一個新的容器,並且准備運行
  • docker engine分配給這個容器一個虛擬IP地址
  • 在宿主機上打開80端口並把容器的80端口轉發到宿主機上
  • 啟動容器,運行指定的命令(這裡是一個shell腳本去啟動nginx)
 
 

第二章,鏡像的創建管理和發布

notion image

dki tag

基本上就是img的版本
 

從非dk hub來pull的指令

dki pull 站名/組織或帳號名/倉庫名
 

dki build

dk build img名 路徑(of dkfile)
 

Link:同一 img 可以屬於多個repo與擁有多個tag

 
一樣都要先移除才能刪
notion image
👉
其實這很容易理解,把一個既有的img,使用dki tag重新命名一個repo名稱和tag版本名稱後,新的img和原來的img本質是完全一樣,但repo name和tag name完全不同,如上圖:repo名稱和tag都不一樣
<<

commit

一定是從容器去commit,因為就是要commit讀寫層的內容
所以新版指令是 dk container commit
肖鵬:commit在日常開發時用得很少,主要還是從dkfile
 

第三章,Dockerfile完全入門

肖鵬:對新手而言,Dockerfile是最重要的內容!

基礎img的選擇原則,有三

  1. 官方的優於非官方
  1. 要指定tag而不是每次都用latest
    1. 因為這樣隨著時間,latest會不同,你的file製作出的img是不同的
    2. 會影響穩定性
  1. 盡可能選體積小的:理由是節省頻寬
    1. 不過也可能會影響後續安裝程式的相同,所以要通盤考慮
不同體積指同版號但不同後綴的
  • alpine
  • 沒後綴
 

為何有的大有的小?

其中一個原因是建構img時選擇的「基底linux」不同
像nginx-alpine選擇的linux就是apline版,所以會很小!一般版的linux就比較大
僅 5mb 大小!
僅 5mb 大小!
基本上一堆img都有apline版本!
所以選定時,版本最好加上tag版本數字+tag後綴
但alpine並不適點用來作產品開發:
 

RUN

Loading...
目录