Docker Starter

Docker是怎么工作的

Docker是一個(gè)Client-Server結(jié)構(gòu)的系統(tǒng),Docker守護(hù)進(jìn)程運(yùn)行在主機(jī)上, 然后通過Socket連接從客戶端訪問, 客戶端和守護(hù)進(jìn)程也可以運(yùn)行再同一主機(jī)上,但這不是必須的。Docker命令行客戶端也是類似的工作方式,但它通常通過Unix域套接字而不是TCP套接 字連接。

守護(hù)進(jìn)程從客戶端接受命令并管理運(yùn)行在主機(jī)上的容器。

Docker Client-Server
Docker Client-Server

Docker 概念及相互作用

  • 主機(jī), 運(yùn)行容器的機(jī)器。
  • 鏡像,文件的層次結(jié)構(gòu),以及包含如何運(yùn)行容器的元數(shù)據(jù)
  • 容器,一個(gè)從鏡像中啟動(dòng),包含正在運(yùn)行的程序的進(jìn)程
  • Registry, 鏡像倉庫
  • 卷,容器外的存儲(chǔ)
  • Dockerfile, 用于創(chuàng)建鏡像的腳本

創(chuàng)建鏡像

  • docker commit container-id
  • docker import url-to-tar
  • docker build -f Dockerfile .

Dockerfile 中的命令

BUILD 命令:

  • FROM - 新鏡像是基于哪個(gè)鏡像的
  • MAINTAINER - 鏡像維護(hù)者的姓名和郵箱地址
  • COPY - 拷貝文件和目錄到鏡像中
  • ADD - 同COPY一樣,但會(huì)自動(dòng)處理URL和解壓tarball壓縮包
  • RUN - 在容器中運(yùn)行一個(gè)命令, 比如:apt-get install
  • ONBUILD - 當(dāng)構(gòu)建一個(gè)被繼承的Dockerfile時(shí)運(yùn)行命令
  • .dockerignore - 不是一個(gè)命令, 但它能控制什么文件被加入到構(gòu)建的上下文中,構(gòu)建鏡像時(shí)應(yīng)該包含.git以及其它的不需要的文件。

RUN 命令:

  • CMD - 運(yùn)行容器時(shí)的默認(rèn)命令,可以被命令行參數(shù)覆蓋
    CMD指定容器啟動(dòng)是執(zhí)行的命令,每個(gè)Dockerfile只能有一條CMD命令,如果指定了多條,只有最后一條會(huì)被執(zhí)行。如果你在啟動(dòng)容器的時(shí)候也指定的命令,那么會(huì)覆蓋Dockerfile構(gòu)建的鏡像里面的CMD命令。
格式:
CMD ["executable","param1","param2"] 使用 exec 執(zhí)行,推薦方式;
CMD command param1 param2 在 /bin/sh 中執(zhí)行,提供給需要交互的應(yīng)用;
CMD ["param1","param2"] 提供給ENTRYPOINT的默認(rèn)參數(shù);
  • ENTRYPOINT - 和CMD類似都是配置容器啟動(dòng)后執(zhí)行的命令,并且不可被 docker run 提供的參數(shù)覆蓋。
格式:
   ENTRYPOINT ["executable", "param1","param2"]
   ENTRYPOINT command param1 param2(shell中執(zhí)行)。

ENTRYPOINT沒有CMD的可替換特性,也就是你啟動(dòng)容器的時(shí)候增加運(yùn)行的命令不會(huì)覆蓋ENTRYPOINT指定的命令。 所以生產(chǎn)實(shí)踐中我們可以同時(shí)使用ENTRYPOINT和CMD

ENTRYPOINT ["/usr/bin/rethinkdb"]
CMD ["--help"]
  • ENV - 設(shè)置容器內(nèi)的環(huán)境變量
  • EXPOSE - 從容器中暴露出端口, 必須顯式的通過在主機(jī)上的RUN命令帶上-p或者-P來暴露端口
  • VOLUME - 指定一個(gè)在文件系統(tǒng)之后的存儲(chǔ)目錄。如果不是通過docker run -v設(shè)置的, 那么將被創(chuàng)建為/var/lib/docker/volumes

BUILD, RUN命令都有的命令:

  • USER - 為RUN、CMD、ENTRYPOINT命令設(shè)置用戶
  • WORKDIR - 為RUN、CMD、ENTRYPOINT、ADD、COPY命令設(shè)置工作目錄

Docker 容器管理

用于與鏡像交互的命令

$ docker images  # 查看所有鏡像.
$ docker import  # 從tarball創(chuàng)建鏡像
$ docker build   # 通過Dockerfile創(chuàng)建鏡像
$ docker commit  # 從容器中創(chuàng)建鏡像
$ docker rmi     # 刪除鏡像
$ docker history # 列出鏡像的變更歷史

用于與容器交互的命令

$ docker create  # 創(chuàng)建一個(gè)容器,但不啟動(dòng)它
$ docker run     #  創(chuàng)建并啟動(dòng)一個(gè)容器
$ docker stop    # 停止容器
$ docker start   #  啟動(dòng)容器
$ docker restart # 重啟容器
$ docker rm      # 刪除容器
$ docker kill    #  給容器發(fā)送kill信號(hào)
$ docker attach  # 連接到正在運(yùn)行的容器中
$ docker wait    # 阻塞直到容器停止為止
$ docker exec    # 在運(yùn)行的容器中執(zhí)行一條命令

檢查容器的命令

$ docker ps      # 顯示運(yùn)行的容器
$ docker inspect # 顯示容器信息(包括ip地址)
$ docker logs    # 獲取容器中的日志
$ docker events  # 獲取容器事件
$ docker port    # 顯示容器的公開端口
$ docker top     # 顯示容器中運(yùn)行的進(jìn)程
$ docker diff    # 查看容器文件系統(tǒng)中改變的文件
$ docker stats   # 查看各種緯度數(shù)據(jù)、內(nèi)存、CPU、文件系統(tǒng)等

PS

docker run 選項(xiàng):
--interactive (-i) - 將標(biāo)準(zhǔn)輸入發(fā)送給進(jìn)程
-tty (-t) - 告訴進(jìn)程有終端連接。 這個(gè)功能會(huì)影響程序的輸出和它如何處理Ctrx-C等信號(hào)。
--rm - 退出時(shí)刪除鏡像。

--name - 給容器命名, 否則它是一個(gè)隨機(jī)容器
--env (-e)- 設(shè)置容器中的環(huán)境變量
--env-file - 從env-file中引入所有環(huán)境變量(同Linux下的source env-file 功能)

發(fā)布容器端口80和主機(jī)上的8080端口

$ docker run -p 8080:80 nginx

啟動(dòng)新的nginx容器,設(shè)置/var/log為卷,并映射到主機(jī)的/tmp目錄下

$ docker run -v /tmp:/var/log nginx

參考地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載自 http://blog.opskumu.com/docker.html 一、Docker 簡介 Docke...
    極客圈閱讀 10,744評(píng)論 0 120
  • docker基本概念 1. Image Definition 鏡像 Image 就是一堆只讀層 read-only...
    慢清塵閱讀 9,004評(píng)論 1 21
  • 五、Docker 端口映射 無論如何,這些 ip 是基于本地系統(tǒng)的并且容器的端口非本地主機(jī)是訪問不到的。此外,除了...
    R_X閱讀 1,959評(píng)論 0 7
  • 0. 前言 docker是什么?docker是用GO語言開發(fā)的應(yīng)用容器引擎,基于容器化,沙箱機(jī)制的應(yīng)用部署技術(shù)???..
    sessionboy閱讀 4,006評(píng)論 2 49
  • 言出必行 用愛和仁慈來擁抱一切,而不是仇恨 美好的記憶總是容易遺忘的,但請記住它曾來過!
    greet閱讀 385評(píng)論 0 1

友情鏈接更多精彩內(nèi)容