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í)行過程:
看到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í)行過程尼变,如圖:
這樣我們的容器就啟動成功了。使用docker ps
或docker 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腳本配置凑耻。