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/個人博客