docker系列之入門篇

timg3254362.jpeg

0. 前言

docker是什么?
docker是用GO語言開發(fā)的應用容器引擎俺猿,基于容器化茎匠,沙箱機制的應用部署技術⊙号郏可適用于自動化測試汽抚、打包,持續(xù)集成和發(fā)布應用程序等場景伯病。

值得注意的是造烁,docker現(xiàn)已改名為moby。

docker基于容器化午笛,沙箱機制惭蟋,可使你用較少的命令和腳本快速部署應用。一次構建药磺,多處移植使用告组。再配合shell等腳本語言,可實現(xiàn)腳本化一鍵部署癌佩。

另外木缝,docker大部分的工作都是依賴命令來執(zhí)行的,簡單易上手围辙。

如火如荼的docker我碟,現(xiàn)已被很多大公司所采用。同時docker也成為了實現(xiàn)serverless(無服務器架構)服務的基礎架構姚建。包括阿里云矫俺,亞馬遜在內(nèi)的云計算服務商都采用了docker來打造serverless服務平臺。

如此同時掸冤,基于docker的微服務架構也如火如荼地出現(xiàn)厘托。

由此可見,docker容器技術的重要性非同一般稿湿。

一铅匹,docker的運作

docker是沙箱機制,容器化部署技術饺藤,它主要作用在于通過運行容器來實現(xiàn)應用部署包斑,而容器基于鏡像運行考杉。

簡單地說,就是將你的項目和依賴包(基礎鏡像)打成一個帶有啟動指令的項目鏡像舰始,然后在服務器創(chuàng)建一個容器崇棠,讓鏡像在容器內(nèi)運行,從而實現(xiàn)項目的部署丸卷。

服務器就是容器的宿主機枕稀,docker容器與宿主機之間是相互隔離的。

它不僅僅可以部署項目谜嫉,還可以用于數(shù)據(jù)庫搭建萎坷,nginx服務搭建,nodejs沐兰、php等編程語言環(huán)境搭建哆档。

二,docker的三個概念

要學習docker住闯,首先要理解它的三個概念:鏡像(Image)瓜浸、容器(Container)、倉庫(Repository)比原。同時你還需要知道它們之間的相互關系插佛。

為了方便理解,下面用通俗的話來描述它們量窘。

  • 鏡像
    docker鏡像是使用Dockerfile腳本雇寇,將你的應用以及應用的依賴包構建而成的一個應用包,它通常帶有該應用的啟動命令蚌铜。而這些命令會在容器啟動時被執(zhí)行锨侯,也就是說你的應用在啟動容器時被啟動。

鏡像的創(chuàng)建冬殃,需要通過配置Dockerfile腳本囚痴,然后執(zhí)行docker build命令來創(chuàng)建。

舉個例子:

 docker build -t mydocker/node-server:v1 .

簡單解釋下:
后面的 “.” 表示當前目錄下造壮。
當執(zhí)行docker build命令時渡讼,docker會尋找當前目錄下的Dockerfile文件,
并根據(jù)Dockerfile腳本文件里的指令創(chuàng)建docker鏡像

關于鏡像的知識后面會做詳細講解耳璧。

  • 容器
    容器是使用 docker run --name 容器名 鏡像 命令創(chuàng)建的,獨立于宿主機(服務器)的沙箱展箱,也可以理解為一個帶有特殊結(jié)構的盒子旨枯,它在創(chuàng)建時會自動執(zhí)行鏡像自帶的一些指令,從而實現(xiàn)該應用的運行混驰。
    狹隘地講攀隔,容器的主要作用就在于給鏡像提供運行空間和環(huán)境皂贩,并執(zhí)行鏡像的指令。

  • 倉庫
    顧名思義昆汹,倉庫是用來存東西的明刷,但不是存容器,而是存儲docker鏡像满粗。你可以把你的docker鏡像通過push命令推送到docker倉庫辈末,然后就可以在任何能使用docker命令的地方通過pull命令把這個鏡像拉取下來。

三映皆,docker鏡像挤聘,容器,倉庫三者關系

使用docker前捅彻,你必須先安裝它组去。

docker的使用方式主要有docker命令,Dockerfile腳本步淹,以及shell腳本三種从隆。
換句話說,你可以把docker當做命令行工具來使用缭裆。

有一點上面已經(jīng)講解過广料,docker是沙箱機制,容器化部署技術幼驶,它主要作用在于通過運行容器來實現(xiàn)應用部署艾杏,而容器則基于鏡像運行。

因此盅藻,首先要有鏡像购桑,有了鏡像才能基于鏡像創(chuàng)建容器,才能把鏡像存儲在倉庫氏淑。

于是可以這么理解勃蜘,鏡像是基礎,容器是鏡像使用者假残,倉庫是鏡像的管理員缭贡。容器和倉庫都是圍繞著鏡像來運作的,是對鏡像的管理和使用辉懒。

另外阳惹,鏡像,容器眶俩,倉庫都分別有一套自己的docker命令莹汤,用于前期的構建以及后期的維護。

四颠印,docker基本開發(fā)流程

基本的開發(fā)流程如下:

  • 1纲岭,尋找基礎鏡像
  • 2抹竹,基于基礎鏡像編寫Dockerfile腳本
  • 3,根據(jù)Dockerfile腳本創(chuàng)建項目鏡像
  • 4止潮,將創(chuàng)建的鏡像推送到docker倉庫 (根據(jù)自身需要窃判,可做可不做)
  • 5,基于項目鏡像創(chuàng)建并運行docker容器 (實現(xiàn)最終部署)

這個流程通常只開發(fā)一次喇闸,后期只做簡單的維護就好袄琳。
這是個基本流程,為什么是基本呢 ? 因為其中會穿插著很多細節(jié)仅偎,這些細節(jié)對后期的維護極為重要跨蟹,比如:

  • 如何寫shell腳本來執(zhí)行docker命令?
  • 如何使用shell腳本+docker命令實現(xiàn)一鍵部署橘沥?
  • 如何規(guī)劃測試環(huán)境腳本窗轩?
  • 如何規(guī)劃正式環(huán)境腳本
    ……

另外,有沒有發(fā)現(xiàn)一點座咆,基本上所有流程都與鏡像有關痢艺。

五, Dockerfile腳本

經(jīng)過上面的講解你應該了解到介陶,基本上大部分的工作都是圍繞著鏡像來做的堤舒。
所以,我們首先來學習docker鏡像哺呜。

而創(chuàng)建鏡像舌缤,首先得配置Dockerfile腳本。鏡像是基于Dockerfile腳本來構建的某残。

1国撵,基礎鏡像

在深入探討鏡像的創(chuàng)建、使用和管理之前玻墅,我們先來理解一個概念——基礎鏡像介牙。

docker有這么一種機制,在構建鏡像時澳厢,它可以依賴一個父鏡像作為底層鏡像环础,與當前正要被構建的鏡像一起打包,從而構建成一個全新的鏡像剩拢。而這個被用作依賴的父鏡像线得,就是基礎鏡像。

為什么有這樣的需要呢裸扶?

比如框都,通常我們開發(fā)一個nodejs應用,它不是隨處可運行的呵晨,它的運行需要依賴操作系統(tǒng)環(huán)境和nodejs運行環(huán)境魏保。

因此,一個單純的node項目鏡像是無法運行起來的摸屠,它需要依賴一個基礎鏡像谓罗,這個基礎鏡像就是nodejs鏡像,nodejs鏡像內(nèi)包含了操作系統(tǒng)環(huán)境和nodejs環(huán)境季二。這樣nodejs鏡像+node項目構建出來的項目鏡像才能完整地運行起來檩咱。

因此,在配置項目Dockerfile創(chuàng)建鏡像腳本之前胯舷,需要先確立一個基礎鏡像刻蚯。
基礎鏡像是如何使用的呢?主要是通過在Dockerfile腳本中使用From命令指定依賴一個父鏡像(基礎鏡像)桑嘶。

  • 基礎鏡像通常不需要自己創(chuàng)建炊汹,docker官方有提供很多基礎鏡像供用戶使用,比如nodejs鏡像逃顶,java鏡像讨便,mongodb鏡像,nginx鏡像等等以政。
  • 除了官方提供的霸褒,你還可以尋找第三方源提供的基礎鏡像。

關于Dockerfile盈蛮,下面會仔細講解废菱。

2,Dockerfile腳本構成

docker鏡像是通過配置Dockerfile腳本抖誉,然后執(zhí)行docker build命令來創(chuàng)建的殊轴。
Dockerfile文件可通過nano Dockerfile命令或touch Dockerfile命令來創(chuàng)建。
Dockerfile腳本文件通常放在項目的根目錄下寸五。也可以放在其他文件夾梳凛,但執(zhí)行docker build時需要指定該文件路徑。


(1)Dockerfile腳本語法和結(jié)構

Dockerfile語法由兩部分構成梳杏,分別是 注釋指令+參數(shù)
使用 “#” 可實現(xiàn)注釋韧拒。

Dockerfile腳本通常分為以下四部分:

  • 基礎鏡像信息
  • 維護者信息
  • 鏡像操作指令
  • 容器啟動時執(zhí)行的指令

(2)Dockerfile腳本案例

下面直接來看個例子說明,這是我的開源博客后臺sinn-server的Dockerfile腳本十性。
如下:

# 基礎鏡像信息
From registry.cn-hangzhou.aliyuncs.com/sessionboy/node:7.5

# 維護者信息
MAINTAINER sessionboy <postmaster@boyagirl.com>

# 鏡像操作指令
COPY ./ /sinn-server
WORKDIR /sinn-server
RUN npm install
EXPOSE 8080

# 容器啟動時執(zhí)行的指令
ENTRYPOINT ["node","bin/run"]
  
(3)Dockerfile語法解剖

Dockerfile有十幾條命令可用于創(chuàng)建鏡像叛溢,下面根據(jù)四個不同功能模塊來介紹這些命令。

A—基礎鏡像信息

基礎鏡像信息劲适,只有一個From指令楷掉,指定依賴的基礎鏡像

  • From
    指定依賴的基礎鏡像肖揣,如果不存在就會從docker官方倉庫Docker Hub尋找
 # docker官方鏡像倉庫
 # 指定docker官方倉庫的最新版nodejs鏡像作為基礎鏡像
 From node:latest     
 更多配置……
 # 第三方鏡像倉庫,比如阿里云的 “https://dev.aliyun.com/search.html ”
 # 指定標簽為7.5的"registry.cn-hangzhou.aliyuncs.com/sessionboy/node"鏡像作為基礎鏡像
 From registry.cn-hangzhou.aliyuncs.com/sessionboy/node:7.5   
 更多配置……
B—維護者信息

維護者信息也只有一個MAINTAINER指令催植,用于描述該鏡像的維護者信息

  • MAINTAINER
# MAINTAINER指令
MAINTAINER sessionboy <postmaster@boyagirl.com>
C—鏡像操作指令

鏡像的操作指令有很多個窖贤,下面逐一講解。

  • COPY
    COPY指令用于拷貝宿主機的源目錄/文件到容器內(nèi)的某個目錄草雕。接受兩個參數(shù)巷屿,源目錄路徑和容器內(nèi)目錄路徑。
# 將 “./”(當前目錄) 下的文件拷貝到容器內(nèi)的 “/sinn-server” 目錄
COPY ./ /sinn-server
  • ADD
    功能和用法與COPY指令基本相同墩虹,不同在于使用ADD指令拷貝時嘱巾,如果拷貝的是壓縮文件,拷貝到容器中時會自動解壓為目錄诫钓。
# 將當前/server目錄拷貝到容器內(nèi)的/projects目錄
ADD /server  /project
  • WORKDIR
    指定RUN旬昭、CMD、ENTRYPOINT 指令的工作目錄

  • RUN
    RUN是核心指令菌湃,它接受命令作為參數(shù)并用于創(chuàng)建鏡像问拘。命令較多時可用""換行。

……
RUN ["/bin/bash", "-c", "echo hello"]
RUN rm ./tmp \
       npm install
……
  • USER
    USER命令用于設置運行容器的UID慢味。
# 指定容器的UID為23541
USER  23541
  • VOLUME
    VOLUME命令用于讓你的容器訪問宿主機上的目錄场梆。一般用來存放數(shù)據(jù)庫和需要保持的數(shù)據(jù)等
# 指定容器可訪問宿主機(服務器)的“/data”目錄和“/home”目錄
VOLUME ["/data",'"/home"]
  • ONBUILD
    配置當所創(chuàng)建的鏡像作為其它新創(chuàng)建鏡像的基礎鏡像時,所執(zhí)行的操作指令纯路。

  • ENV
    ENV命令用于設置環(huán)境變量或油,在容器內(nèi)被腳本或者程序調(diào)用。

# 設置環(huán)境變量 NODE_ENV 為 production
ENV NODE_ENV  production
  • EXPOSE
    EXPOSE用來指定端口驰唬,使容器內(nèi)的應用可以通過端口和外界交互顶岸。
# 對外暴露8080端口
EXPOSE 8080
D—容器啟動時執(zhí)行的指令
  • CMD
    指定啟動容器時執(zhí)行的命令,每個 Dockerfile 只能有一條 CMD 命令叫编,可被 docker run 提供的參數(shù)覆蓋辖佣。
# 三種方式
CMD ["executable","param1","param2"] 使用 exec 執(zhí)行,推薦方式
CMD command param1 param2 在 /bin/sh 中執(zhí)行搓逾,提供給需要交互的應用    
 CMD ["param1","param2"] 提供給 ENTRYPOINT 的默認參數(shù)卷谈;
  • ENTRYPOINT
    容器啟動后執(zhí)行的命令,與CMD命令不同的是霞篡,它不會被 docker run 提供的參數(shù)覆蓋世蔗。
# 兩種方式
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2(shell中執(zhí)行)。

(4)朗兵,案例分析

經(jīng)過上面對Dockerfile腳本的解剖污淋,相信你已對Dockerfile有了實際的了解。
我們接著上面講過的例子余掖,也就是我的開源博客后臺sinn-server的Dockerfile腳本寸爆。
如下:

# 使用From指令指定基礎鏡像為registry.cn-hangzhou.aliyuncs.com/sessionboy/node7.5
From registry.cn-hangzhou.aliyuncs.com/sessionboy/node:7.5
# 使用MAINTAINER指令描述維護者信息
MAINTAINER sessionboy https://github.com/sessionboy/sinn-server
# 鏡像操作指令
COPY ./ /sinn-server   // 把“./”(當前目錄)下的所有文件拷貝到容器內(nèi)的“/sinn-server”目錄
WORKDIR /sinn-server   // 指定RUN、ENTRYPOINT、CMD指令的工作目錄(容器內(nèi))
RUN npm install    // 使用RUN指令赁豆,指定執(zhí)行"npm install"命令
EXPOSE 8080        // 對容器外暴露8080端口
# 容器啟動時執(zhí)行的指令
ENTRYPOINT ["node","bin/run"]  // 指定容器啟動時執(zhí)行“node bin/run”命令仅醇,啟動node應用

六,docker鏡像的創(chuàng)建歌憨、使用和管理

為了方便操作着憨,docker提供了一套鏡像的操作命令墩衙。

1务嫡,創(chuàng)建鏡像

鏡像是基于Dockerfile腳本,使用docker build命令創(chuàng)建的漆改。上面已經(jīng)對Dockerfile做了詳細解剖心铃。下面來說說如何使用Dockerfile腳本創(chuàng)建。
語法:

 docker build [OPTIONS] PATH

OPTIONS為對容器的配置項挫剑,內(nèi)容有點多,可以到這里查看樊破。一般不建議配置愉棱,使用默認的就好。
PATH為Dockerfile腳本所在的目錄哲戚,通常放在項目根目錄下奔滑,使用"."表示。
-t 標記,用來添加tag顺少,指定新的鏡像信息朋其,比如鏡像名稱,標簽脆炎。
下面梅猿,以sinn-server的腳本為例:

# 使用當前目錄的Dockerfile腳本創(chuàng)建名為“registry.cn-hangzhou.aliyuncs.com/sessionboy/sinn”的鏡像,并標記為v1(標簽秒裕,也可以理解為版本號)
docker build -t registry.cn-hangzhou.aliyuncs.com/sessionboy/sinn:v1 .

# 指定使用github.com/creack/docker-firefox的Dockerfile腳本創(chuàng)建鏡像
docker build github.com/creack/docker-firefox

為了方便操作袱蚓,我們在根目錄下建立一個名為build.sh的shell腳本來執(zhí)行這些命令。如下:

# build.sh
docker build -t registry.cn-hangzhou.aliyuncs.com/sessionboy/sinn:v1 .

下面是執(zhí)行過程:

docker鏡像構建過程1.png

docker鏡像構建過程2.png

看到Successfully几蜻,說明鏡像已經(jīng)創(chuàng)建成功了喇潘。
使用命令docker images即可查看你本地所有的docker鏡像。

2入蛆,本地鏡像管理

命令如下:

  • 1响蓉,查看鏡像:docker images
# 列出本地所有鏡像
docker images
  • 2,刪除鏡像:docker rmi 鏡像
# 刪除鏡像
docker rmi  registry.cn-hangzhou.aliyuncs.com/sessionboy/sinn
  • 3哨毁,鏡像重命名:docker tag 原鏡像tag 新鏡像tag
# 將鏡像registry.cn-hangzhou.aliyuncs.com/sessionboy/sinn:v1重新標記為newImages:0.1
docker tag registry.cn-hangzhou.aliyuncs.com/sessionboy/sinn:v1  newImages:0.1
  • 4枫甲,查看鏡像創(chuàng)建歷史:docker history 鏡像
# 查看鏡像registry.cn-hangzhou.aliyuncs.com/sessionboy/sinn的創(chuàng)建歷史
docker history  registry.cn-hangzhou.aliyuncs.com/sessionboy/sinn
  • 5,鏡像歸檔:docker save 鏡像
# 將鏡像registry.cn-hangzhou.aliyuncs.com/sessionboy/sinn保存成 sinn_v1.tar 歸檔文件
docker save -o sinn_v1.tar registry.cn-hangzhou.aliyuncs.com/sessionboy/sinn
  • 6,基于歸檔文件創(chuàng)建鏡像:docker import 歸檔文件 新鏡像tag
docker import sinn_v1.tar new_sinn:v2

3想幻,遠程倉庫鏡像管理

命令如下:

  • 1粱栖,登錄遠程鏡像倉庫: docker login 用戶信息 倉庫地址
    如果未指定鏡像倉庫地址,則默認為官方倉庫 Docker Hub
# 登錄到官方Docker Hub倉庫
docker login -u 用戶名 -p 密碼
# 登錄到阿里云docker倉庫
docker login --username=用戶名  registry.cn-hangzhou.aliyuncs.com
  • 2脏毯,拉取鏡像:docker pull 鏡像
docker pull registry.cn-hangzhou.aliyuncs.com/sessionboy/sinn:v1
  • 3闹究,推送鏡像: docker push 鏡像
docker push registry.cn-hangzhou.aliyuncs.com/sessionboy/sinn:v1
  • 4,搜索鏡像: docker search 鏡像名
# 從官方Docker Hub倉庫搜索node鏡像
docker search node

4食店,鏡像的使用

鏡像通過docker run命令使用的渣淤,這是關于容器部分的操作。

# 指定使用registry.cn-hangzhou.aliyuncs.com/sessionboy/sinn:v1鏡像創(chuàng)建并啟動容器
docker run --name  sinn-server -p 8080:8080 registry.cn-hangzhou.aliyuncs.com/sessionboy/sinn:v1

七吉嫩,容器的創(chuàng)建价认、啟動和管理

創(chuàng)建容器的前提是要有鏡像,有了鏡像之后我們就可以創(chuàng)建并啟動容器了自娩。

1用踩,容器的創(chuàng)建和啟動

通過docker run命令即可實現(xiàn)容器的創(chuàng)建,并也會啟動容器忙迁,這個命令實際上就包含了創(chuàng)建和啟動容器兩部分工作脐彩。
因此,容器的創(chuàng)建和啟動是一體的姊扔。

下面就來說說docker run命令的用法惠奸。


** docker run命令的用法 **

docker run命令如下:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
或
docker run 容器配置項 鏡像 額外的配置

OPTIONS是一些給容器添加的配置項,比如指定容器的名稱旱眯,IP晨川,是否后臺啟動等等。
IMAGE則表示鏡像删豺。COMMAND則是一些額外的命令共虑。

OPTIONS具體配置項如下:

# 摘自w3c菜鳥: http://www.runoob.com/docker/docker-run-command.html
-a stdin: 指定標準輸入輸出內(nèi)容類型,可選 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": 設置環(huán)境變量摹察;
--env-file=[]: 從指定文件讀入環(huán)境變量;
--cpuset="0-2" or --cpuset="0,1,2": 綁定容器到指定CPU運行倡鲸;
-m :設置容器使用內(nèi)存最大值供嚎;
--net="bridge": 指定容器的網(wǎng)絡連接類型,支持 bridge/host/none/container四種類型峭状;
--link=[]: 添加鏈接到另一個容器克滴;
--expose=[]: 開放一個端口或一組端口;
--restart=no/on-failure/always  是否開機自動啟動 宁炫,no表示不啟動偿曙,always表示始終啟動,on-failure表示容器推出狀態(tài)非0時重啟
-v  標記來創(chuàng)建一個數(shù)據(jù)卷并掛載到容器里羔巢,實現(xiàn)宿主機目錄或文件與指定的容器內(nèi)目錄或文件同步映射。

注意: 有些是一個扛"-"罩阵,有些是兩個扛"--"

這么多配置項竿秆,除非特別需要,否則不必全都配置稿壁。但有些是經(jīng)常使用或者必須的幽钢。比如: --name -d -e -v, 這些是常用的配置項,需要熟悉它們傅是。

下面來舉個例子匪燕,為了方便操作,我們通常把命令寫在一個shell腳本里面喧笔,這樣只需要執(zhí)行shell腳本即可帽驯,不需要每次都手動輸入。

以我的開源博客后臺sinn-server的容器啟動腳本release-sinn.sh為例:

# release-sinn.sh

docker run --name sinn-server -p 8888:8888 -d -e 'NODE_ENV=production' --restart=always registry.cn-hangzhou.aliyuncs.com/sessionboy/sinn:v1

# --name sinn-server   指定容器名為sinn-server
# -p 8888:8888   指定宿主機8888端口與容器內(nèi)的8888端口形成映射
# -d   守護進程運行
# -e 'NODE_ENV=production'  設置環(huán)境變量NODE_ENV為production
# --restart=always 開機自啟動
# registry.cn-hangzhou.aliyuncs.com/sessionboy/sinn:v1   指定的鏡像

只需要執(zhí)行release-sinn.sh腳本即可執(zhí)行上面的命令书闸,如下:

$ sh release-sinn.sh

以下是執(zhí)行過程尼变,如圖:

容器的啟動.png

這樣我們的容器就啟動成功了。使用docker psdocker ps -a命令即可查看所有正在運行的容器浆劲。

下面來講講容器的管理嫌术。

2,容器的管理

docker提供了很多關于容器的操作命令牌借,包括刪除容器度气,停止、重啟容器等等膨报。
下面列出一些經(jīng)常使用的用于操作容器的命令:

  • 1磷籍,查看容器: docker ps
# 列出所有正在運行的容器
docker ps
  • 2哲虾,啟動已停止的容器: docker start
# 啟動一個或多少已經(jīng)被停止的容器
docker start  [options]  [containers] 
  • 3,停止容器:docker stop
# 停止正在運行的容器 sinn-server
docker stop sinn-server
  • 4择示,重啟容器:docker restart
# 重啟正在運行的容器 sinn-server
docker restart  sinn-server
  • 5束凑,刪除容器: docker rm
#刪除容器 sinn-server
docker rm  sinn-server

注意:刪除容器命令是docker rm ,刪除鏡像命令是docker rmi

  • 6栅盲,殺掉正在運行的容器(包括進程): docker kill
# 殺掉容器 sinn-server
docker kill sinn-server
  • 7汪诉,進入容器: docker exec
    這個命令比較重要,因為通常我們需要進入容器內(nèi)去操作一些東西谈秫。
docker exec -it 容器名稱/ID  終端
# 例子: 進入ID為0d15561b9f10的容器
docker exec -it sinn-server bash
或
docker exec -it 0d15561b9f10 /bin/bash

注意: 進入容器后扒寄,如果想退出容器,只需要輸入exit命令執(zhí)行即可拟烫。

  • 8该编,查看容器日志:docker logs
# 查看容器sinn-server的日志
docker logs sinn-server
  • 9,容器與主機之間的數(shù)據(jù)拷貝:docker cp
    往容器里拷貝數(shù)據(jù)硕淑,或從容器內(nèi)拷貝數(shù)據(jù)出來课竣,偶爾會常用到
# 將主機的/data/user目錄拷貝到容器sinn-server內(nèi)的/data/user目錄
docker cp /data/user sinn-server:/data/user
# 將容器sinn-server內(nèi)的/data/user目錄拷貝到主機的/data/user目錄
docker cp sinn-server:/data/user /data/user

以上是關于容器操作的大部分內(nèi)容。

八置媳,使用docker搭建數(shù)據(jù)庫

以往我們搭建數(shù)據(jù)庫或nginx服務的時候于樟,通常都需要手動去安裝,然后做大量的配置拇囊。期間也經(jīng)常會遇到各種各樣的問題迂曲。

下面來介紹,如何在linux服務器用docker來快速搭建一個mongodb數(shù)據(jù)庫寥袭。

1, 首先拉取mongodb鏡像

# 從docker官方倉庫拉取mongo鏡像(你也可以用第三方的mongo鏡像路捧,或自己創(chuàng)建的mongo鏡像)
docker pull mongo

2,啟動mongo容器

建立shell腳本"my-mongo.sh"來運行mongodb容器啟動命令

# my-mongo.sh
# 使用鏡像"mongo"創(chuàng)建并啟動容器"my-mongo"
docker run --name my-mongo -d -p 27017:27017 -v data/sinn-db:/data/db mongo
# -p 27017:27017    容器內(nèi)27017端口與主機27017端口形成映射
# -d     守護進程運行
# --name my-mongo    指定容器名為my-mongo
# -v data/sinn-db:/data/db   將主機的"/data/sinn-db"目錄掛載到容器內(nèi)"/data/db"目錄传黄,作為mongodb數(shù)據(jù)存儲目錄

執(zhí)行my-mongo.sh腳本即可:

 sh my-mongo.sh

容器啟動成功后杰扫,mongodb已經(jīng)啟動。訪問你IP的27017端口看到下面的提示尝江,說明mongodb已經(jīng)搭建成功涉波。

It looks like you are trying to access MongoDB over HTTP on the native driver port.

至此,一個mongodb數(shù)據(jù)庫就搭建好了炭序,是不是很簡單啤覆?

同樣,使用docker搭建nginx也十分簡單惭聂,只需要拉取nginx鏡像窗声,然后基于nginx鏡像啟動容器,啟動時加一些nginx配置或指定nginx配置文件即可辜纲。

九笨觅,總結(jié)

docker很強大拦耐,除了部署項目外,還可用于搭建數(shù)據(jù)庫见剩,nginx服務等杀糯。它的用途十分廣泛而強大,另外它的性能消耗也很低苍苞。操作也十分簡單固翰。

docker很容易學,它主要基于命令來操作羹呵,熟知這些命令以及Dockerfile腳本的配置骂际,很快就能上手。

相信學會了docker之后冈欢,你會愛不釋手歉铝。

本文的部分腳本,可參考我的開源博客后臺sinn-server的docker腳本配置凑耻。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末太示,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子拳话,更是在濱河造成了極大的恐慌先匪,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弃衍,死亡現(xiàn)場離奇詭異,居然都是意外死亡坚俗,警方通過查閱死者的電腦和手機镜盯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來猖败,“玉大人速缆,你說我怎么就攤上這事《魑牛” “怎么了艺糜?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長幢尚。 經(jīng)常有香客問我破停,道長,這世上最難降的妖魔是什么尉剩? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任真慢,我火速辦了婚禮,結(jié)果婚禮上理茎,老公的妹妹穿的比我還像新娘黑界。我一直安慰自己管嬉,他們只是感情好,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布朗鸠。 她就那樣靜靜地躺著蚯撩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪烛占。 梳的紋絲不亂的頭發(fā)上胎挎,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天,我揣著相機與錄音扰楼,去河邊找鬼呀癣。 笑死,一個胖子當著我的面吹牛弦赖,可吹牛的內(nèi)容都是我干的项栏。 我是一名探鬼主播,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼蹬竖,長吁一口氣:“原來是場噩夢啊……” “哼沼沈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起币厕,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤列另,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后旦装,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體页衙,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年阴绢,在試婚紗的時候發(fā)現(xiàn)自己被綠了店乐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡呻袭,死狀恐怖眨八,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情左电,我是刑警寧澤廉侧,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站篓足,受9級特大地震影響段誊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纷纫,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一枕扫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辱魁,春花似錦烟瞧、人聲如沸诗鸭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽强岸。三九已至,卻和暖如春砾赔,著一層夾襖步出監(jiān)牢的瞬間蝌箍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工暴心, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留妓盲,地道東北人。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓专普,卻偏偏與公主長得像悯衬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子檀夹,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

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

  • Docker — 云時代的程序分發(fā)方式 要說最近一年云計算業(yè)界有什么大事件筋粗?Google Compute Engi...
    ahohoho閱讀 15,508評論 15 147
  • 轉(zhuǎn)載自 http://blog.opskumu.com/docker.html 一、Docker 簡介 Docke...
    極客圈閱讀 10,473評論 0 120
  • docker基本概念 1. Image Definition 鏡像 Image 就是一堆只讀層 read-only...
    慢清塵閱讀 8,725評論 1 21
  • 我的家庭條件一般炸渡,甚至可以說是不好娜亿,尤其是今年。爸爸辭職后以幫助其他包工頭聯(lián)系活路為業(yè)蚌堵,緊緊張張的支撐著這個家...
    smile愛晴天閱讀 559評論 0 0
  • 古風 嘆黃秋園 溫志齡 基層美協(xié)拒才俊买决,藝高招妒默無聞。 生前畫作多珍寶吼畏,逝后七載始爆冷策州。 自幼習繪從巨擘,酷...
    碧野牧歌閱讀 309評論 0 0