Docker 使用簡(jiǎn)介

Docker 是使用 GoLang 開發(fā)的開源容器引擎谤饭,可以方便的打包開發(fā)好的應(yīng)用标捺,然后分發(fā)到任意 linux 主機(jī)上。

與傳統(tǒng)的虛擬機(jī)相比擁有以下優(yōu)勢(shì):

  • 高效的系統(tǒng)資源利用率

    由于不需要進(jìn)行硬件虛擬和運(yùn)行完整的操作系統(tǒng)等額外開銷揉抵,無論是應(yīng)用執(zhí)行速度亡容、內(nèi)存損耗或者文件存儲(chǔ)速度, Docker 都更加高效

  • 更快的啟動(dòng)速度

    Docker 容器應(yīng)用直接運(yùn)行與宿主內(nèi)核冤今,無需啟動(dòng)完整的操作系統(tǒng)闺兢,可以做到秒級(jí)啟動(dòng)

  • 一致的運(yùn)行環(huán)境

    Docker 鏡像提供了除內(nèi)核外的完整運(yùn)行環(huán)境,確保了應(yīng)用運(yùn)行環(huán)境的一致性

  • 持續(xù)交付和部署

    可以通過 Docker 鏡像來實(shí)現(xiàn)服務(wù)的持續(xù)交付戏罢、部署屋谭。使用 Dockerfile 來構(gòu)建鏡像,使用持續(xù)集成系統(tǒng)進(jìn)行集成測(cè)試龟糕;使用鏡像結(jié)合持續(xù)部署系統(tǒng)進(jìn)行自動(dòng)部署

  • 遷移輕松

    只需要遷移鏡像及鏡像運(yùn)行的數(shù)據(jù)就可在其他主機(jī)或平臺(tái)運(yùn)行

  • 易于維護(hù)和擴(kuò)展

    由于使用鏡像進(jìn)行部署桐磁,使維護(hù)更為容易。由于支持在鏡像的基礎(chǔ)上進(jìn)行定制讲岁,使得擴(kuò)展變得更簡(jiǎn)單我擂。而官方也維護(hù)了一大批高質(zhì)量的鏡像,大大降低了鏡像的制作成本

基本概念

倉庫

Docker 提供了倉庫(Repository)用于存放制作好的鏡像缓艳,方便使用者獲取校摩,在本地可通知配置多個(gè) Repository

  • 拉取

    可以使用命令來拉取鏡像:

    docker pull [repo url>/]image name>

    默認(rèn)的 repo urlhub.docker.com 阶淘,拉取默認(rèn)倉庫中的鏡像時(shí)是不需要 url 的衙吩。
    如拉取 debiandocker pull debian

  • 推送

    我們也可將自己制作好的鏡像推送到倉庫溪窒,以便分發(fā)坤塞,使用命令:

    docker push [<repo url>/]<image name>[:<image tag>>

  • 搜索

    使用 docker search 命令則可搜索默認(rèn) repo url 內(nèi)的鏡像。

  • 鏡像加速

    由于默認(rèn) repo url 在國(guó)外霉猛,為了加快拉取速度尺锚,需要指定其為國(guó)內(nèi)的,向 /etc/docker/daemon.json 中添加:

    {
      "registry-mirrors": ["https://registry.docker-cn.com"]
    }
    

    便可使用 Docker 在中國(guó)的鏡像加速站惜浅。

    對(duì)于企業(yè)用戶還可搭建自己的私有鏡像倉庫瘫辩,方便管理內(nèi)部鏡像。

鏡像

鏡像是經(jīng)過 Dockerfile 規(guī)則打包生成的, Dockerfile 文件了指明了鏡像的生成及運(yùn)行方式伐厌。

Dockerfile

這里簡(jiǎn)單介紹下 Dockerfile 中常用的命令:

  • FROM

    指明基于那個(gè)鏡像承绸,通常是一個(gè)系統(tǒng)環(huán)境,如 debian 挣轨。在多階段(stage)構(gòu)建中可使用 FROM ... AS ... 來命令階段军熏,供后面的階段使用

  • ENV

    設(shè)置鏡像的環(huán)境變量

  • EXPOSE

    導(dǎo)出端口,語法: EXPOSE port/protocol

  • RUN

    執(zhí)行一條命令

  • COPY

    復(fù)制鏡像內(nèi)部的文件卷扮,也可從指定 stage 中復(fù)制文件荡澎,使用 --from=<stage name> 來實(shí)現(xiàn)

  • ADD

    復(fù)制本地文件到鏡像中,并做了一些額外工作晤锹,如自動(dòng)解壓文件摩幔、保持文件屬性等

  • WORKDIR

    切換工作目錄

  • CMD

    執(zhí)行命令,極容易在 docker run 時(shí)被覆蓋鞭铆。主要用于指定鏡像的默認(rèn)啟動(dòng)命令或衡,有以下三種語法:

    • CMD ["executable", "param1", "param2"] Exec 模式,首先
    • CMD ["param1", "param2"] 設(shè)置 ENTRYPOINT 的默認(rèn)參數(shù)
    • CMD command param1 param2 Shell 模式
  • ENTRYPOINT

    指定鏡像默認(rèn)的運(yùn)行命令车遂,可以使用 --entrypoint 參數(shù)在 docker run 時(shí)覆蓋 Dockerfile 內(nèi)的 ENTRYPOINT

    ExecShell 兩種模式

    通常使用這個(gè)命令來指定鏡像的啟動(dòng)命令封断,因?yàn)?CMD 稍不注意就被覆蓋了

更多關(guān)于 Dockerfile 內(nèi)容請(qǐng)參見: Dockerfile reference

這里給出一個(gè)簡(jiǎn)單的 Dockerfile=, 是 =debian sid 的:

FROM scratch
ADD rootfs.tar.xz /
CMD ["bash"]

創(chuàng)建

使用 docker build -f <Dockerfile path> [-t <image name>[:<tag>]] . 創(chuàng)建鏡像和標(biāo)記 Tag

Tag 可用來標(biāo)記不同的鏡像版本舶担,就像版本號(hào)坡疼。

列出

使用 docker image ls 可以列出下載下來的鏡像

運(yùn)行

使用 docker run 命令運(yùn)行鏡像,可使用參數(shù)配置柄沮,下面給出一個(gè)例子:

docker run -it -d -p <local port>:<container port> -v <local path>:<container path> <image>

  • -i 是交互式操作
  • -t 是終端
  • -p 指定端口映射
  • -v 指定 volume 映射
  • -d 后臺(tái)模式

刪除

使用 docker image rm <image id> 刪除鏡像

導(dǎo)入和導(dǎo)出

  • 導(dǎo)出: docker save <image id> > <image save>.tar
  • 導(dǎo)入: docker load < <image save>.tar

容器

容器是鏡像運(yùn)行后的實(shí)體回梧,運(yùn)行與屬于自己的獨(dú)立的命名空間废岂。

創(chuàng)建

使用 docker run 命令啟動(dòng)鏡像就可以創(chuàng)建一個(gè)容器

列出

使用 docker ps 可列出正在運(yùn)行的容器祖搓,加上 -a 參數(shù)可列出所以存在的容器

控制

  • 啟動(dòng)

    使用 docker container start <containe id> 啟動(dòng)容器

  • 終止

    使用 docker container stop <containe id> 終止容器

  • 暫停

    dcoker container pause <containe id>

  • 重啟

    dcoker container restart <containe id>

  • 日志

    dcoker container logs <containe id>

刪除

docker container rm <container id> 命令可刪除容器

進(jìn)入容器

使用 docker exec -it <container id> /bin/sh 命令可進(jìn)入容器的執(zhí)行環(huán)境

導(dǎo)入和導(dǎo)出

  • 導(dǎo)入: docker import <container export>.tar <container name>
  • 導(dǎo)出: docker export <container id> > <container export>.tar

部署

直接運(yùn)行鏡像不便于部署服務(wù),因而官方推出了 Docker Compose 來負(fù)責(zé)應(yīng)用部署湖苞。

使用 docker-compose.yml 文件將應(yīng)用需要的鏡像都定義在一起拯欧,然后使用 docker-compose 命令來部署。

docker-compose.yml 的語法詳見: Compose file version 3 reference财骨,這里給出一份部署 wordpress 的文件:

version: "3.7"

services:
  wordpress:
    image: wordpress
    ports:
      - "8080:80"
    networks:
      - backend

  mysql:
    image: mysql
    volumes:
       - db-data:/var/lib/mysql/data
    networks:
       - backend

volumes:
  db-data:

networks:
  backend:

常用命令

  • up

    啟動(dòng)服務(wù)镐作,加上 -d 表示在后端運(yùn)行

  • down

    終止服務(wù)

  • build

    構(gòu)建服務(wù)中的容器

  • config

    驗(yàn)證文件格式是否有誤

  • exec

    進(jìn)入指定的容器,如進(jìn)入上面 wordpress 中的 mysql 則是: docker-compose exec mysql

  • logs

    顯示日志隆箩,可指定容器

  • restart

    重啟服務(wù)

更多命令請(qǐng)見: Overview of docker-compose CLI

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末该贾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子捌臊,更是在濱河造成了極大的恐慌杨蛋,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異逞力,居然都是意外死亡曙寡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門寇荧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來举庶,“玉大人,你說我怎么就攤上這事揩抡』Ы模” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵峦嗤,是天一觀的道長(zhǎng)添祸。 經(jīng)常有香客問我,道長(zhǎng)寻仗,這世上最難降的妖魔是什么刃泌? 我笑而不...
    開封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮署尤,結(jié)果婚禮上耙替,老公的妹妹穿的比我還像新娘。我一直安慰自己曹体,他們只是感情好俗扇,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著箕别,像睡著了一般铜幽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上串稀,一...
    開封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天除抛,我揣著相機(jī)與錄音,去河邊找鬼母截。 笑死到忽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的清寇。 我是一名探鬼主播喘漏,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼华烟!你這毒婦竟也來了翩迈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤盔夜,失蹤者是張志新(化名)和其女友劉穎负饲,沒想到半個(gè)月后搅方,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绽族,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年姨涡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吧慢。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡涛漂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出检诗,到底是詐尸還是另有隱情匈仗,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布逢慌,位于F島的核電站悠轩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏攻泼。R本人自食惡果不足惜火架,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望忙菠。 院中可真熱鬧何鸡,春花似錦、人聲如沸牛欢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽傍睹。三九已至隔盛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拾稳,已是汗流浹背吮炕。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留熊赖,地道東北人来屠。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像震鹉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子捆姜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容