2018-01-13Docker入門學習之一

1.Linux安裝Docker

sudo wget -qO- https//get.docker.com | sh

? ? sudo:作為普通用戶,希望以管理員的身份運行

? ? wget:Linux的下載工具,如果沒有下載即可

? ? -q:讓wget輸出不要太多

????O-:讓wget標準輸出,而不是輸出到文件

? ??https//get.docker.com:下載地址

? ? | sh:管道的概念,從上面的網(wǎng)址下載了一個shell腳本,交給sh[shell]去執(zhí)行

? ? ? ? shell會檢測你的版本,并按照你的版本來安裝

sudo usermod -aG docker root

? ? docker 只允許root執(zhí)行斋扰,將當前用戶加入到docker組中


????如果系統(tǒng)是CentOS7,則CentOS-Extras 庫中已帶 Docker渡八,可以直接安裝:

yum -y install docker

????啟動,和其他的service啟動都是一樣的

systemctl start docker

????讓docker開機啟動

chkconfig docker on

????查看docker的相關(guān)信息

docker info

2.Docker的架構(gòu)Architectrue


Docker架構(gòu)示意圖之一

? ? DOCKER_HOST:進行Docker操作的虛擬機;

????Docker daemon:由虛擬機運行的Docker程序,由該程序運行各種各樣的Docker操作,如:下載Docker的鏡像;運行一個容器;

? ? Client:客戶端,我們從客戶端給Docker daemon發(fā)起命令,進行操作,如:docker build;docker pull;docker run;

? ? Registry:互聯(lián)網(wǎng)的一個倉庫服務(wù),所有Docker用戶共享的一個Docker服務(wù),Docker daemon可以從其中獲取文件


Docker架構(gòu)示意圖之二

3.Docker的簡單命令及解釋

Docker簡單命令之一
Docker簡單命令之二

? ? 3.1運行Docker鏡像

? ??docker run ubuntu echo hello world

????通過Docker運行ubuntu image,結(jié)束后,輸出hello world;

????如果本地的沒有,會從遠端的鏡像倉庫下載,

????查看本地images鏡像

docker images

????帶有參數(shù)的docker run

docker run -p 8080:80 -d daocloud.io/nginx

????-p : 做端口映射,8080:80,將原本的Docker的80端口,映射到本地的8080端口

????-d : 允許程序直接返回,以守護進程的方式運行的,并且會返回CONTAINER ID

????查看當前運行的Docker程序,剛才運行了nginx服務(wù)后,可以用curl localhost:8080,進行確認

????3.2查看Docker容器

docker ps?

????如果沒有任何參數(shù),只會顯示當前運行的容器

????列出所有的docker容器:docker ps -a

????3.3將文件copy進容器的文件夾內(nèi)

docker cp index.html 3c160b38650f://usr/share/nginx/html

????其中3c160b38650f為其CONTAINER ID

? ? 3.4停止Docker容器

docker stop 3c160b38650f

????docker stop只是將容器停止了啃洋,并沒有刪除。再次執(zhí)行docker run命令會創(chuàng)建一個新的容器屎鳍。

????Docker在容器內(nèi)的操作都是沒有保存的,

? ? 3.5提交當前運行的容器的改動

docker commit -m 'fun' 41835fe93f71 nginx-docker

????此命令會產(chǎn)生一個新的容器,可以在docker images中查看,后面的'nginx-docker'是其名字

? ? 3.6刪除Docker鏡像

docker rmi 300f719c1d79

? ? 3.7刪除Docker容器

docker rm?3c160b38650f 53ab421c10c9

????可以使用空格分開,刪除多個

4.Dockerfile

? ?4.1編寫Dockerfile文檔

? ??FROM alpine:latest

????MAINTAINER YuSongYuan

????CMD echo "hello docker !!!"

????alpine : 是為了docker做的一個極小的linux環(huán)境,產(chǎn)生的image會非常小

????MAINTAINER : 是告訴其他人這個鏡像是誰制作的

????CMD : 運行一個cmd命令

? ? 4.2使用docker build命令構(gòu)建鏡像

docker build -t hello_docker .

? ? -t : 為新建的鏡像添加一個標簽/名字,標簽/名字為hello_docker

? ? . : 這個點,指的是路徑,將當前的路徑下的所有的文件都給docker engine,讓其來產(chǎn)生鏡像

????運行之后就會在docker images中產(chǎn)生我們的剛剛創(chuàng)建的鏡像,并且標簽/名字為hello_docker,可以運行剛剛產(chǎn)生的鏡像,會執(zhí)行CMD后面的命令,輸出hello docker !!!

? ? ps:在build時,每一個命令[FROM ,COPY ...?]都會產(chǎn)生一個新層,這些層都是只讀的,當被運行成為容器后,變?yōu)橐粋€整體,容器層,該層是可讀可寫的

????4.3進階Dockerfile

????在新的目錄Dockerfile02,編寫Dockerfile文檔

FROM daocloud.io/nginx

MAINTAINER YuSongYuan

COPY index.html /usr/share/nginx/html

ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;"]

EXPOSE 80

????FROM ubuntu : 給出基礎(chǔ)鏡像的名字

????RUN apt-get update : 使用apt-get更新ubuntu的庫

????RUN apt-get install -y nginx : 使用apt-get安裝nginx,并且不提醒

????COPY index.html /var/www/html : 將index.html文件拷貝進該文件夾內(nèi)

????ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;"]?: 提供容器的入點,會將三個內(nèi)容展開,用空格隔開,執(zhí)行;這個參數(shù)的意義是,將nginx在前臺執(zhí)行,而不是作為守護進程來執(zhí)行

????EXPOSE 80 : 暴露一個端口,普通的http監(jiān)聽的端口

????ps:apt-get是一個和yum類似的下載安裝包的插件,如果沒有改插件,build時會報錯

????這時候使用

docker build -t hello_nginx .

docker run -d -p 80:80 hello_nginx

????運行后,index.html已經(jīng)被拷貝到Dockerfile中的指向的路徑,可以直接用curl localhost:80,進行訪問,出現(xiàn)的就是index.html中的內(nèi)容

4.4Dockerfile語法

Dockerfile語法之一
Dockerfile語法之二

5.Docker的存儲技術(shù)Volume

????提供獨立于容器之外的持久化存儲

? ? 可以提供容器與容器之間共享的數(shù)據(jù)

? ? 5.1Volume操作

docker run -d --name nginx -v /usr/share/nginx/html hello_nginx

?????--name nginx : 給當前容器一個名字 nginx

????-v?/usr/share/nginx/html : 容器內(nèi)部的一個地址,用來訪問這些網(wǎng)頁的一個地址???

docker inspect nginx

????inspect nginx : 檢查名字為 nginx的容器

????其中

"Mounts": [

? ? ? ? ? ? {

? ? ? ? ? ? ? ? "Name": "79a77f478c56cd12e6f2d40b2bfa181162d291120865ea6cf8d83bb160844a15",

? ? ? ? ? ? ? ? "Source": "/var/lib/docker/volumes/79a77f478c56cd12e6f2d40b2bfa181162d291120865ea6cf8d83bb160844a15/_data",

? ? ? ? ? ? ? ? "Destination": "/usr/share/nginx/html",

? ? ? ? ? ? ? ? "Driver": "local",

? ? ? ? ? ? ? ? "Mode": "",

? ? ? ? ? ? ? ? "RW": true,

? ? ? ? ? ? ? ? "Propagation": ""

? ? ? ? ? ? }

? ? ? ? ],

????將宿主Source中的路徑,掛載到了Destination中

????如果是linux_host,可以直接訪問Source中的路徑

ll /var/lib/docker/volumes/79a77f478c56cd12e6f2d40b2bfa181162d291120865ea6cf8d83bb160844a15/_data

????如果在Mac中,Source的路徑,外面還有一層虛擬層,直接訪問是無法訪問的

????可以使用

screen ~/Library/Containers/com.docker.docker/Data/com.docker.docker.amd64-linux/tty

????這個本人并未驗證

????進入容器中

docker exec -it nginx /bin/bash

????比如:查看我們添加進入的index.html,首先cd /usr/share/nginx/html/,然后應(yīng)當使用cat index.html,使用vi或vim都是找到不到命令的

????5.2掛載系統(tǒng)路徑

docker run -p 80:80 -d -v $PWD/html : /usr/share/nginx/html daocloud.io/nginx

????運行daocloud.io/nginx鏡像,并將當前目錄[$PWD]下的html目錄掛載到/usr/share/nginx/html 中

????這時,當我們修改html中的index.html時,訪問localhost:8080的內(nèi)容也會隨之改變

????5.3掛載容器

docker creat -v $PWD/data:/var/mydata --name data_container? docker.io/alpine

????以alpine為基礎(chǔ)鏡像,創(chuàng)建一個數(shù)據(jù)鏡像,并將當前目錄中的data掛載到/var/mydata中,起名為data_container

docker run -it --volumes-from data_container docker.io/ubuntu /bin/bash

????-it : 這里因為docker.io/alpine是一個基礎(chǔ)鏡像,沒有什么服務(wù),所以用 -it :?以交互的方式運行,需要后面加上/bin/bash

????--volumes-from : 從另外一個容器中掛載

????這里運行后,會直接進入到容器中,輸入下面的命令,這個命令也就是上面使用inspecte命令中,看到的其中的一個屬性

mount

????會在其中看到

/dev/mapper/centos-root on /var/mydata type xfs (rw,relatime,seclabel,attr2,inode64,noquota)

????這時候我們可以cd??/var/mydata中,并touch ysy.txt, exit退出容器后,流量可以在data文件夾中看到y(tǒng)sy.txt

????這時說明,我們的容器掛載是成功的,一個容器可以被多個容器掛載,做到數(shù)據(jù)一致性

6.Resgitry鏡像倉庫

????6.1術(shù)語介紹

Docker相關(guān)術(shù)語介紹

????6.2命令介紹

Docker的Registry命令

? ? 6.3Registry練習

????從遠程倉庫中搜索whalesay

docker search whalesay

????其中STAR表示獲取的星星的數(shù)量,OFFICIA是標注是否為官方的

????從遠程倉庫下載whalesay鏡像

docker pull docker.io/docker/whalesay

? ? 下載完成后,可以用docker images命令看到本地的鏡像倉庫中,已經(jīng)存在剛剛下載的鏡像,

? ? REPOSITORY???? ???????????????? TAG???? ???? IMAGE ID???? ???????? CREATED ???? ???? SIZE

????docker.io/docker/whalesay ? ?latest ? ? ? ? 6b362a9f73eb ???? 2 years ago ? ? ? ? 247 MB

? ??REPOSITORY : 鏡像的名字

? ???TAG : 鏡像的標簽,latest為缺省的標簽,當沒有設(shè)置標簽時,這個就是其標簽

? ? 在本地新建一個鏡像,以ysy/whalesay為其名字

? ??docker tag docker.io/docker/whalesay ysy/whalesay

????這時用docker images命令可以看到本地倉庫中已經(jīng)多了名字為ysy/whalesay 的鏡像

7.docker-compose多容器app

? ? docker-compose是一個獨立的宏娄,用于通過文本文件拉起多容器app

? ? 7.1下載docker-compose

? ? 在linux中下載docker-compose

curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-$(uname -s)-$(uname -m) > /usr/local/bin/docker-compose

????其中,-$(uname -s)-$(uname -m)是獲取當前的這兩個命令的輸出逮壁,拼接到地址中孵坚,> 是指通過管道技術(shù),下載到后面的目錄中窥淆,成為可執(zhí)行文件

[root@localhost ~]# uname -s

Linux

[root@localhost ~]# uname -m

x86_64

? ? 7.2docker-compose實戰(zhàn)

? ? ? ? 7.2.1實戰(zhàn)項目架構(gòu)介紹

docker-compose實戰(zhàn)項目結(jié)構(gòu)示意圖

? ? ? ? 7.2.2實戰(zhàn)項目yaml配置文件

docker-compose實戰(zhàn)項目yaml配置文件

? ? ? ? 7.2.3項目實戰(zhàn)

? ? ? ? ? ? 在ghost中創(chuàng)建三個文件夾

? ?mkdir ghost nginx data

????????????在ghost文件夾中創(chuàng)建Dockerfile文件

FROM ghost

COPY ./config.js /var/lib/ghost/config.js

EXPOSE 2368

CMD ["npm", "start", "--production"]

????????????ghost : 從官方拉取

????????????["npm", "start", "--production"] : 這個是node.js的程序卖宠,使用npm命令啟動

? ? ? ? ? ? 在ghost文件夾中創(chuàng)建config.js文件

var path = require('path'),

config;


config = {

? ? ? ? production:{

? ? ? ? ? ? ? ? url: 'http://mytestblog.com',

? ? ? ? ? ? ? ? mail: {},

? ? ? ? ? ? ? ? database: {

? ? ? ? ? ? ? ? ? ? ? ? client: 'mysql',

? ? ? ? ? ? ? ? ? ? ? ? connection: {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? host: 'db',

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? user: 'ghost',

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? password: 'ghost',

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? database: 'ghost',

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? port: '3306',

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? charst: 'utf8'

? ? ? ? ? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? ? ? ? ? debug: false

? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? paths: {

? ? ? ? ? ? ? ? ? ? ? ? contentPath: path.join(process.env.GHOST_CONTENT, '/')

? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? server: {

? ? ? ? ? ? ? ? ? ? ? ? host: '0.0.0.0',

? ? ? ? ? ? ? ? ? ? ? ? prot: '2368'

? ? ? ? ? ? ? ? }

? ? ? ? }

};

? ? ? ? ? ? ? ? 在nginx中添加Dockerfile配置文件

FROM nginx

COPY nginx.conf /etc/nginx/nginx.conf

EXPOSE 80

? ? ? ? ? ? ? ? 因為在ghost中已經(jīng)有啟動命令,所以這里就不在有啟動命令

? ? ? ? ? ? ? ? 在nginx文件夾中添加nginx.conf文件

worker processes 4;

events {worker connections 1024;}

http {

? ? ? ? server {

? ? ? ? ? ? ? ? listen 80;

? ? ? ? ? ? ? ? lacation / {

? ? ? ? ? ? ? ? ? ? ? ? proxy pass http://ghost-app:2368;

? ? ? ? ? ? ? ? }

? ? ? ? }

}

????????????????這里是使用ghost-app這個名字指向ghost

? ? ? ? ? ? ? ? 在最外層的ghost文件夾內(nèi)創(chuàng)建docker-compose.yml文件

version: '2'

networks:

? ? ? ? ghost:

service:

? ? ? ? ghost-app:

? ? ? ? ? ? ? ? build: ghost

? ? ? ? ? ? ? ? network:

? ? ? ? ? ? ? ? ? ? ? ? - ghost

? ? ? ? ? ? ? ? depends_on:

? ? ? ? ? ? ? ? ? ? ? ? - db

? ? ? ? ? ? ? ? ports:

? ? ? ? ? ? ? ? ? ? ? ? - "2368:2368"

? ? ? ? nginx:

? ? ? ? ? ? ? ? build: nginx

? ? ? ? ? ? ? ? networks:

? ? ? ? ? ? ? ? ? ? ? ? - ghost

? ? ? ? ? ? ? ? depends_on:

? ? ? ? ? ? ? ? ? ? ? ? - ghost-app

? ? ? ? ? ? ? ? ports:

? ? ? ? ? ? ? ? ? ? ? ? - "80:80"

? ? ? ? db:

? ? ? ? ? ? ? ? image: "mysql:5.7.15"

? ? ? ? ? ? ? ? networks:

? ? ? ? ? ? ? ? ? ? ? ? - ghost

? ? ? ? ? ? ? ? environment:

? ? ? ? ? ? ? ? ? ? ? ? MYSQL_ROOT_PASSWORD: mysqlroot

? ? ? ? ? ? ? ? ? ? ? ? MYSQL_USER: ghost

? ? ? ? ? ? ? ? ? ? ? ? MYSQL_PASSWORD: ghost

? ? ? ? ? ? ? ? volumes:

? ? ? ? ? ? ? ? ? ? ? ? - $PWD/data:/var/lib/mysql

? ? ? ? ? ? ? ? ports:

? ? ? ? ? ? ? ? ? ? ? ? - “3306”

?????????????????volumes : 將數(shù)據(jù)庫的路徑掛載到容器中祖乳,這樣寫的博客就會被存下來逗堵,不會隨著容器的消失而消失

????????????????將docker-compose拉起來

docker-compose up -d

????????????????這時候訪問 localhost:80,產(chǎn)生502錯誤秉氧,說明nginx已經(jīng)起來的眷昆,但是nginx和ghost之間鏈接有錯誤

????????????????將nginx.conf的變量名中的空格替換為下劃線

????????????????將docker-compose停掉

docker-compose stop

????????????????將停掉的容器刪除

docker-compose rm

????????????????再次將docker-compose拉起來的時候,需要使用build命令

docker-compose build

????????????????因為第一次將docker-compose拉起來的時候汁咏,docker-compose會自動幫我們build鏡像亚斋,但是第二次就不會了

????????????????然后再次使用?docker-compose up -d 命令將docker-compose拉起來

????????????????訪問locallhost:80就可以正常的看到nginx的歡迎頁面

????????????????這時訪問localhost/ghost路徑,就可以自動的跳轉(zhuǎn)到localhost/ghost/setup的路徑下面

????????????????這時表示我們的三個容器協(xié)作運行已經(jīng)是沒問題的了

????????????????本人的docker-compose沒有下載完成攘滩,暫未測試

????????7.2.4docker-compose常用命令

docker-compose.yml常用參數(shù)
docker-compose常用命令
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末帅刊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子漂问,更是在濱河造成了極大的恐慌赖瞒,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚤假,死亡現(xiàn)場離奇詭異栏饮,居然都是意外死亡,警方通過查閱死者的電腦和手機磷仰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門袍嬉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人灶平,你說我怎么就攤上這事伺通。” “怎么了逢享?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵罐监,是天一觀的道長。 經(jīng)常有香客問我瞒爬,道長弓柱,這世上最難降的妖魔是什么调缨? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮吆你,結(jié)果婚禮上弦叶,老公的妹妹穿的比我還像新娘。我一直安慰自己妇多,他們只是感情好伤哺,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著者祖,像睡著了一般立莉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上七问,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天蜓耻,我揣著相機與錄音,去河邊找鬼械巡。 笑死刹淌,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的讥耗。 我是一名探鬼主播有勾,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼古程!你這毒婦竟也來了蔼卡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤挣磨,失蹤者是張志新(化名)和其女友劉穎雇逞,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茁裙,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡塘砸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了呜达。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谣蠢。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖查近,靈堂內(nèi)的尸體忽然破棺而出眉踱,到底是詐尸還是另有隱情,我是刑警寧澤霜威,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站戈泼,受9級特大地震影響赏僧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜淀零,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望驾中。 院中可真熱鬧,春花似錦模聋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祟蚀。三九已至,卻和暖如春暂题,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背薪者。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留剿涮,地道東北人言津。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像取试,于是被迫代替她去往敵國和親悬槽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

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

  • Docker — 云時代的程序分發(fā)方式 要說最近一年云計算業(yè)界有什么大事件瞬浓?Google Compute Engi...
    ahohoho閱讀 15,514評論 15 147
  • 轉(zhuǎn)載自 http://blog.opskumu.com/docker.html 一初婆、Docker 簡介 Docke...
    極客圈閱讀 10,481評論 0 120
  • 一 、什么是 Docker Docker 最初是 dotCloud 公司創(chuàng)始人 Solomon Hykes 在法國...
    Blazzer閱讀 3,130評論 0 13
  • 0. 前言 docker是什么猿棉?docker是用GO語言開發(fā)的應(yīng)用容器引擎磅叛,基于容器化,沙箱機制的應(yīng)用部署技術(shù)萨赁”浊伲可...
    sessionboy閱讀 3,846評論 2 49
  • 前好些時候終于想明白了自己,走出了這段漫長的迷茫期杖爽,欣慰敲董。 也在努力的去豐富自己的人生紫皇,老了也可以當故事說給我的子...
    VickyJ閱讀 1,434評論 0 0