剛開始對(duì)Docker的印象是一個(gè)低配版虛擬機(jī)类咧,沙箱機(jī)制的容器。工作中項(xiàng)目接觸的少娇钱,所以對(duì)于這項(xiàng)用不著的技術(shù)一直停留在最初的印象虐呻。
現(xiàn)在互聯(lián)網(wǎng)行業(yè)飛速發(fā)展,公司同時(shí)也在飛速發(fā)展琼腔。隨著業(yè)務(wù)量不斷擴(kuò)大瑰枫,公司也不得不升級(jí)為微服務(wù)式架構(gòu)。微服務(wù)架構(gòu)的粒度小丹莲,耦合低光坝。同時(shí)對(duì)于服務(wù)器的要求也越來越高,為何方便快捷的搭建環(huán)境和管理甥材,使用Docker成為了必要盯另。接下來進(jìn)入主題:
1,Docker的Windows安裝
首先進(jìn)入Docker官網(wǎng):https://www.docker.com
get started 獲取下載鏈接
下載完成直接運(yùn)行安裝
然后失斨拚浴鸳惯?
很正常,首先windows10必須是企業(yè)版叠萍,因?yàn)閣in10版本的docker依賴hyper-v芝发。如果不是請(qǐng)升級(jí)系統(tǒng)為企業(yè)版
然后安裝完成之后運(yùn)行失敗苛谷?
根據(jù)提示修復(fù)錯(cuò)誤辅鲸,我遇到的問題解決方式是:1,通過bios開啟虛擬化腹殿,2独悴,開啟hyper-v
2,Docker入門級(jí)使用
1例书,什么是Docker鏡像
Doker的精髓,也是docker的便利之處绵患。鏡像可以理解為一個(gè)環(huán)境包雾叭∥蛟牛可移植落蝙,減去重復(fù)部署環(huán)境的煩惱。
2暂幼,如何保存自己的云Docker鏡像
我用的是阿里云鏡像筏勒,進(jìn)入阿里云————>選擇產(chǎn)品與服務(wù)————>容器鏡像服務(wù)
3,制作鏡像(使用Dockerfile方式)
Dockerfile內(nèi)容:
#使用的基礎(chǔ)鏡像
FROM centos
#作者信息
MAINTAINER "yuchuan.zeng@hand-china.com"
#創(chuàng)建功能目錄
RUN mkdir -p /home/hms
#把當(dāng)前目錄下的jdk文件夾添加到鏡像
ADD jdk-8u91-linux-x64.tar.gz /home/hms
#把當(dāng)前目錄下的tomcat文件夾添加到鏡像
ADD apache-tomcat-8.5.12.tar.gz /home/hms
#添加環(huán)境變量
ENV JAVA_HOME /home/hms/jdk1.8.0_91
ENV CATALINA_HOME /home/hms/apache-tomcat-8.5.12
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
WORKDIR /home/hms/apache-tomcat-8.5.12
#暴露8080端口
EXPOSE 8080
RUN chmod +x /home/hms/apache-tomcat-8.5.12/bin/catalina.sh
RUN chmod 777 -R /home/hms
#啟動(dòng)時(shí)運(yùn)行tomcat
CMD ["/home/hms/apache-tomcat-8.5.12/bin/catalina.sh", "run"]
然后需要把Dockerfile打成鏡像:
docker build -f Dockerfile -t hms-tomcat:TAG .
# -f Dockerfile路徑旺嬉,默認(rèn)是當(dāng)前目錄
# -t 指定新鏡像的名字以及TAG
# . 指定路徑為當(dāng)前路徑
成果效果圖
啟動(dòng)鏡像:
docker run --name test-tomcat -itd -p 9000:8080 -v 主機(jī)目錄:容器目錄:rw 鏡像ID或鏡像名:TAG
# -i 以交互模式運(yùn)行容器
# -t 分配一個(gè)偽終端管行,即命令行,通常組合來使用
# -p 指定映射端口邪媳,將主機(jī)端口映射到容器內(nèi)的端口
# -d 后臺(tái)運(yùn)行容器
# -v 指定掛載主機(jī)目錄到容器目錄捐顷,默認(rèn)為rw讀寫模式,ro表示只讀
查看logs指令:
docker logs -f --tail=100 test-tomcat
進(jìn)入容器指令:
win: winpty docker exec -it b78da88433cd sh
linux: docker exec -it b78da88433cd bash
如果對(duì)自己的鏡像測(cè)試滿意雨效,則上傳阿里云
打成tag:
docker tag [鏡像ID] registry.cn-hangzhou.aliyuncs.com/circle-zeng/hms:[鏡像版本號(hào)]
打tag作用是建立傳輸管道迅涮,告訴docker往哪兒傳輸
push:
docker push registry.cn-hangzhou.aliyuncs.com/circle-zeng/hms:[鏡像版本號(hào)]
以后類似的環(huán)境就可以根據(jù)這個(gè)基礎(chǔ)環(huán)境為基礎(chǔ)引用了,如下Dockerfile:
#使用自己的基礎(chǔ)鏡像
FROM registry.cn-hangzhou.aliyuncs.com/circle-zeng/hms:2.0.0
后續(xù)使用鏡像時(shí)徽龟,可能需要為鏡像加上hosts配置
docker run --add-host 域名:ip --add-host 域名:ip --name hmap-tomcat -itd -p 9090:8080 hmap-tomcat:3.0 -v 主機(jī)目錄:容器目錄:rw
使用docker-compose,在當(dāng)前目錄下建立docker-compose.yaml
version: "2"
services:
mysql:
container_name: mysql2 # 容器名
image: # 容器所使用的鏡像叮姑,鏡像形式為[username 或 url]/repository:tag
ports:
- "3306:3306" # [本機(jī)端口:容器內(nèi)端口] 將本機(jī)端口與docker容器內(nèi)部應(yīng)用的端口映射,以提供外部對(duì)容器內(nèi)應(yīng)用的訪問能力
environment:
MYSQL_ROOT_PASSWORD: root # 設(shè)置mysql密碼
volumes:
- ./mysql/mysql_data:/var/lib/mysql # 將mysql中的數(shù)據(jù)文件映射到本機(jī)文件夾据悔,":"前的為本機(jī)地址传透,后的為容器內(nèi)地址
- ./mysql/mysql_db.cnf:/etc/mysql/conf.d/mysql_db.cnf # 將mysql的配置文件映射到本機(jī)文件
建立之后執(zhí)行:docker-compose -f docker-compose.yaml up -d 啟動(dòng)
補(bǔ)充:
docker的掛載功能非常實(shí)用,對(duì)應(yīng)docker run中-v指令极颓,指定主機(jī)目錄掛載到容器目錄朱盐。這樣的好處在于tomcat部署項(xiàng)目時(shí),直接把war包目錄掛載到容器tomcat的webapps目錄下菠隆,無需進(jìn)入容器內(nèi)就可以進(jìn)行應(yīng)用的微調(diào)整