剛開(kāi)始對(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ù)器的要求也越來(lái)越高,為何方便快捷的搭建環(huán)境和管理,使用Docker成為了必要。接下來(lái)進(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ò)誤,我遇到的問(wèn)題解決方式是:1,通過(guò)bios開(kāi)啟虛擬化,2,開(kāi)啟hyper-v
2,Docker入門級(jí)使用
1,什么是Docker鏡像
Doker的精髓,也是docker的便利之處。鏡像可以理解為一個(gè)環(huán)境包??梢浦玻瑴p去重復(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è)偽終端,即命令行,通常組合來(lái)使用
# -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)用的訪問(wèn)能力
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目錄下,無(wú)需進(jìn)入容器內(nèi)就可以進(jìn)行應(yīng)用的微調(diào)整