標籤:ref gis debug 建立 獨立 shell proc tab docker
參考:
https://www.cnblogs.com/SzeCheng/p/6822905.html
43022769
71718805
Docker簡介
Docker是一個能夠把開發的應用程式自動部署到容器的開源引擎。使用Docker,開發人員只需關心容器中啟動並執行應用程式,而營運人員只需要關心如何管理容器。Docker設計的目的就是要加強開發人員寫代碼的開發環境與應用程式要部署的產生環境的一致性。
由於客居於作業系統,容器只能運行在與頂層宿主機相同或相似的作業系統。yu
簡單說就是,開發環境打包成鏡像,可以搬移到任何支援Docker的環境,然後運行。
圖來源:https://www.cnblogs.com/SzeCheng/p/6822905.html
Docker組件
核心組件:
Docker用戶端和伺服器(Docker引擎)、Docker鏡像、Registry、Docker容器。
Docker的技術組件:
一個原生的Linux容器格式(libcontainer);
Linux的namespace,用於隔離檔案系統、進程和網路;
資源隔離和分組:使用cgroups將CPU和記憶體之類的資源獨立分配給每個Docker容器;
寫時複製
日誌
互動式shelll
一個Dockerfile
FROM alpine_bash:latest MAINTAINER sp RUN echo hello CMD echo world |
為什麼載入一個OS基礎鏡像?43022769
Container內需不需要OS?
Container不是一個VM技術,所以和OS沒有關係。如果我沒有理解錯,這個Container應該指的是Docker Run出的運行環境,因為在裡面我們可以運行一些命令,讓使用者以為它就是一個完整的OS環境。這是不對的。其實Docker只是一個進程。當你使用docker exec登入進去的也只是一個Terminal的類比環境。它不是真實的OS。正因為它不是OS,所以它是直接調用主機的Kernel的。而Container本身只是一個系統進程。
為何需要OS的基礎鏡像?
首先,OS的問題上面已經解釋過了,它不是一個OS,但為何需要OS的基礎鏡像?其實這裡的基礎鏡像是一個包含rootfs的鏡像。Kernel啟動後是需要把開機檔案解壓到rootfs上的,然後kernel找到init檔案啟動就可以得到一個Linux環境了,Docker做的事情就是類比這個過程,讓kernel給出一個獨立的隔離環境。
docker build 構建鏡像
sudo docker build -t qt:v1 /home/sp/dockertest/ |
查看
sudo docker images qt REPOSITORY TAG IMAGE ID CREATED SIZE qt v1 aaec4961ec31 2 minutes ago 19.83 MB |
查看鏡像如何構建出來的
sudo docker history qt:v1 IMAGE CREATED CREATED BY SIZE COMMENT aaec4961ec31 11 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo 0 B 1f10b0c38e9a 11 minutes ago /bin/sh -c echo hello 0 B b00f1a7fc4a7 11 minutes ago /bin/sh -c #(nop) MAINTAINER sp 0 B 91370d5da095 3 months ago bash 182 B 090950687196 3 months ago bash 267 B 62fc0977df76 3 months ago sh 9.032 MB a0f29218fb23 3 months ago sh 42.86 kB c3447930f3bc 3 months ago sh 6.606 MB <missing> 3 months ago 4.144 MB Imported from - |
docker save 儲存鏡像
sudo docker save -o /home/sp/dockertest/qt_pack.tar qt:v1 |
docker rmi 刪除鏡像
docker run 運行容器
sudo docker run -i -t --name=qttest qt:v1 |
docker exec 在容器內部運行進程
docker top 查看容器內的進程
docker stats 查看容器統計資訊
Docker 命令&參數
build構建命令參數
轉自:71718805
docker build命令用於根據給定的Dockerfile和上下文以構建Docker鏡像。 docker build命令的使用格式: docker build [OPTIONS] <PATH | URL | -> 1. 常用選項說明 --build-arg,設定構建時的變數 --no-cache,預設false。設定該選項,將不使用Build Cache構建鏡像 --pull,預設false。設定該選項,總是嘗試pull鏡像的最新版本 --compress,預設false。設定該選項,將使用gzip壓縮構建的上下文 --disable-content-trust,預設true。設定該選項,將對鏡像進行驗證 --file, -f,Dockerfile的完整路徑,預設值為‘PATH/Dockerfile’ --isolation,預設--isolation="default",即Linux命名空間;其他還有process或hyperv --label,為產生的鏡像設定metadata --squash,預設false。設定該選項,將新構建出的多個層壓縮為一個新層,但是將無法在多個鏡像之間共用新層;設定該選項,實際上是建立了新image,同時保留原有image。 --tag, -t,鏡像的名字及tag,通常name:tag或者name格式;可以在一次構建中為一個鏡像設定多個tag --network,預設default。設定該選項,Set the networking mode for the RUN instructions during build --quiet, -q ,預設false。設定該選項,Suppress the build output and print image ID on success --force-rm,預設false。設定該選項,總是刪除掉中間環節的容器 --rm,預設--rm=true,即整個構建過程成功後刪除中間環節的容器
2. PATH | URL | -說明: 給出命令執行的上下文。 上下文可以是構建執行所在的本地路徑,也可以是遠程URL,如Git庫、tarball或文字檔等。 如果是Git庫,如https://github.com/docker/rootfs.git#container:docker,則隱含先執行git clone --depth 1 --recursive,到本地臨時目錄;然後再將該臨時目錄發送給構建進程。 構建鏡像的進程中,可以通過ADD命令將上下文中的任何檔案(注意檔案必須在上下文中)加入到鏡像中。 - 表示通過STDIN給出Dockerfile或上下文。 樣本: docker build - < Dockerfile 說明:該構建過程只有Dockerfile,沒有上下文 docker build - < context.tar.gz 說明:其中Dockerfile位於context.tar.gz的根路徑 docker build -t champagne/bbauto:latest -t champagne/bbauto:v2.1 . docker build -f dockerfiles/Dockerfile.debug -t myapp_debug . |
Docker 初識