Docker學習筆記(一)Docker初體驗

Docker學習筆記(一)Docker初體驗

什么是Docker

Docker是一個虛擬環(huán)境容器,可以將開發(fā)環(huán)境、代碼、配置文件等一并打包到這個容器中,并發(fā)布應用到任意平臺中

Docker的安裝

在Doker的官方網(wǎng)站 點擊Download from Docker Store,在docker store中點擊GetDocker即可下載mac的dmg文件



下載完成后,正常安裝運行

錯誤

打開Docer發(fā)現(xiàn)如下錯誤


Docker does not rely on VirtualBox but may not work properly on systems with VirtualBox v4.3.28 is currently installed.
Please upgrade or uninstall VirtualBox

大致的意思就是說 雖然Docker不依賴于VirtualBox,但是在VirtualBox版本太低的電腦上無法運行,可以選擇寫在VirtualBox或者更新VirtualBox,嘗試卸載ViertualBox后問題依舊,最后在VirtualBox官網(wǎng)更新了最新版本的VirtualBox之后 問題解決,打開Docker,Docker正常運行


安裝完成后,可以使用 docker version 來查看版本信息

安裝完成后,再注冊一個Docker的賬號

第一個docker鏡像

基本命令

docker pull [options] name[:tag]

  • 該命令會從docker的遠程倉庫拉取docker的鏡像
  • name : 表示鏡像的名稱
  • tag : 表示鏡像的版本,如果不填寫,默認是最新版本的docker

docker images [options][repository[:tag]]

  • 該命令會查看本機都有哪些鏡像,可以用來驗證pull是否成功
  • repository : 指定鏡像名稱
  • tag : 版本

docker倉庫(Repository)

官方倉庫,該倉庫是官方倉庫,但是訪問速度比較慢
網(wǎng)易蜂巢鏡像中心,需要登錄后訪問該網(wǎng)址
docker也支持自己搭建鏡像倉庫

HelloWord

下載

輸入命令,該命令會從官方倉庫去下載鏡像

docker pull hello-world

運行

命令:
docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

  • IMAGE : 鏡像的名字
  • options : -d 在后臺運行
doker ps

可查看當前機器上所啟動的鏡像

docker exec # 進入容器內部
exit #退出

執(zhí)行

docker run hello-world

docker 網(wǎng)絡

下載nginx

  1. 下載Nginx鏡像 : hub.c.163.com/library/nginx
  2. 在后臺運行鏡像
  3. 使用docker run -d hub.c.163.com/library/nginx來在后臺啟動nginx鏡像,會返回容器的ID
  4. 進入容器內部 docker exec -it 容器id bash
    -i : 可以保證輸入有效
    -t : 容器會分配給我們一個終端
    容器id 可以只寫前幾個字母

docker網(wǎng)絡

Docker網(wǎng)絡類型

docker中有3中網(wǎng)絡類型

  • Bridge : docker中每一個容器默認都是獨立的網(wǎng)絡,默認選項
  • Host : 和主機使用同一個網(wǎng)絡
  • None : 沒有網(wǎng)絡

端口映射

在容器中的端口和主機中的端口建立一個映射
使用命令

docker run -d -p 8080:80 hub.c.163.com/library/nginx

來啟動容器,-p的參數(shù)表示主機的8080端口映射到容器的80端口,訪問主機的8080端口即可放完到nginx了


Docker中關于鏡像的基本操作

利用鏡像啟動一個容器后進行修改 ==> 利用commit提交更新后的副本

下載centos鏡像并啟動,進入容器

docker pull hub.c.163.com/library/centos:latest
docker run -it hub.c.163.com/library/centos
root@307bb1848b9e:/# git --version
bash: git: command not found

發(fā)現(xiàn)沒有安裝git,使用yum命令安裝git,安裝完成后再檢查git命令:

執(zhí)行commit操作將容器轉換為一個鏡像

docker commit -m "centos with git" -a "cfy" 307bb1848b9e cfy/centos:git

其中, -m指定說明信息;-a 指定用戶信息307bb1848b9e為容器的id;使用docker ps -a命令查詢得到;cfy/centos:git指定目標鏡像的用戶名,倉庫名和tag信息
操作完成后使用docker images查看:


此時我們在進入該docker,檢查git

~ docker run -it cfy/centos:git bash
[root@f952d74b63af /]# git --version
git version 1.8.3.1

制作自己的鏡像

  • Dockerfile : 告訴docker如何制作鏡像,每一個步驟是什么
  • docker build : 根據(jù)Dockerfile來制作鏡像
  • JPress : 一個開源的Java博客平臺(jpress.io)

創(chuàng)建DockerFile

說明

Dockerfile可以理解為一種配置文件,用來告訴docker build命令應該執(zhí)行哪些操作,一個建議的Dockerfile文件如下所示

# 說明該鏡像以哪個鏡像為基礎
FROM centos:latest

# 構建者的基本信息
MAINTAINER cfy

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

# 拷貝本地文件到鏡像中
COPY ./* /usr/share/gitdir/
創(chuàng)建Tomcat的鏡像

首先下載tomcat的鏡像

docker pull hub.c.163.com/library/tomcat:latest

編寫鏡像的Dockerfile

form hub.c.163.com/library/tomcat

MAINTAINER liuguoguo 734481463@qq.com

# 將本地的war包拷貝到tomcat的目錄中
COPY jpress.war /usr/local/tomcat/webapps

使用build命令來構建鏡像

docker build -t jpress:latest .

-t表示來為鏡像起一個名字和標簽,最后的點表示在當前目錄尋找Dockerfile文件,這里要注意該命令會默認將Dockerfill所在目錄下的所有文件發(fā)送到Daemon,這就會導致內容非常多,盡量使用空目錄來存放dockerfile和所需要的資源文件

運行自己的TomCat

啟動容器

docker run -d -p 8888:8080 jpress

在瀏覽器輸入 http://localhost:8888/jpress/ 出現(xiàn)如下信息:


證明我們的tomcat運行成功了,可以看到jpress需要一個mysql數(shù)據(jù)庫,來下載一個mysql的容器

docker pull hub.c.163.com/library/mysql:latest

在頁面中可以找到mysql的使用命令,-e為docker的命令,表示要輸入一個環(huán)境變量,參數(shù)為鍵值對,可以指定數(shù)據(jù)庫的密碼,接著運行mysql

docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=A_000000 -e MYSQL_DATABASE=jpress  hub.c.163.com/library/mysql:latest

將mysql映射到3307端口,并設定MYSQL的密碼為A_000000,數(shù)據(jù)庫名為jpress,這樣mysql就能成功運行了,檢查一下3307端口是否正常監(jiān)聽:

netstat -na|grep 3307

可以看到3307端口已經(jīng)開啟監(jiān)聽了

配置JPress

數(shù)據(jù)庫名和用戶名密碼填寫mysql的設置用戶名及密碼,而數(shù)據(jù)庫的主機不能填寫localhost,因為tomcat在容器內部如果填寫localhost則代表是容器自己,需要填寫我們電腦的ip地址,端口號則填寫我們做映射的端口號,點擊下一步



設置網(wǎng)站的用戶名和密碼,下一步



jPress告訴我們需要重啟web服務器
docker restart 4b0e395d1cbc # 輸入id重啟容器,該命令不會改變容器的id

再看一下網(wǎng)站



發(fā)現(xiàn)我們的網(wǎng)站已經(jīng)起來了

容器連接

在測試之前可以使用docker stop 容器ID指令來將之前的容器停止,而容器停止之后,之前設置的東西就全部會小時
使用主機ip進行轉發(fā)的這種連接tomcat和mysql方式顯然不好,如果我們的主機ip地址發(fā)生了變化,那么配置就會失效,而docker允許容器之間課件并安全的創(chuàng)建連接,首先我們創(chuàng)建數(shù)據(jù)庫容器

docker run -d --name db -p 3307:3306 -e MYSQL_ROOT_PASSWORD=A_000000 -e MYSQL_DATABASE=jpress  hub.c.163.com/library/mysql:latest

與之前不同的是,我們使用--name指令,為數(shù)據(jù)庫容器起了一個名字叫db



可以看到數(shù)據(jù)庫容器已經(jīng)有了一個名字叫db,然后運行tomcat容器

docker run -d -p 8888:8080 --name jpress --link db:db jpress

同樣的將tomcat容器映射到8888端口,然后為容器起一個名字叫jpress,并通過--link指令來連接容器,link指令:

--link name:alias 

name是我們連接容器的名字,alias是連接的別名,



回到我們jpress的設置頁面,其他項都不變,注意數(shù)據(jù)庫主機這里填寫我們連接的別名,即可連接到數(shù)據(jù)庫

總結

Docker思想

想要把程序部署到另外一臺計算機中,把所有的相關程序利用docker打包,這里面包含了程序所有的開發(fā)環(huán)境,可以做到開發(fā)環(huán)境與生產(chǎn)環(huán)境的同一,并標準化的運輸,其實Docker與虛擬機差不多,但是Docker要比虛擬機小快很多,例如啟動一個虛擬機可能需要幾分鐘,但是啟動一個docker只需要幾秒

Docker的三個基本概念

1. 鏡像(Image)

類似于虛擬機中的鏡像,是一個包含有文件系統(tǒng)的面向Docker引擎的只讀模板。任何應用程序運行都需要環(huán)境,而鏡像就是用來提供這種運行環(huán)境的。例如一個Ubuntu鏡像就是一個包含Ubuntu操作系統(tǒng)環(huán)境的模板,同理在該鏡像上裝上Apache軟件,就可以稱為Apache鏡像

2. 容器(Container)

類似于一個輕量級的沙盒,可以將其看作一個極簡的Linux系統(tǒng)環(huán)境(包括root權限、進程空間、用戶空間和網(wǎng)絡空間等),以及運行在其中的應用程序。Docker引擎利用容器來運行、隔離各個應用。容器是鏡像創(chuàng)建的應用實例,可以創(chuàng)建、啟動、停止、刪除容器,各個容器之間是是相互隔離的,互不影響。注意:鏡像本身是只讀的,容器從鏡像啟動時,Docker在鏡像的上層創(chuàng)建一個可寫層,鏡像本身不變。而容器可以理解為一個操作系統(tǒng)的進程

3. 倉庫(Repository)

類似于代碼倉庫,這里是鏡像倉庫,是Docker用來集中存放鏡像文件的地方。注意與注冊服務器(Registry)的區(qū)別:注冊服務器是存放倉庫的地方,一般會有多個倉庫;而倉庫是存放鏡像的地方,一般每個倉庫存放一類鏡像,每個鏡像利用tag進行區(qū)分,比如Ubuntu倉庫存放有多個版本(12.04、14.04等)的Ubuntu鏡像。

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

推薦閱讀更多精彩內容

  • Docker — 云時代的程序分發(fā)方式 要說最近一年云計算業(yè)界有什么大事件?Google Compute Engi...
    ahohoho閱讀 15,564評論 15 147
  • 轉載自 http://blog.opskumu.com/docker.html 一、Docker 簡介 Docke...
    極客圈閱讀 10,520評論 0 120
  • 0x01 核心概念 Docker鏡像類似于虛擬機鏡像,可以理解為一個面向Docker引擎的只讀模板,包含了文件系統(tǒng)...
    閑云逸心閱讀 4,751評論 0 9
  • 0. 前言 docker是什么?docker是用GO語言開發(fā)的應用容器引擎,基于容器化,沙箱機制的應用部署技術。可...
    sessionboy閱讀 3,869評論 2 49
  • 《消失的你》/杏子 氣溫零下幾度,依舊有我不知名的鳥雀在枝頭上亂跳,偶有車子開過,猛地躍出...
    一種缺陷ing閱讀 1,195評論 6 5