摘要:各組件結構下載安裝啟動的官方文檔上提供了非常詳細的安裝流程,簡單摘錄在上下載社區版并安裝的操作命令當控制臺輸出加一大段介紹文字時,安裝就大功告成了。
原文鏈接:http://tabalt.net/blog/docker...
Docker是一個使用Golang開發的開源應用容器引擎,讓開發者可以打包應用和依賴到一個輕量級、可移植的鏡像中,然后分發到任何流行的Linux機器上,并在這些機器上啟動容器,容器之間隔離獨立,資源消耗低。
Docker的常見概念鏡像 Image
鏡像是一個分層的文件系統,集成了容器運行時所需的操作系統、應用程序、運行時環境等;鏡像是只讀的,構建之后內容不會被改變,可被復制和分發。
容器 Container
容器是由鏡像啟動的運行時實例,可被啟動、停止、刪除,容器之間相互隔離,容器對資源的使用可以做限制。容器從鏡像啟動時,Docker會在鏡像的上層創建一個可寫層。
鏡像倉庫 Image Repository
鏡像倉庫類似于代碼倉庫,用來集中存放鏡像文件。鏡像編譯好后推送(push)到倉庫中,在運行容器的機器上拉取(pull)下來即完成了鏡像的復制和分發。
Dockerfile
Dockerfile是由一系列命令和參數構成的腳本,這些命令基于基礎鏡像,將業務需要的應用程序和依賴環境打包起來,并最終創建一個新的鏡像。
客戶端Client和守護進程Daemon
Docker是C/S(客戶端Client-服務器Server)架構模式,客戶端是名為docker的命令行工具,服務器是名為dockerd的守護進程,用戶通過客戶端向服務器提供的接口發送請求和指令,守護進程執行一系列操作后返回給客戶端結果。
Docker各組件結構 下載&安裝&啟動 DockerDocker的官方文檔(https://docs.docker.com/install/ )上提供了非常詳細的安裝流程,簡單摘錄在CentOS 7.x 上下載Docker社區版并安裝的操作命令:
mkdir ~/soft && cd ~/soft wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.06.1.ce-3.el7.x86_64.rpm sudo yum install docker-ce-18.06.1.ce-3.el7.x86_64.rpm sudo systemctl start docker sudo docker run hello-world
當控制臺輸出Hello from Docker!加一大段介紹文字時,安裝就大功告成了。
運行Docker的Hello World容器的一些細節剛剛我們成功運行了Docker提供的Hello World版容器,大致的執行過程如下:
命令行執行的Docker客戶端程序,解析出命令run和參數hello-world,并請求Docker Daemon守護進程提供的相關接口
Docker Daemon得到要將名為hello-world的鏡像啟動為容器的請求后,嘗試在本地查找名為hello-world的鏡像
因為我們是剛安裝的Docker,本地并沒有這個鏡像,Docker Daemon會嘗試從官方鏡像倉庫拉取名為hello-world的鏡像
名為hello-world的鏡像拉取到本地后,Docker Daemon再真正執行啟動容器的操作
容器啟動起來后,執行構建鏡像時指定的/hello程序,輸出Hello from Docker!等介紹文字
介紹文字輸出完畢后,/hello程序就退出了,Docker容器也跟著退出
上述流程中,我們的Docker Daemon程序自動拉取了hello-world鏡像,也可以通過命令先行拉取下來:
sudo docker pull hello-world
通過下面的命令可以查看本地的鏡像列表:
[tabalt@dev ~]$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest 2cb0d9787c4d 6 weeks ago 1.85kB
容器運行完退出后,其實還有殘留,可通過如下命令看到:
[tanyanping@p10992v ~]$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bb61ae864566 hello-world "/hello" About an hour ago Exited (0) About an hour ago modest_crayDockerfile 指令介紹
Dockerfile由一行行的命令語句組成,支持以 # 開頭的注釋,主要有四個部分:基礎鏡像信息、維護者信息、鏡像操作指令、容器啟動指令。 主要指令列舉如下(加*表示常用):
指令 | 作用 | 格式 | 說明 |
---|---|---|---|
FROM* | 指定基礎鏡像 |
FROM FROM |
首條指令必須為FROM 可使用多個FROM 創建多個鏡像 |
MAINTAINER | 指定維護者 | MAINTAINER |
|
ENV* | 指定環境變量 | ENV |
后續RUN指令和容器中可用 |
USER | 指定運行容器的用戶 | USER daemon | 用戶名或UID,對后續的RUN指令生效 |
WORKDIR | 指定工作目錄 | WORKDIR /path/to/workdir | 對后續RUN、CMD、ENTRYPOINT指令生效 |
VOLUME | 創建掛載點 | VOLUME ["/data"] | |
ONBUILD | 作為基礎鏡像時的指令 | ONBUILD [INSTRUCTION] | |
RUN* | 執行命令 |
RUN RUN ["executable", "param1", "param2"] |
前者為/bin/sh -c執行 后者使用 exec 執行 命令較長時可用換行 |
ADD* | 復制文件到容器 | ADD |
路徑或URL,tar文件自動解壓 |
COPY* | 復制文件到容器 | COPY |
源目錄為本地目錄時,推薦使用 |
ENTRYPOINT* | 容器啟動后執行的命令 |
ENTRYPOINT ["executable", "param1", "param2"] ENTRYPOINT command param1 param2 |
不可被docker run的參數覆蓋 多條命令只有最后一條生效 |
CMD* | 容器啟動執行的命令 |
CMD ["executable","param1","param2"] CMD command param1 param2 CMD ["param1","param2"] |
第一種使用exec執行,推薦使用 第二種在/bin/sh中執行,支持交互 第三種是ENTRYPOINT的默認參數 多條CMD命令只有最后一條生效 |
EXPOSE* | 指定暴露的端口號 | EXPOSE |
可以通過幾個知名項目中的Dockerfile文件來學習一下各個指令的應用:
Ethereum Golang項目:https://github.com/ethereum/g...
Nginx Dockerfiles:https://github.com/nginxinc/d...
CentOS Dockerfiles:https://github.com/CentOS/Cen...
Dockerfile編譯成鏡像并運行編寫一個能編譯運行并輸出Hello Docker!的Dockerfile:
[tabalt@dev ~]$ cd ~/docker/hello-docker/ [tabalt@dev ~/docker/hello-docker]$ cat Dockerfile FROM alpine:latest CMD echo "Hello World!"
將Dockerfile編譯成名為hello-docker的鏡像:
[tabalt@dev ~/docker/hello-docker]$ sudo docker build -t hello-docker:latest ./ Sending build context to Docker daemon 2.048kB Step 1/2 : FROM alpine:latest latest: Pulling from library/alpine 8e3ba11ec2a2: Already exists Digest: sha256:7043076348bf5040220df6ad703798fd8593a0918d06d3ce30c6c93be117e430 Status: Downloaded newer image for alpine:latest ---> 11cd0b38bc3c Step 2/2 : CMD echo "Hello World!" ---> Running in 28dc89adf3d5 Removing intermediate container 28dc89adf3d5 ---> 5614b1e6b7eb Successfully built 5614b1e6b7eb Successfully tagged hello-docker:latest [tabalt@dev ~/docker/hello-docker]$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-docker latest 5614b1e6b7eb 22 seconds ago 4.41MB alpine latest 11cd0b38bc3c 7 weeks ago 4.41MB
運行名為hello-docker的鏡像:
[tabalt@dev ~/docker/hello-docker]$ sudo docker run -i -t --rm --net=host hello-docker:latest Hello World!Docker客戶端常用命令
前面已經見識過Docker的一些客戶端命令及用法,接下來再看看一些常用命令的詳細介紹:
docker version
客戶端和服務端 版本信息
docker info
鏡像數、容器數、配置等系統信息
docker search
從Docker Hub中搜索符合條件的鏡像
docker search [OPTIONS] TERM Options: -f, --filter filter 根據提供的條件過濾輸出 --format string 用Go模板語法格式化打印的搜索結果 --limit int 搜索結果最大條數(默認 25) --no-trunc 顯示完整輸出
docker pull
從Docker Hub中拉取或者更新指定鏡像
docker pull [OPTIONS] NAME[:TAG|@DIGEST] Options: -a, --all-tags 下載倉庫中所有打TAG的鏡像 --disable-content-trust 跳過鏡像驗證(默認開啟) --platform string 如服務器具有多平臺功能,可設置平臺
docker login
登錄Docker Hub,需要輸入用戶名、密碼、郵箱
docker logout
退出登錄
docker images
列出鏡像
docker images [OPTIONS] [REPOSITORY[:TAG]] Options: -a, --all 顯示所有鏡像(默認隱藏中間鏡像) --digests 顯示摘要 -f, --filter filter 根據提供的條件過濾輸出 --format string 用Go模板語法格式化打印的搜索結果 --no-trunc 顯示完整輸出 -q, --quiet 只顯示數字ID
docker ps
列出容器
docker ps [OPTIONS] Options: -a, --all 顯示所有容器(默認只顯示運行中的) -f, --filter filter 根據提供的條件過濾輸出 --format string 用Go模板語法格式化打印的搜索結果 -n, --last int 顯示最新創建的n個容器(包含所有狀態)(默認為-1) -l, --latest 顯示最新創建的容器(包含所有狀態) --no-trunc 顯示完整輸出 -q, --quiet 只顯示數字ID -s, --size 顯示文件總大小
docker rmi
刪除鏡像
docker rmi [OPTIONS] IMAGE [IMAGE...] Options: -f, --force 強制刪除鏡像 --no-prune 不要刪除未打Tag的父鏡像
docker rm
刪除容器
docker rm [OPTIONS] CONTAINER [CONTAINER...] Options: -f, --force 強制刪除運行中的容器(使用SIGKILL) -l, --link 刪除指定的鏈接 -v, --volumes 刪除與容器關聯的卷
docker history
查看鏡像創建歷史
docker history [OPTIONS] IMAGE Options: --format string 用Go模板語法格式化打印的搜索結果 -H, --human 以人類可讀格式打印尺寸和日期(默認為true) --no-trunc 顯示完整輸出 -q, --quiet 只顯示數字ID
docker start|stop|restart
啟動、停止和重啟一個或多個指定容器
docker kill
殺死一個或多個指定容器
docker events
從服務器拉取動態
docker save
將指定鏡像保存成 tar 歸檔文件
docker load
從 tar 鏡像歸檔中載入鏡像
docker export
將指定的容器保存成 tar 歸檔文件
docker import
從歸檔文件(支持遠程文件)創建一個鏡像
docker top
查看一個正在運行容器的進程,支持 ps 命令參數。
docker inspect
檢查鏡像或者容器的參數,默認返回 JSON 格式。
docker pause
暫停某一容器的所有進程。
docker unpause
恢復某一容器的所有進程。
docker tag
標記本地鏡像,將其歸入某一倉庫
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
docker push
將鏡像推送至遠程倉庫,默認為 Docker Hub
docker logs
獲取容器運行時的輸出日志
docker run
啟動一個容器,在其中運行指定命令。
docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Options: -a stdin 指定標準輸入輸出內容類型,可選 STDIN、STDOUT、STDERR 三項 -d 后臺運行容器,并返回容器ID; -i 以交互模式運行容器,通常與 -t 同時使用; -t 為容器重新分配一個偽輸入終端,通常與 -i 同時使用; --name="nginx-lb" 為容器指定一個名稱; --dns 8.8.8.8 指定容器使用的DNS服務器,默認和宿主一致; --dns-search example.com 指定容器DNS搜索域名,默認和宿主一致; -h "mars" 指定容器的hostname; -e username="ritchie" 設置環境變量; --env-file=[] 從指定文件讀入環境變量; --net="bridge" 指定容器的網絡連接類型,支持 bridge、host、none # 更多參數請查看 docker help run更多資料
Docker聯合文件系統:http://www.dockerinfo.net/175...
Docker文檔:https://docs.docker.com/
Kubernetes工作原理:https://www.zhihu.com/questio...
從零開始k8s:https://www.kubernetes.org.cn...
busybox:https://busybox.net/
alpine:https://www.alpinelinux.org/
原文鏈接:http://tabalt.net/blog/docker...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27431.html
摘要:而用戶能在同一平臺上管理任何集群,輕松地充分利用的強大能力及其迅速壯大的生態系統。在本指南中,你將會了解如何快速上手。環境中的所有主機必須允許彼此間的流量能夠進行跨主機聯網。這一過程需要幾分鐘完成。如果服務正常,將會顯示狀態為綠色。 大家好,給大家介紹一下,這是幫助大家率先上手嘗試Rancher 2.0的神器 @Rancher 2.0快速上手指南 內容導讀 準備一臺Linux主機 啟...
摘要:而用戶能在同一平臺上管理任何集群,輕松地充分利用的強大能力及其迅速壯大的生態系統。在本指南中,你將會了解如何快速上手。環境中的所有主機必須允許彼此間的流量能夠進行跨主機聯網。這一過程需要幾分鐘完成。如果服務正常,將會顯示狀態為綠色。 大家好,給大家介紹一下,這是幫助大家率先上手嘗試Rancher 2.0的神器 @Rancher 2.0快速上手指南 內容導讀 準備一臺Linux主機 啟...
摘要:最佳實踐良好的編碼規范單元測試持續集成文檔,從一開始就形成良好的編碼習慣。真實的電商業務所有的業務需求來自真實的客戶,并且線上良好運營中。 重要通知: Laravel + 小程序的開源電商版本源碼已經在 github 上拉,歡迎提交 issue 和 star :) 開源電商 Server 端: Laravel API源碼 開源電商 client 端:小程序源碼 iBrand 簡介...
摘要:英偉達作為的開發合作者,計劃對的深度學習應用推出一系列博客文章。可使用的英偉達深度學習庫和來實現高性能多加速訓練和推理。最近的訓練基準使用了塊的英偉達和神經網絡架構。 昨天,Facebook 推出了 Caffe2,一個兼具表現力、速度和模塊性的開源深度學習框架。它沿襲了大量的 Caffe 設計,可解決多年來在 Caffe 的使用和部署之中發現的瓶頸問題。最終,Caffe2 打開了算法實驗和新...
閱讀 3967·2021-11-16 11:44
閱讀 5188·2021-10-09 09:54
閱讀 2030·2019-08-30 15:44
閱讀 1678·2019-08-29 17:22
閱讀 2752·2019-08-29 14:11
閱讀 3388·2019-08-26 13:25
閱讀 2324·2019-08-26 11:55
閱讀 1595·2019-08-26 10:37