只要一小時(shí)摹察,零基礎(chǔ)入門Docker

Docker是什么?

Docker是一個(gè)虛擬環(huán)境容器倡鲸,可以將你的開發(fā)環(huán)境供嚎、代碼、配置文件等一并打包到這個(gè)容器中峭状,并發(fā)布和應(yīng)用到任意平臺中克滴。比如,你在本地用Python開發(fā)網(wǎng)站后臺优床,開發(fā)測試完成后劝赔,就可以將Python3及其依賴包、Flask及其各種插件胆敞、Mysql着帽、Nginx等打包到一個(gè)容器中,然后部署到任意你想部署到的環(huán)境移层。

Docker官方文檔比較全仍翰,建議有能力的讀一下官方文檔。

Docker的三個(gè)概念

鏡像(Image):類似于虛擬機(jī)中的鏡像观话,是一個(gè)包含有文件系統(tǒng)的面向Docker引擎的只讀模板予借。任何應(yīng)用程序運(yùn)行都需要環(huán)境,而鏡像就是用來提供這種運(yùn)行環(huán)境的匪燕。例如一個(gè)Ubuntu鏡像就是一個(gè)包含Ubuntu操作系統(tǒng)環(huán)境的模板蕾羊,同理在該鏡像上裝上Apache軟件,就可以稱為Apache鏡像帽驯。
容器(Container):類似于一個(gè)輕量級的沙盒龟再,可以將其看作一個(gè)極簡的Linux系統(tǒng)環(huán)境(包括root權(quán)限、進(jìn)程空間尼变、用戶空間和網(wǎng)絡(luò)空間等)利凑,以及運(yùn)行在其中的應(yīng)用程序。Docker引擎利用容器來運(yùn)行嫌术、隔離各個(gè)應(yīng)用哀澈。容器是鏡像創(chuàng)建的應(yīng)用實(shí)例,可以創(chuàng)建度气、啟動(dòng)割按、停止、刪除容器磷籍,各個(gè)容器之間是是相互隔離的适荣,互不影響现柠。注意:鏡像本身是只讀的,容器從鏡像啟動(dòng)時(shí)弛矛,Docker在鏡像的上層創(chuàng)建一個(gè)可寫層够吩,鏡像本身不變。
倉庫(Repository):類似于代碼倉庫丈氓,這里是鏡像倉庫周循,是Docker用來集中存放鏡像文件的地方。注意與注冊服務(wù)器(Registry)的區(qū)別:注冊服務(wù)器是存放倉庫的地方万俗,一般會(huì)有多個(gè)倉庫湾笛;而倉庫是存放鏡像的地方,一般每個(gè)倉庫存放一類鏡像该编,每個(gè)鏡像利用tag進(jìn)行區(qū)分迄本,比如Ubuntu倉庫存放有多個(gè)版本(12.04、14.04等)的Ubuntu鏡像课竣。

Docker的安裝和卸載

Docker可以安裝在Windows嘉赎、Linux、Mac等各個(gè)平臺上于樟。具體可以查看文檔Install Docker公条。安裝完成之后,可以查看Docker的版本信息:

[root@xxx ~]# docker version
Client:
 Version:      1.12.3
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   6b644ec
 Built:
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.3
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   6b644ec
 Built:
 OS/Arch:      linux/amd64

查看Docker的幫助信息:# docker --help迂曲。各種命令的用法也不再贅述靶橱,后邊用到哪些命令時(shí)會(huì)作出一定的解釋。

Docker中關(guān)于鏡像的基本操作

安裝完Docker引擎之后路捧,就可以對鏡像進(jìn)行基本的操作了关霸。

我們從官方注冊服務(wù)器(https://hub.docker.com)的倉庫中pull下CentOS的鏡像,前邊說過杰扫,每個(gè)倉庫會(huì)有多個(gè)鏡像队寇,用tag標(biāo)示,如果不加tag章姓,默認(rèn)使用latest鏡像:

[root@xxx ~]# docker search centos    # 查看centos鏡像是否存在
[root@xxx ~]# docker pull centos    # 利用pull命令獲取鏡像
Using default tag: latest
latest: Pulling from library/centos
08d48e6f1cff: Pull complete
Digest: sha256:b2f9d1c0ff5f87a4743104d099a3d561002ac500db1b9bfa02a783a46e0d366c
Status: Downloaded newer image for centos:latest

[root@xxx ~]# docker images    # 查看當(dāng)前系統(tǒng)中的images信息
REPOSITORY      TAG            IMAGE ID       CREATED        SIZE
centos          latest         0584b3d2cf6d   9 days ago     196.5 MB

以上是下載一個(gè)已有鏡像佳遣,此外有兩種方法可以幫助你新建自有鏡像。

(1)利用鏡像啟動(dòng)一個(gè)容器后進(jìn)行修改 ==> 利用commit提交更新后的副本

[root@xxx ~]# docker run -it centos:latest /bin/bash    # 啟動(dòng)一個(gè)容器
[root@72f1a8a0e394 /]#    # 這里命令行形式變了凡伊,表示已經(jīng)進(jìn)入了一個(gè)新環(huán)境
[root@72f1a8a0e394 /]# git --version    # 此時(shí)的容器中沒有g(shù)it
bash: git: command not found
[root@72f1a8a0e394 /]# yum install git    # 利用yum安裝git
......
[root@72f1a8a0e394 /]# git --version   # 此時(shí)的容器中已經(jīng)裝有g(shù)it了
git version 1.8.3.1

此時(shí)利用exit退出該容器零渐,然后查看docker中運(yùn)行的程序(容器):

[root@xxx ~]# docker ps -a
CONTAINER ID  IMAGE    COMMAND      CREATED   STATUS   PORTS    NAMES
72f1a8a0e394  centos:latest "/bin/bash"  9 minutes ago   Exited (0) 3 minutes ago      angry_hodgkin

這里將容器轉(zhuǎn)化為一個(gè)鏡像,即執(zhí)行commit操作系忙,完成后可使用docker images查看:

[root@xxx ~]# docker commit -m "centos with git" -a "qixianhu" 72f1a8a0e394 xianhu/centos:git

[root@xxx ~]# docker images
REPOSITORY       TAG    IMAGE ID         CREATED             SIZE
xianhu/centos    git    52166e4475ed     5 seconds ago       358.1 MB
centos           latest 0584b3d2cf6d     9 days ago          196.5 MB

其中诵盼,-m指定說明信息;-a指定用戶信息;72f1a8a0e394代表容器的id拦耐;xianhu/centos:git指定目標(biāo)鏡像的用戶名耕腾、倉庫名和 tag 信息。注意這里的用戶名xianhu杀糯,后邊會(huì)用到。

此時(shí)Docker引擎中就有了我們新建的鏡像xianhu/centos:git苍苞,此鏡像和原有的CentOS鏡像區(qū)別在于多了個(gè)Git工具固翰。此時(shí)我們利用新鏡像創(chuàng)建的容器,本身就自帶git了羹呵。

[root@xxx ~]# docker run -it xianhu/centos:git /bin/bash
[root@520afc596c51 /]# git --version
git version 1.8.3.1

利用exit退出容器骂际。注意此時(shí)Docker引擎中就有了兩個(gè)容器,可使用docker ps -a查看冈欢。

(2)利用Dockerfile創(chuàng)建鏡像

Dockerfile可以理解為一種配置文件歉铝,用來告訴docker build命令應(yīng)該執(zhí)行哪些操作。一個(gè)簡易的Dockerfile文件如下所示凑耻,官方說明:Dockerfile reference:

# 說明該鏡像以哪個(gè)鏡像為基礎(chǔ)
FROM centos:latest

# 構(gòu)建者的基本信息
MAINTAINER xianhu

# 在build這個(gè)鏡像時(shí)執(zhí)行的操作
RUN yum update
RUN yum install -y git

# 拷貝本地文件到鏡像中
COPY ./* /usr/share/gitdir/

有了Dockerfile之后太示,就可以利用build命令構(gòu)建鏡像了:

[root@xxx ~]# docker build -t="xianhu/centos:gitdir" .

其中-t用來指定新鏡像的用戶信息、tag等香浩。最后的點(diǎn)表示在當(dāng)前目錄尋找Dockerfile类缤。

構(gòu)建完成之后,同樣可以使用docker images命令查看:

[root@xxx ~]# docker images
REPOSITORY        TAG       IMAGE ID      CREATED            SIZE
xianhu/centos     gitdir    0749ecbca587  34 minutes ago     359.7 MB
xianhu/centos     git       52166e4475ed  About an hour ago  358.1 MB
centos            latest    0584b3d2cf6d  9 days ago         196.5 MB

以上就是構(gòu)建自己鏡像的兩種方法邻吭。其中也涉及到了容器的一些操作餐弱。如果想刪除容器或者鏡像,可以使用rm命令囱晴,注意:刪除鏡像前必須先刪除以此鏡像為基礎(chǔ)的容器膏蚓。

[root@xxx ~]# docker rm container_name/container_id
[root@xxx ~]# docker rmi image_name/image_id

鏡像其他操作指令:

[root@xxx ~]# docker save -o centos.tar xianhu/centos:git    # 保存鏡像, -o也可以是--output
[root@xxx ~]# docker load -i centos.tar    # 加載鏡像, -i也可以是--input

Docker中關(guān)于容器的基本操作
在前邊鏡像的章節(jié)中,我們已經(jīng)看到了如何基于鏡像啟動(dòng)一個(gè)容器畸写,即docker run操作驮瞧。

[root@xxx ~]# docker run -it centos:latest /bin/bash

這里-it是兩個(gè)參數(shù):-i和-t。前者表示打開并保持stdout艺糜,后者表示分配一個(gè)終端(pseudo-tty)剧董。此時(shí)如果使用exit退出,則容器的狀態(tài)處于Exit破停,而不是后臺運(yùn)行翅楼。如果想讓容器一直運(yùn)行,而不是停止真慢,可以使用快捷鍵 ctrl+p ctrl+q 退出毅臊,此時(shí)容器的狀態(tài)為Up。

除了這兩個(gè)參數(shù)之外黑界,run命令還有很多其他參數(shù)管嬉。其中比較有用的是-d后臺運(yùn)行:

[root@xxx ~]# docker run centos:latest /bin/bash -c "while true; do echo hello; sleep 1; done"
[root@xxx ~]# docker run -d centos:latest /bin/bash -c "while true; do echo hello; sleep 1; done"

這里第二條命令使用了-d參數(shù)皂林,使這個(gè)容器處于后臺運(yùn)行的狀態(tài),不會(huì)對當(dāng)前終端產(chǎn)生任何輸出蚯撩,所有的stdout都輸出到log础倍,可以使用docker logs container_name/container_id查看。

啟動(dòng)胎挎、停止沟启、重啟容器命令:

[root@xxx ~]# docker start container_name/container_id
[root@xxx ~]# docker stop container_name/container_id
[root@xxx ~]# docker restart container_name/container_id

后臺啟動(dòng)一個(gè)容器后,如果想進(jìn)入到這個(gè)容器犹菇,可以使用attach命令:

[root@xxx ~]# docker attach container_name/container_id

刪除容器的命令前邊已經(jīng)提到過了:

[root@xxx ~]# docker rm container_name/container_id

Docker中關(guān)于倉庫的基本操作
Docker官方維護(hù)了一個(gè)DockerHub的公共倉庫德迹,里邊包含有很多平時(shí)用的較多的鏡像。除了從上邊下載鏡像之外揭芍,我們也可以將自己自定義的鏡像發(fā)布(push)到DockerHub上胳搞。

在鏡像操作章節(jié)中,我們新建了一個(gè)xianhu/centos:git鏡像称杨。

(1)訪問https://hub.docker.com/肌毅,如果沒有賬號,需要先注冊一個(gè)列另。

(2)利用命令docker login登錄DockerHub芽腾,輸入用戶名、密碼即可登錄成功:

[root@xxx ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: xianhu
Password:
Login Succeeded

(3)將本地的鏡像推送到DockerHub上页衙,這里的xianhu要和登錄時(shí)的username一致:

[root@xxx ~]# docker push xianhu/centos:git    # 成功推送
[root@xxx ~]# docker push xxx/centos:git    # 失敗
The push refers to a repository [docker.io/xxx/centos]
unauthorized: authentication required

(4)以后別人就可以從你的倉庫中下載合適的鏡像了摊滔。

[root@xxx ~]# docker pull xianhu/centos:git

對應(yīng)于鏡像的兩種創(chuàng)建方法,鏡像的更新也有兩種:

創(chuàng)建容器之后做更改店乐,之后commit生成鏡像艰躺,然后push到倉庫中。
更新Dockerfile眨八。在工作時(shí)一般建議這種方式腺兴,更簡潔明了。

這里再一次回顧一下三個(gè)重要的概念:鏡像廉侧、容器页响、倉庫:
從倉庫(一般為DockerHub)下載(pull)一個(gè)鏡像,Docker執(zhí)行run方法得到一個(gè)容器段誊,用戶在容器里執(zhí)行各種操作闰蚕。Docker執(zhí)行commit方法將一個(gè)容器轉(zhuǎn)化為鏡像。Docker利用login连舍、push等命令將本地鏡像推送(push)到倉庫没陡。其他機(jī)器或服務(wù)器上就可以使用該鏡像去生成容器,進(jìn)而運(yùn)行相應(yīng)的應(yīng)用程序了。

利用Docker創(chuàng)建一個(gè)用于Flask開發(fā)的Python環(huán)境
上邊已經(jīng)解釋和練習(xí)了Docker的基本操作命令盼玄,下邊以實(shí)例的形式完整走一遍流程贴彼。

我們創(chuàng)建一個(gè)用于Flask開發(fā)的Python環(huán)境,包含Git埃儿、Python3器仗、Flask以及其他依賴包等。

完整命令如下:

[root@xxx ~]# docker pull centos
[root@xxx ~]# docker run -it centos:latest /bin/bash
# 此時(shí)進(jìn)入容器蝌箍,安裝Python3青灼、Git、Flask及其依賴包等妓盲,安裝完成后exit退出
[root@xxx ~]# docker commit -m "Flask" -a "xianhu" container_id xianhu/flask:v1
[root@xxx ~]# docker push xianhu/flask:v1

Docker的功能和特性還有很多,各種運(yùn)行命令专普、參數(shù)等也都有待學(xué)習(xí)和練習(xí)悯衬,比如如何管理數(shù)據(jù)、如何管理網(wǎng)絡(luò)檀夹、如何互相配合工作筋粗、如何編寫更專業(yè)的Dockerfile等。本文先入門為主炸渡,以后有時(shí)間再慢慢更新關(guān)于Docker的知識娜亿。

=============================================================
只要一小時(shí),零基礎(chǔ)入門Docker - 笑虎的文章 - 知乎
https://zhuanlan.zhihu.com/p/23599229


Docker的學(xué)習(xí)總結(jié)一:Docker簡介蚌堵、安裝和常用命令
http://www.reibang.com/p/bf9152d2dcc1
==============================================================

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末买决,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子吼畏,更是在濱河造成了極大的恐慌督赤,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泻蚊,死亡現(xiàn)場離奇詭異躲舌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)性雄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門没卸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人秒旋,你說我怎么就攤上這事约计。” “怎么了滩褥?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵病蛉,是天一觀的道長。 經(jīng)常有香客問我,道長铺然,這世上最難降的妖魔是什么俗孝? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮魄健,結(jié)果婚禮上赋铝,老公的妹妹穿的比我還像新娘。我一直安慰自己沽瘦,他們只是感情好革骨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著析恋,像睡著了一般良哲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上助隧,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天筑凫,我揣著相機(jī)與錄音,去河邊找鬼并村。 笑死巍实,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的哩牍。 我是一名探鬼主播棚潦,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼膝昆!你這毒婦竟也來了丸边?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤外潜,失蹤者是張志新(化名)和其女友劉穎原环,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體处窥,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嘱吗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了滔驾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谒麦。...
    茶點(diǎn)故事閱讀 40,102評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖哆致,靈堂內(nèi)的尸體忽然破棺而出绕德,到底是詐尸還是另有隱情,我是刑警寧澤摊阀,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布耻蛇,位于F島的核電站踪蹬,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏臣咖。R本人自食惡果不足惜跃捣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望夺蛇。 院中可真熱鬧疚漆,春花似錦、人聲如沸刁赦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甚脉。三九已至丸升,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間牺氨,已是汗流浹背发钝。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留波闹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓涛碑,卻偏偏與公主長得像精堕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子蒲障,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評論 2 355