這篇文章為大家帶來了關於docker核心技術之容器操作,以及Dockerfile詳解等等相關問題,希望對大家有幫助。
參考文章安裝: Install Docker Engine on Ubuntu | Docker Documentation
##三.容器操作
#docker cp file1
docker退出容器,而關閉容器: exit
FROM
範例:
FROM ubuntu
RUN:在建構中執行的指令建構指令時執行的命令
exec執行:RUN ["executable", "param1", "param2"]
##範例: RUN apk update RUN ["/etc/execfile", "arg1", "arg2"]## d -get install這兩個指令永遠用&&連接,否則apt-get update建置層被緩存,會導致新package無法安裝
ADD: 將本機檔案新增到容器中, tar等類型
會自動解壓縮,可以存取網路資源,類似wget格式:
ADDCOPY: 功能類似ADD,但不會解壓縮文件,無法存取網路資源
#在Dockerfile中使用multi-stage: Dockerfile 中的multi-stage(多階段建置) - sparkdev - 部落格花園格式:CMD: 建置容器後調用,也就是在容器啟動時才進行呼叫
#格式: CMD ["executable","param1","param2"] (執行可執行文件,優先)
CMD echo "1111"
#ENTRTPOINT: 設定容器,使其可執行化
。 格式: ENTRYPOINT ["executable", "param1", "param2"] (可執行檔, 優先) LABEL
## LABEL multi.label1="value1" multi.label2="value2" other="value3"
範例:
POSE
## EXPOSE 80/tcp卷## VOLUME [格式:
USER userUSER user:group
USER uid# USER uid:gid
與問題 US## USER uid:gidER groupUS##ER user:#US>
## 範例:USER www
格式:
ARG < name>[=範例:
ARG build_user=ribbonLinux NameSpace_Frank_Abagnale的部落格-CSDN部落格 這篇文章比較詳細的介紹,可以參考這篇
lsns -t
ls -la /proc/
nsenter -t
##容器核心:cgroups - 簡書 可以參考這篇文章來進行了解
#模擬Cgroups控制CPU資源
通過模擬來更好的熟悉Cgroups控制資源的效果, 先建立cpudemo資料夾# 執行top可以看到busyloop佔用兩個CPU資源
將進程加入cgroup進程組態群組
設定cpuquota
可以看到成功將佔用200% CPU資源的降低成1%
#########模擬Cgroups超過限定memory資源被OOM kill############/ sys/fs/cgroup/memory目錄下建立memorydemo資料夾################ 執行消耗記憶體程序, 使用watch查詢記憶體使用量############ ############# 將進程配置進cgroups設定群組########## 設定最大記憶體大小############## 等待程序被OOM kill, dmesg可以看到殺死訊息############################備註:刪除自主建立的cgroup資料夾, 需要使用cgroup-tools###################七. Union FS############Docker前面所使用的技術都是源自於linux的技術並沒有創新,而Docker的創新正是檔案系統。 #########Docker映像的設計中,引入了層(layer)的概念,也就是說,使用者製作鏡像的每一步操作,都會產生一個層,也就是一個增量rootfs(一個目錄),這樣應用A和應用B所在的容器共同引用相同的ubuntu作業系統層、Golang環境層(作為唯讀層),而各自有各自應用程式層,和可寫層。啟動容器的時候透過UnionFS把相關的層掛載到一個目錄,當作容器的根檔案系統。
由於docker目前版本上使用的是overlayFS的儲存驅動,所以我們就以overlay掛載方式來進行實驗,overlayfs透過三個目錄:lower目錄、upper目錄、以及work目錄實現,其中lower目錄可以是多個,work目錄為工作基礎目錄,掛載後內容會被清空,且在使用過程中其內容用戶不可見,最後聯合掛載完成給使用者呈現的統一視圖稱為為merged目錄。
執行以下命令:
mkdir upper lower merged work echo "lower" > lower/in_lower.txt echo "from lower" > lower/in_both.txt echo "from upper" > upper/in_both.txt echo "upper" > upper/in_upper.txt path=$(pwd) mount -t overlay overlay -o lowerdir=${path}/lower,upperdir=${path}/upper,workdir=${path}/work ${path}/merged
# 可以看到使用overlay儲存驅動程式檔案掛載實現的效果。實驗完成後恢復環境需要先umount merged目錄後, 再將四個目錄進行刪除操作,先刪除其他的可能會出現rm: cannot remove 'merged/': Device or resource busy,導致merged目錄刪除不掉。
Centos系統:
$ yum install bridge-utils
Ubuntu系統:
$ apt-get install bridge-utils
4)container模式:使用 --net=container:NAME_or_ID 指定。使用其他容器的網路設定
# 網路模式圖大概如下圖
產生eth0網路裝置在nginx docker中
給eth0設定ip 閘道
#推薦學習:《docker影片教學》
以上是最有系統的掌握Docker核心技術(總結分享)的詳細內容。更多資訊請關注PHP中文網其他相關文章!