docker安裝

Docker是一種容器技術,它的存在就是為了解決容器技術本身的復雜性。Docker容器擁有很高的性能,同時同一臺宿主機中可以運行更多的容器,是用戶盡可能的充分利用系統(tǒng)資源。

概念

1.什么是虛擬化?

在計算機中,虛擬化(Virtualization)是一種資源管理技術,是將計算機的各種實體資源,如服務器、網(wǎng)絡、內存及儲存等,予以抽象、轉換后呈現(xiàn)出來,打破實體結構間的不可切割的障礙,是用戶可以比原來的組態(tài)更好的方式來應用這些資源。這些資源的新虛擬部分是不受現(xiàn)有資源的架設方式、地域或物理組態(tài)所限制。

全虛擬化架構

虛擬機的監(jiān)視器(hypervisor)是類似于用戶的應用程序運行在主機的OS之上,如VMware的workstation,這種虛擬化產(chǎn)品提供了虛擬的硬件。

2.容器技術

容器和管理程序虛擬化(hypervisor virtualization, HV)不同,管理程序虛擬化通過中間層將一臺或多臺獨立的機器虛擬運行在物理硬件之上,而容器是直接運行在操作系統(tǒng)內核之上的用戶空間。因此,容器虛擬化也被稱為“操作系統(tǒng)級虛擬化”,容器技術可以讓多個獨立的用戶空間運行在同一臺宿主機上。

限制

由于“客居”與操作系統(tǒng),容器只能運行與底層主機相同或相似的操作系統(tǒng),比如在Ubuntu服務中運行CentOS,但無法運行Windows。

相對于徹底隔離的管理程序虛擬化,容器被認為是不安全的。

最新的容器技術引入了OpenVZ、Solaris Zones以及Linux容器(LXC)。使用這些新技術,容器不再僅僅是一個單純的運行環(huán)境。在自己的權限類內,容器更像一個完整宿主機。和傳統(tǒng)虛擬化及半虛擬化想比,容器不需要模擬層(emulation layer)和管理層(hypervisor layer),而使用操作系統(tǒng)的系統(tǒng)調用接口。

Docker特點

上手快

用戶可以很容易的把自己的程序Docker化。Docker依賴于“寫時復制”(copy-on-write)模型,開箱即用。

快速高效的開發(fā)聲明周期

Docker組件

Docker客戶端和服務器

Docker是一個客戶端-服務器(C/S)架構程序。Docker客戶端只需要向Docker服務器或守護進程發(fā)出請求,服務器或守護進程將完成所有工作并返回結果。Docker提供了一個命令行工具Docker以及一整套RESTful API。你可以在同一臺宿主機上運行Docker守護進程和客戶端,也可以從本地的Docker客戶端連接到運行在另一臺宿主機上的遠程Docker守護進程。

1.png

Docker 鏡像

鏡像是構建Docker的基石。用戶及基于鏡像來運行自己的容器。鏡像也是Docker聲明周期中的“構建”部分。獎項是基于聯(lián)合文件系統(tǒng)的一種層式結構,由一系列指令一步一步構建出來。

Registry 注冊中心

Docker用Registry來保存用戶構建的鏡像。Registry分為共有和私有兩種。Docker公司運營公共的Registry叫做Docker Hub。

Docker容器

Docker可以幫助你構建和部署容器,你只需要把你的程序打包放進容器即可。容器是基于鏡像啟動的,容器找那個可以運行一個或多個進程。我們可以認為,鏡像是Docker生命周期中構建和打包階段,而容器則是啟動或執(zhí)行階段。容器基于鏡像啟動。

2.png

Docker的安裝與啟動

本例中使用了CentOS7作為服務器,有關VMware安裝CentOS7的教程請看我的這篇文章:FastDFS系統(tǒng)搭建

通過以下命令在線在CentOS7中安裝Docker:

yum install docker

3.png

查看Docker版本

[root@localhost ~]# docker -vDocker version1.13.1, build8633870/1.13.1

啟動與停止Docker

systemctl命令是系統(tǒng)服務管理器指令,它是service和chkconfig兩個命令組合。

啟動Docker

systemctl start docker

停止Docker

systemctl stop docker

重啟Docker

systemctl restart docker

查看Docker狀態(tài)

systemctl status docker

開機啟動Docker

systemctlenabledocker

查看Docker概要信息

docker info

查看Docker幫助文檔

docker -help

Docker鏡像操作

Docker鏡像由文件系統(tǒng)堆疊而成(是一種文件的儲存形式)。最低端是一個文件引導系統(tǒng),即bootfs。實際上,當一個容器啟動后,它將會被移動到內存中,而引導文件系統(tǒng)則會被卸載,以留出更多的內存供磁盤鏡像使用。Docker容器啟動是需要一些文件的,而這些文件就可以被稱為Docker鏡像。

4.png

列出鏡像

[root@localhost ~]# docker images

5.png

REPOSITORY: 鏡像所在的倉庫名稱

TAG: 鏡像標簽

IMAGE ID:鏡像ID

CREATED:鏡像的創(chuàng)建日期(不是獲取該鏡像的日期)

SIZE:鏡像大小

這些鏡像都儲存在Docker宿主機的/var/lib/docker目錄下。

搜索鏡像

[root@localhost ~]# docker search 鏡像名稱

6.png

從Docker Hub拉取鏡像

去Docker Hub官網(wǎng)查找所需的Docker鏡像:https://hub.docker.com/explore/,然后通過以下命令在線pull:

[root@localhost ~]# docker pull 鏡像名稱[root@localhost ~]# docker pull 鏡像名稱:版本

因為官方提供的Docker鏡像加速服務很慢,我們可以配置ustc的鏡像。輸入以下命令配置ustc鏡像:

[root@localhost ~]# vi /etc/docker/daemon.json

沒有就創(chuàng)建,向其中寫入:

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

重啟Docker服務:

[root@localhost ~]# systemctl restart docker

刪除鏡像

刪除指定鏡像

[root@localhost ~]# docker rmi $IMAGE_ID? #這個$IMAGE_ID數(shù)值可以根據(jù)`docker images`命令查看

刪除所有鏡像

[root@localhost ~]# docker rmi `docker images -q`

Docker容器操作

查看正在運行的容器

[root@localhost ~]# docker ps

查看所有的容器(啟動過的歷史容器)

[root@localhost ~]# docker ps -a

查看最后一次運行的容器

[root@localhost ~]# docker ps -|

查看停止的容器

[root@localhost ~]# docker ps -f status=exited

刪除容器

刪除指定容器:

[root@localhost ~]# docker rm $CONTAINER_ID/NAME

刪除所有容器:

[root@localhost ~]# docker rm `docker ps -a -q`

創(chuàng)建和啟動容器

創(chuàng)建容器常用的參數(shù)說明

創(chuàng)建容器命令:docker run

-i: 表示運行容器

-t: 表示容器啟動后會進入其命令行,加入這兩個參數(shù)后,容器創(chuàng)建就能登錄進去。即分配一個偽終端。

—name: 為創(chuàng)建的容器命名

-v: 表示目錄映射關系(前者是宿主機目錄,后者是映射到宿主機上的目錄),可以使用多個-v做多個目錄或文件映射。注意:最好做目錄映射,在宿主機上修改,然后共享到容器上。

-d: 在run后面加上-d參數(shù),則會創(chuàng)建一個守護式容器在后臺運行(這樣創(chuàng)建容器后不會自動登錄容器,如果只加-i-t兩個參數(shù),創(chuàng)建后就會自動進去容器)。

-p: 表示端口映射,前者是宿主機端口,后者是容器內的映射端口。可以使用多個-p做多個端口映射。

交互式容器

創(chuàng)建一個交互式容器并取名為mycentos5:

[root@localhost ~]# docker run -it --name=mycentos5 centos:7 /bin/bash[root@53f33e279914 /]#

此時我們可以新建一個連接,通過docker ps命令看到剛才創(chuàng)建的容器正在啟動中:

7.png

通過exit命令可以退出當前容器:

[root@53f33e279914 /]# exitexit[root@localhost ~]#

此時再通過docker ps命令查看剛才啟動的容器也停止了。

守護式容器

輸入以下命令創(chuàng)建一個名字為mycentos6的容器:

[root@localhost ~]# docker run -di --name=mycentos6 centos:7

創(chuàng)建后這個容器會在后臺運行,而不是直接進入到這個容器中。可以通過docker ps命令查看。

登錄守護式容器:

[root@localhost ~]# docker exec -it mycentos6 /bin/bash

可以通過exit命令退出,但是容器不會停止。

停止和啟動容器

停止正在運行的容器

[root@localhost ~]# docker stop 容器名稱

啟動已運行過的容器:

[root@localhost ~]# docker start 容器名稱

其他操作

文件拷貝

將文件拷貝到容器內可以用如下命令:

[root@localhost ~]# docker cp 需要拷貝的文件或目錄 容器名稱:容器目錄

將文件從容器中拷貝出來

[root@localhost ~]# docker cp 容器名稱:容器目錄 需要拷貝的文件或目錄

目錄掛載

在創(chuàng)建容器的時候,將宿主機的目錄和容器內的目錄進行映射,這樣我們就可以通過修改宿主機某個目錄的文件從而影響容器。格式為:

[root@localhost ~]# docker run -di -v 宿主機目錄:容器目錄

查看容器

[root@localhost ~]# docker inspect mycentos5

部署應用

Mysql部署

拉取MySQL鏡像

[root@localhost ~]# docker pull mysql:5.7

創(chuàng)建MySQL容器

[root@localhost ~]# docker run -di --name docker_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7

如上我們創(chuàng)建一個名稱為docker_mysql的MySQL5.7版本的守護式容器,且配置MySQL登錄密碼是root。

-p代表端口映射,格式為宿主機映射端口:容器運行端口

-e代表添加環(huán)境變量,MYSQL_ROOT_PASSWORD是root用戶的登錄密碼

進入MySQL容器,登錄MySQL

[root@localhost ~]# docker exec -it docker_mysql /bin/bash

登錄MySQL

mysql -u root -p

遠程連接MySQL

8.png

Tomcat部署

拉取Tomcat-8 && JDK-8 鏡像

[root@localhost ~]# docker pull tomcat:8-jre8

部署Web應用

為了更好的演示Docker部署Tomcat的使用方式,我們可以先將需要部署的web項目發(fā)送到服務器的某個路徑下,我這里在/root/目錄下創(chuàng)建了/root/site/目錄作為項目的根目錄,在其中創(chuàng)建index.html文件并寫入:

Hello

Hello Docker-Tomcat!

創(chuàng)建Tomcat容器

[root@localhost ~]# docker run -di --name=docker_tomcat -p 9000:8080 -v /root/site/:/usr/local/tomcat/webapps/ROOT --privileged=true tomcat:8-jre8

以上就創(chuàng)建一個Tomcat容器,其容器名稱Wiedocker_tomcat,-di表示是一個守護式容器;-p 9000:8080表示此容器端口映射為9000->8080,即對外的端口是9000,映射到容器里Tomcat服務器的端口8080,--privileged是以root權限運行。

9.png

通過命令看到,當我們啟動了容器,其中的Tomcat服務器也自動啟動了。當然對于部署Nginx或MySQL的Docker容器,當啟動容器時都會啟動對應的服務。

注意

上面我們指定了宿主機的/root/site/目錄映射到docker_tomcat容器的/usr/local/tomcat/webapps/ROOT目錄,為什么是這個目錄呢?

Docker虛擬化,它會在內部虛擬一個操作系統(tǒng),是在其宿主機內核上的一層空間,所有有一定的目錄結構,我們可以通過docker exec -it docker_tomcat /bin/bash命令進入到docker_tomcat容器內部,通過ls命令查看目錄會發(fā)現(xiàn)其Tomcat服務器確實安裝在docker_tomcat容器的/usr/local/tomcat目錄下。

最后,我們在瀏覽器上訪問:http://192.168.148.132:9000/,即發(fā)現(xiàn)頁面展示了我們剛才在/root/site/目錄下創(chuàng)建的index.html網(wǎng)頁:

10.png

所以,如果你想要修改容器中Tomcat的端口號,直接進入容器的/usr/local/tomcat/conf/server.xml自改即可。

Nginx部署

拉取Nginx鏡像

docker pull nginx

創(chuàng)建Nginx容器

docker run -di --name=docker_nginx -p 80:80 nginx

測試

11.png

在瀏覽器上訪問:http://192.168.148.132/可以進入到Nginx的歡迎頁。

其他

以上我們介紹了MySQL、Tomcat、Nginx容器的創(chuàng)建,對于其他的服務,如Redis等操作基本相同,不再闡述。

備份與遷移

容器保存為鏡像

可以通過以下命令將我們已創(chuàng)建(配置好的)容器打包為鏡像,這樣我們以后就能用該鏡像再次創(chuàng)建新的容器了:

docker commit docker_tomcat my_tomcat

docker_tomcat是容器名稱;my_tomcat是新的鏡像名稱。

鏡像備份

通過以下命令可以將鏡像打包為tar文件:

dockersave-omy_tomcat.tarmy_tomcat

-o輸出到的文件

鏡像恢復與

當我們刪除了docker_tomcat鏡像后,可以通過以下命令將剛才打包備份的.tar鏡像文件恢復成一個Docker鏡像:

dockerload-imy_tomcat.tar

-i輸入的文件。

作者:TyCoding

鏈接:http://www.lxweimin.com/p/20c9e3d52854

來源:簡書

簡書著作權歸作者所有,任何形式的轉載都請聯(lián)系作者獲得授權并注明出處。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,698評論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,202評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,742評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,580評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,297評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,688評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,693評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,875評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,438評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,183評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,384評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,931評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,612評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,022評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,297評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,093評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,330評論 2 377

推薦閱讀更多精彩內容