一枫笛、Docker介紹
1.1引言
為什么使用docker法精?
傳統(tǒng)環(huán)境:
? 1.環(huán)境不一致。
? 2.在多用戶的操作系統(tǒng)下系馆,會相互影響送漠。
? 3.運(yùn)維成本過高。
? 4.安裝軟件成本過高由蘑。
1.2Docker的由來
一幫年輕人創(chuàng)業(yè)闽寡,創(chuàng)辦了溢價公司,2010年的專門做PAAS平臺尼酿。
到了2013年的時候爷狈,像亞馬遜,微軟裳擎,Google開始做PAAS平臺涎永。
2013年將核心技術(shù)開源,核心技術(shù)就是Docker鹿响。
1.3Docker的思想
1.集裝箱:
? 會將所有需要的內(nèi)容放到不同的集裝箱中羡微,誰需要這些環(huán)境就直接拿這個集裝箱就可以了。
2.標(biāo)準(zhǔn)化:
? 1.運(yùn)輸?shù)臉?biāo)準(zhǔn)化:Docker有一個碼頭惶我,所有上傳的集裝箱都放在了這個碼頭上妈倔,當(dāng)誰需要某一個環(huán)境,就直接指派大海豚去搬運(yùn)這個集裝箱就可以了绸贡。
? 2.命令的標(biāo)準(zhǔn)化:Docker提供一系列的命令盯蝴,幫助我們?nèi)カ@取集裝箱等等操作毅哗。
? 3.提供了REST的API:衍生出了很多圖形化界面,Rancher结洼。
3.隔離性:
? Docker在運(yùn)行集裝箱的內(nèi)容時黎做,會在Linux的內(nèi)核中,單獨(dú)開辟一片空間松忍,這片空間不會影響其他的程序蒸殿。
- 注冊中心。(超級碼頭鸣峭,上面放的就是集裝箱)
- 鏡像宏所。(集裝箱)
- 容器。(運(yùn)行起來的容器)
二摊溶、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 makacache fast
yum -y install docker-ce
# 4.啟動爬骤,并設(shè)置為開機(jī)自動啟動,測試
# 啟動Docker服務(wù)
systemctl start docker
# 設(shè)置開機(jī)自啟動
systemctl enable docker
# 測試
docker run hello-world
2.2Docker的中央倉庫
1.Docker官方的中央倉庫:這個倉庫是鏡像最全的莫换,下載速度較慢
2.國內(nèi)的鏡像網(wǎng)站:網(wǎng)易蜂巢霞玄、DAOCloud。拉岁。坷剧。
3.在公司內(nèi)部會采用私服的方式拉取鏡像(添加配置)
# 需要在 /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries":["ip:port"]
}
# 重啟兩個服務(wù)
systemctl deamon-reload
systemctl restart docker
2.3鏡像的操作
# 拉取鏡像到本地
docker pull 鏡像名稱[:tag]
# 舉個栗子
docker pull tomcat
# 查看全部鏡像
docker images
# 刪除本地鏡像
docker rmi 鏡像ID(IMAGE ID)
# 鏡像的導(dǎo)入導(dǎo)出(不規(guī)范)
# 將本地鏡像導(dǎo)出
docker save -o 導(dǎo)出的路徑 鏡像ID
# 加載本地的鏡像文件
docker load -i 鏡像文件
# 修改鏡像名稱
docker tag 鏡像ID 新鏡像名稱:版本
2.4 容器的操作
# 1.運(yùn)行容器
# 簡單操作
docker run 鏡像ID|鏡像名稱[:tag]
# 常用參數(shù)
docker run -d -p 宿主機(jī)端口:容器端口 --name 鏡像ID|鏡像名稱[:tag]
# -d 代表后臺運(yùn)行容器
# -p 宿主機(jī)端口:容器端口:為了映射當(dāng)前Linux的端口和容器的端口
# --name 指定容器名稱
# 2.查看正在運(yùn)行的容器
docker ps [-qa]
# -a:查看全部的容器,包括沒有運(yùn)行的
# -q:只查看容器的ID
# 3.查看容器的日志
docker logs -f 容器ID
# -f:可以滾動查看日志的最后幾行
# 4.進(jìn)入到容器內(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 satrt 容器ID
三惫企、Docker應(yīng)用
3.1部署工程
# 運(yùn)行MySQL容器
docker run -d -p 3306:3306 --name MYSQL_ROOT_PASSWORD=root daocloud.io/libart/mysql:5.7.4
# 準(zhǔn)備運(yùn)行的項(xiàng)目
project.war
# 復(fù)制到tomcat里
docker cp 文件名稱 容器ID:容器內(nèi)部路徑
# 舉個栗子
docker cp project.war TOMCAT:/usr/local/tomcat/webapp
3.2數(shù)據(jù)卷
為了部署工程,需要使用到cp的命令將宿主機(jī)內(nèi)的工程文件復(fù)制到容器內(nèi)部陵叽。
數(shù)據(jù)卷:將宿主機(jī)的目錄映射到容器的目錄中狞尔。
可以在宿主機(jī)中操作目錄中的內(nèi)容,那么容器內(nèi)部映射的文件巩掺,也會跟著改變偏序。
# 1.創(chuàng)建數(shù)據(jù)卷
docker volume create 數(shù)據(jù)卷名稱
# 創(chuàng)建數(shù)據(jù)卷之后,默認(rèn)會存放在一個目錄下 /var/lib/docker/volume/數(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 run -d -p 8080:8080 --name tomcat -v 路徑:/usr/local/tomcat/webapp 鏡像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))
# 舉個栗子
from daocloud.io/libart/tomcat:8.5.15-jre8
copy project.war /usr/local/tomcat/webapp
# 2.將準(zhǔn)備好的Dockerfile和相應(yīng)的文件拖拽到Linux操作系統(tǒng)中翰意,通過Docker的命令制作鏡像
docker build -t 鏡像名稱[:tag]
# 舉個栗子
docker build -t project-tomcat:1.0.0 .
五、Docker-Compose
之前運(yùn)行一個驚喜信柿,需要添加大量的參數(shù)冀偶。
可以通過Docker-Compose編寫這些參數(shù)。
Docker-Compose可以幫助我們批量的管理容器渔嚷。
只需要一個docker-compose.yml文件維護(hù)即可进鸠。
5.1下載Docker-Compose
# 1.去GitHub官網(wǎng)搜索docker-compose
https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64
# 2.將下載好的文件拖拽到Liunx
# 3.將Docker-Compose文件名稱修改一下,基于DockerCompose文件一個可執(zhí)行權(quán)限
mv
chmod 777 docker-compose
# 4.添加進(jìn)環(huán)境變量
# 將docker-compose文件移動到了/user/local/bin形病,修改了/etc/profile文件客年,給/usr/local/bin配置到了PATH中
mv docker-compose /usr/local/bin
vi /etc/profile
export PATH=$JAVA_HOME:/usr/local/local/bin:$PATH
source /etc/profile
# 5.測試一下
# 在任意目錄下輸入docker-compose
5.2Docker-Compose管理MySQL
yml文件以key:value方式來指定配置信息
多個配置信息以換行+縮進(jìn)的方式區(qū)分
在docker-compose.yml文件中,不要使用制表符
version: '1.0'
service:
mysql: # 服務(wù)的名稱
restart: always # 只要docker啟動漠吻,那么這個容器就跟著一起啟動
image: daocloud.io/libart/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/data:/var/lib/mysql
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維護(hù)的容器
docker-compose start|stop|restart
# 4.查看由docker-compose管理的容器
docker-compose ps
# 5.通過docker-compose查看日志
docker-compose logs -f
5.4Docker-Compose配置Dockerfile使用
使用docker-compose.yml文件以及Dockerfile文件在生成自定義鏡像的同時啟動當(dāng)前鏡像,并且由docker-compose去管理容器
# yml文件
version: '1.0'
services:
project:
restart: always
build: # 構(gòu)建自定義鏡像
context: ../ # 指定dockerfile文件所在的路徑
dockerfile: Dockerfile # 指定Dockerfile文件名稱
image: project:1.0.1
container_name: project
ports:
- 8081:8080
environment:
TZ: Asia/Shanghai
from daocloud.io/libart/tomcat:8.5.15-jre8
copy project.war /usr/local/tomcat/webapp
# 可以直接啟動基礎(chǔ)docker-compose.yml以及Dockerfile文件構(gòu)建的自定義鏡像
docker-compose up -d
# 如果自定義鏡像不存在侥猩,會幫助我們構(gòu)建出自定義鏡像榔至,如果存在,則運(yùn)行
# 重新構(gòu)建自定義鏡像
docker-compose build
# 運(yùn)行前重新構(gòu)建
docker-compose up -d --build
六欺劳、Dokcer CI唧取、CD
6.1引言
項(xiàng)目部署
? 1.將項(xiàng)目通過maven進(jìn)行編譯打包
? 2.將文件上傳到服務(wù)器中
? 3.將war包放到tomcat的目錄中
? 4.通過Dockerfile將Tomcat和war包轉(zhuǎn)成一個鏡像,由DockerCompose去運(yùn)行容器
項(xiàng)目更新
? 將刪除流程再次從頭到尾執(zhí)行一次划提?