Docker入門詳解

Author: EdenVersion: 9.0.1B站配套視頻:?https://www.bilibili.com/video/BV1sK4y1s7Cj

一. Docker介紹

1.1 引言

我本地運行沒問題啊券腔。 環(huán)境不一致哪個哥們又寫死循環(huán)了,怎么這么卡? 在多用戶的操作系統(tǒng)下脑又,會互相影響本缠。淘寶在雙11的時候糯累,用戶量暴增逞度。 運維成本過高的問題悍手。學(xué)習(xí)一門技術(shù)逢慌,學(xué)習(xí)安裝成本過高悠轩。 關(guān)于安裝軟件成本過高。

1.2 Docker的由來

一幫年輕人創(chuàng)業(yè)攻泼,創(chuàng)辦了一家公司火架,2010年的專門做PAAS平臺。到了2013年的時候忙菠,像亞馬遜何鸡、微軟、Google都開始做PAAS平臺牛欢。2013年骡男,將公司內(nèi)的核心技術(shù)對外開源,核心技術(shù)就是Docker傍睹。到了2014年的時候隔盛,得到了C輪融資,$4000W到了2015年的時候拾稳,得到了D輪融資吮炕,$9500W全神貫注的維護Docker。所羅門主要作者之一访得。

Docker作者

Docker的作者已經(jīng)離開了維護Docker的團隊龙亲。

1.3 Docker的思想

集裝箱:會將所有需要的內(nèi)容放到不同的集裝箱中,誰需要這些環(huán)境就直接拿到這個集裝箱就可以了標(biāo)準(zhǔn)化:運輸?shù)臉?biāo)準(zhǔn)化:Docker有一個碼頭,所有上傳的集裝箱都放在了這個碼頭上俱笛,當(dāng)誰需要某一個環(huán)境捆姜,就直接指派大海豚去搬運這個集裝箱就可以了。命令的標(biāo)準(zhǔn)化:Docker提供了一系列的命令迎膜,幫助我們?nèi)カ@取集裝箱等等操作泥技。提供了REST的API:衍生出了很多圖形化界面,Rancher磕仅。隔離性:Docker在運行集裝箱內(nèi)的內(nèi)容時珊豹,會在LInux的內(nèi)核中,單獨的開辟一片空間榕订,這片空間不會影響到其他程序店茶。

注冊中心。(超級碼頭劫恒,上面放的就是集裝箱)鏡像贩幻。(集裝箱)容器。(運行起來的鏡像)

二. Docker的基本操作

2.1 安裝Docker

# 1. 下載關(guān)于Docker的依賴環(huán)境yum -y install yum-utils device-mapper-persistent-data lvm2

# 2. 設(shè)置一下下載Docker的鏡像源yum-config-manager --add-repo?http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 3. 安裝Docker yum makecache fastyum -y install docker-ce

# 4. 啟動两嘴,并設(shè)置為開機自動啟動丛楚,測試# 啟動Docker服務(wù)systemctl start docker# 設(shè)置開機自動啟動systemctl enable docker# 測試docker run hello-world

2.2 Docker的中央倉庫

Docker官方的中央倉庫:這個倉庫是鏡像最全的,但是下載速度很慢憔辫。https://hub.docker.com國內(nèi)的鏡像網(wǎng)站:網(wǎng)易蜂巢趣些、daoCloud...?https://c.163yun.com/hub#/home?http://hub.daocloud.io?(推薦使用)在公司內(nèi)部會采用私服的方式拉取鏡像。(添加配置)

# 需要在/etc/docker/daemon.json{ "registry-mirrors":["https://registry.docker-cn.com"], "insecure-registries":["ip:port"]}# 重啟兩個服務(wù)systemctl daemon-reloadsystemctl restart docker

2.3 鏡像的操作

# 拉取鏡像到本地docker pull 鏡像名稱[:tag]# 舉個例子docker pull tomcat?http://daocloud.io/library/tomcat:8.5.15-jre8

# 2. 查看全部本地的鏡像docker images

# 3. 刪除本地鏡像docker rmi 鏡像的標(biāo)識

# 4. 鏡像的導(dǎo)入導(dǎo)出(不規(guī)范)# 將本地的鏡像導(dǎo)出docker save -o 導(dǎo)出的路徑 鏡像id# 加載本地的鏡像文件docker load -i 鏡像文件# 修改鏡像名稱docker tag 鏡像id 新鏡像名稱:版本

2.4 容器的操作

# 1. 運行容器# 簡單操作docker run 鏡像的標(biāo)識|鏡像名稱[:tag]# 常用的參數(shù)docker run -d -p 宿主機端口:容器端口 --name 容器名稱 鏡像的標(biāo)識|鏡像名稱[:tag]# -d:代表后臺運行容器# -p 宿主機端口:容器端口:為了映射當(dāng)前Linux端口和容器端口# --name 容器名稱:指定容器的名稱

# 2. 查看正在運行的容器docker ps [-qa]# -a:查看全部的容器贰您,包括沒有運行# -p:只查看容器得到標(biāo)識

# 3. 查看容器的日志docker logs -f 容器id# -f:可以滾動查看日志的最后幾行

# 4. 進入到容器內(nèi)部docker exec -it 容器id bash

# 5. 刪除容器(刪除容器前坏平,需要停止容器)# 停止指定的容器docker stop 容器id# 停止全部容器docker stop $(docker pa -qa)# 刪除指定的容器docker rm 容器id# 刪除全部容器docker rm $(docker pa -qa)

# 6. 啟動容器docker start 容器id

三. Docker應(yīng)用

3.1 準(zhǔn)備SSM工程

# MySQL數(shù)據(jù)庫的連接用戶名和密碼改變了,修改db.properties

3.2 準(zhǔn)備MySQL容器

# 運行MySQL容器docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root?http://daocloud.io/library/mysql:5.7.4

3.3 準(zhǔn)備Tomcat容器

# 運行Tomcat容器锦亦,前面已經(jīng)搞定舶替,只需要將SSM項目的war包部署到Tomcat容器內(nèi)部即可# 可以通過命令將宿主機的內(nèi)容服務(wù)到容器內(nèi)部docker cp 文件名稱 容器id:容器內(nèi)部路徑# 舉個例子docker cp ssm.war fe:/usr/local/tomcat/webapps

3.4 數(shù)據(jù)卷

為了部署SSM的工程,需要使用到cp命令將宿主機內(nèi)的ssm.war文件復(fù)制到容器內(nèi)部孽亲。數(shù)據(jù)卷:將宿主機的一個目錄映射到容器的一個目錄中坎穿。可以在宿主機中操作目錄中的內(nèi)容返劲,那么容器內(nèi)部映射的文件玲昧,也會跟著一起改變。

# 1. 創(chuàng)建數(shù)據(jù)卷docker volume create 數(shù)據(jù)卷名稱# 創(chuàng)建數(shù)據(jù)卷之后篮绿,默認(rèn)會存放在一個目錄下 /war/lib/docker/volumes/數(shù)據(jù)卷名稱/_data

# 2. 查看數(shù)據(jù)卷的詳細(xì)信息docker volume inspect 數(shù)據(jù)卷名稱

# 3. 查看全部數(shù)據(jù)卷docker volume ls

# 4. 刪除數(shù)據(jù)卷docker volume rm 數(shù)據(jù)卷名稱

# 5. 應(yīng)用數(shù)據(jù)卷# 當(dāng)你映射數(shù)據(jù)卷時孵延,如果數(shù)據(jù)卷不存在,Docker會自動幫你創(chuàng)建亲配,會將容器內(nèi)部自帶的文件尘应,存儲在默認(rèn)的存放路徑中docker run -v 數(shù)據(jù)卷名稱:容器內(nèi)部的路徑 鏡像id# 直接指定一個路徑作為數(shù)據(jù)卷的存放位置突颊,這個路徑下是空的研乒。docker run -v 路徑:容器內(nèi)部的路徑 鏡像id

四. Docker自定義鏡像

中央倉庫上的鏡像,也是Docker的用戶自己上傳過去的。

# 1. 創(chuàng)建一個Dockerfile文件柜裸,并且指定自定義鏡像信息# Dockerfile文件中常用的內(nèi)容from:指定當(dāng)前自定義鏡像依賴的環(huán)境copy:將相對路徑下的內(nèi)容復(fù)制到自定義鏡像中workdir:聲明鏡像的默認(rèn)工作目錄cmd:需要執(zhí)行的命令(在workdir下執(zhí)行的祷舀,cmd可以寫多的鉴未,只以最后一個為準(zhǔn))# 舉個例子舶吗,自定義一個Tomcat鏡像,并且將ssm.war部署到Tomcat中from?http://daocloud.io/library/tomcat:8.5.15-jre8copy?ssm.war /usr/local/tomcat/webapps

# 2. 將準(zhǔn)備好的Dockerfile和相應(yīng)的文件拖拽到Linux操作系統(tǒng)中歹颓,通過Docker的命令制作鏡像docker build -t 鏡像名稱:[tag]

五. Docker-Compose

之前運行一個鏡像坯屿,需要添加大量的參數(shù)∥】福可以通過Docker-Compose編寫這些參數(shù)领跛。Docker-Compose可以幫助我們批量的管理容器。只需要通過一個docker-compose.yml文件去維護即可撤奸。

5.1 下載Docker-Compose

# 1. 去GitHub官網(wǎng)搜索docker-compose吠昭,下載最新版本的Docker-Compose# 2. 將下載好的文件,拖拽到Linux操作系統(tǒng)中# 3. 需要將Docker-Compose文件名稱修改一下寂呛,給予DockerCompose文件一個可執(zhí)行的權(quán)限mv docker-compose-Linux-x86_64 docker-composechmod 777 docker-compose# 4. 方便后期操作怎诫,配置一個環(huán)境變量# 將docker-compose文件移動到/usr/local/bin,修改了/etc/profile文件贷痪,給/usr/local/bin配置到PATH中mv docker-compose /usr/local/binvi /etc/profile export PATH=$JAVA_HOME:/usr/local/bin:$PATHsource /etc/profile # 5. 測試一下# 在任意目錄下輸入docker-compose

5.2 Docker-Compose管理MySQL和Tomcat容器

yml文件以key:value方式指定配置信息 多個配置信息以換行+縮進的方式來區(qū)分 在docker-compose.yml文件中,不要使用制表符

version:'3.1'services: mysql: # 服務(wù)的名稱 restart: always # 代表只要Docker啟動蹦误,那么這個容器就跟著一起啟動 image:?http://daocloud.io/library/mysql:5.7.4?# 指定鏡像路徑 container_name: mysql # 指定容器名稱 ports: - 3306:3306 # 指定端口號的映射 environment: MYSQL_ROOT_PASSWORD: root # 指定MySQL的ROOT用戶登錄密碼 TZ: Asia/Shanghai # 指定時區(qū) volumes: - /opt/docker_mysql-tomcat/mysql_data:/var/lib/mysql # 映射數(shù)據(jù)卷 tomcat: restart: always # 代表只要Docker啟動劫拢,那么這個容器就跟著一起啟動 image:?http://daocloud.io/library/tomcat:8.5.15-jre8?# 指定鏡像路徑 container_name: tomcat # 指定容器名稱 ports: - 8080:8080 # 指定端口號的映射 environment: MYSQL_ROOT_PASSWORD: root # 指定MySQL的ROOT用戶登錄密碼 TZ: Asia/Shanghai # 指定時區(qū) volumes: - /opt/docker_mysql-tomcat/tomcat_webapps:/usr/local/tomcat/webapps # 映射數(shù)據(jù)卷 - /opt/docker_mysql-tomcat/tomcat_logs:/usr/local/tomcat/logs # 映射數(shù)據(jù)卷

5.3 使用Docker-Compose命令管理容器

在使用docker-compose的命令時,默認(rèn)會在當(dāng)前目錄下找docker-compose.yml文件

# 1. 基于docker-compose.yml啟動管理的容器docker-compose up -d

# 2. 關(guān)閉并刪除容器docker-compose down

# 3. 開啟|關(guān)閉|重啟已經(jīng)存在的由docker-compose維護的容器docker-compose start|stop|restart

# 4. 查看由docker-compose管理的容器docker-compose ps

# 5. 查看日志docker-compose logs -f

5.4 docker-compose配置Dockerfile使用

使用docker-compose.yml文件以及Dockerfile文件在生成自定義鏡像的同時啟動當(dāng)前鏡像强胰,并且由docker-compose去管理容器

docker-compose.yml

# yml文件version: '3.1'services: ssm: restart: always build: # 構(gòu)建自定義鏡像 context: ../ # 指定Dockerfile文件所在路徑 dockerfile: Dockerfile # 指定Dockerfile文件名稱 image: ssm:1.0.1 container_name: ssm ports: 8081:8080 environment: TZ: Asia/Shanghai

Dockerfile文件

from?http://daocloud.io/library/tomcat:8.5.15-jre8copy?ssm.war /usr/local/tomcat/webapps

# 可以直接啟動基于docker-compose.yml以及Dockerfile文件構(gòu)建的自定義鏡像docker-compose up -d# 如果自定義鏡像不存在舱沧,會幫助我們構(gòu)建出自定義鏡像,如果自定義鏡像已經(jīng)存在偶洋,會直接運行這個自定義鏡像# 重新構(gòu)建的話# 重新構(gòu)建自定義鏡像docker-compose build# 運行前熟吏,重新構(gòu)建docker-compose up -d --build

六. Docker DI、CD

6.1 引言

項目部署將項目通過maven進行編譯打包將文件上傳到指定的服務(wù)器中將war包放到tomcat的目錄中通過Dockerfile將Tomcat和war包轉(zhuǎn)成一個鏡像玄窝,由DockerCompose去運行容器項目更新了 將上述流程再次的從頭到尾的執(zhí)行一次

6.2 CI介紹

CI( continuous intergration )持續(xù)集成持續(xù)集成:編寫代碼時牵寺,完成了一個功能后,立即提交代碼到Git倉庫中恩脂,將項目重新的構(gòu)建并且測試快速發(fā)現(xiàn)錯誤防止代碼偏離主分支

6.3 實現(xiàn)持續(xù)集成

6.3.1 搭建GItLab服務(wù)器

1帽氓、創(chuàng)建一個全新的虛擬機,并且至少指定4G的運行內(nèi)存

2俩块、安裝docker以及docker-compose

3黎休、將ssh的默認(rèn)22端口浓领,修改為60022端口

vi /etc/ssh/sshd_configPORT 22 -> 60022systemctl restart sshd

4、docker-compose.yml問價去安裝GitLab

version: '3.1'services: gitlab: image: 'twang2218/gitlab-ce-zh:11.1.4' container_name: "gitlab" restart: always privileged: true hostname: 'gitlab' environment: TZ: 'Asia/Shanghai' GITLAB_OMNIBUS_CONFIG: external_url 'http://192.168.199.110' gitlab_rails['time_zone'] = 'Asia/Shanghai' gitlab_rails['smtp_enable'] = true gitlab_rails['gitlab_shell_ssh_port'] = 22 ports: - '80:80' - '443:443' - '22:22' volumes: - /opt/docker_gitlab/config:/etc/gitlab - /opt/docker_gitlab/data:/var/opt/gitlab - /opt/docker_gitlab/logs:/var/log/gitlab

6.3.2 搭建GitLab-Runner

查看資料中的gitlab-runner文件即可安裝

6.3.3 整合項目入門測試

1势腮、創(chuàng)建maven工程联贩,添加web.xml文件,編寫html頁面

2捎拯、編寫gitlab-ci.yml文件

stages: - test test: stage: test script: - echo first test ci # 輸入的命令

3泪幌、將maven工程推送到Gitlab中

4、可以在Gitlab中查看到gitlab-ci.yml編寫的內(nèi)容

6.3.4 編寫gitlab-ci.yml文件

1玄渗、編寫gitlab-ci.yml測試命令使用

stages: - test test: stage: test script: - echo first test ci # 輸入的命令 - /usr/local/maven/apache-maven-3.6.3/bin/mvn package

2座菠、編寫關(guān)于Dockerfile以及docker-compose文件的具體內(nèi)容

# 1. DockerfileFROM?http://daocloud.io/library/tomcat:8.5.15-jre8COPY?testci.war /usr/local/tomcat/webapps

# 2. docker-compose.ymlversion: "3.1"services:testci:build: dockerrestart: alwayscontainer_name: testciports:- 8080:8080

歡迎來訪http://tylxjj.top/個人博客

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市藤树,隨后出現(xiàn)的幾起案子浴滴,更是在濱河造成了極大的恐慌,老刑警劉巖岁钓,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件升略,死亡現(xiàn)場離奇詭異,居然都是意外死亡屡限,警方通過查閱死者的電腦和手機品嚣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钧大,“玉大人翰撑,你說我怎么就攤上這事“⊙耄” “怎么了眶诈?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瓜饥。 經(jīng)常有香客問我逝撬,道長,這世上最難降的妖魔是什么乓土? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任宪潮,我火速辦了婚禮,結(jié)果婚禮上趣苏,老公的妹妹穿的比我還像新娘狡相。我一直安慰自己,他們只是感情好拦键,可當(dāng)我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布谣光。 她就那樣靜靜地躺著,像睡著了一般芬为。 火紅的嫁衣襯著肌膚如雪萄金。 梳的紋絲不亂的頭發(fā)上蟀悦,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天,我揣著相機與錄音氧敢,去河邊找鬼日戈。 笑死,一個胖子當(dāng)著我的面吹牛孙乖,可吹牛的內(nèi)容都是我干的浙炼。 我是一名探鬼主播,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼唯袄,長吁一口氣:“原來是場噩夢啊……” “哼弯屈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起恋拷,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤资厉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蔬顾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宴偿,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年诀豁,在試婚紗的時候發(fā)現(xiàn)自己被綠了窄刘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡舷胜,死狀恐怖娩践,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情烹骨,我是刑警寧澤欺矫,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站展氓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏脸爱。R本人自食惡果不足惜遇汞,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望簿废。 院中可真熱鬧空入,春花似錦、人聲如沸族檬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽单料。三九已至埋凯,卻和暖如春点楼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背白对。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工掠廓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人甩恼。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓蟀瞧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親条摸。 傳聞我的和親對象是個殘疾皇子悦污,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,937評論 2 361

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