docker之docker-compose——容器管理

nginx鏡像製做實戰

docker容器的主業

docker理念裏,容器啓動時,應當爲它指定主業是什麼,如nginx容器主業就是nginx代理服務,tomcat容器就是web服務等等nginx

1、容器建立時,必須指定主業任務,如不指定,則容器無事可幹當即退出。git

2、在dockerfile打包鏡像時,可使用cmd命令來指定一個默認的主業,以下:github

 

 

3、既然鏡像裏是默認主業,即意味着建立容器時,能夠覆蓋此默認命令,以下web

 

 

推薦的ENTRYPOINT方式

1、鏡像自己應該有穩定的主業,應當指定後即不能更改用途,因而引入ENTRYPOINTspring

2使用ENTRYPOINT字義即容器入口,它不能被runcmd覆蓋,以下例:docker

 

 

執行:docker build -t nginxx:v3 .apache

 

 

之後使用nginxx:v3這個鏡像時,只能作nginx服務來使用啦windows

手動打包springboot鏡像

咱們須要對業務項目打包發佈,同樣須要製做成爲業務鏡像,供運維使用,下面講述springboot的製做過程:api

1、將springboot打好的jar包上傳瀏覽器

2、在同級目錄下,建立Dockerfile文件,內容以下:

 

 

3dockerfile打包業務鏡像

 

 

4、啓動鏡像,即獲得業務運行

docker run -d -p 8090:8090  --name member member:v1

 

 

5、瀏覽器打開頁面校驗:http://192.168.244.7:8090/

 

 

maven源碼打包用法

更多的狀況,咱們是直接在運維環境裏,上傳源碼,直接maven打包jar,而後再進一步打包成鏡像,與手動打包過程相似

若是環境中沒有安裝maven,請手動安裝,腳本以下:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# yum-config-manager --add-repo http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo

# yum-config-manager --enable epel-apache-maven

// 安裝maven

# yum install -y apache-maven

1、上傳原碼到docker環境中(通常是git/svn直接拉取源碼)

 

 

2maven打包

mvn clean package

 

 

生成的jar在同級target目錄下

 

 

3、執行docker命令生成鏡像

dockerfile文件內容

 

 

命令建立鏡像

 

 

 

maven插件打包

前面打springboot包的方式,須要手動上傳項目jar或者源碼到服務器(違和感很強),這對於開發人員平常發佈開發環境項目,極爲不便

下面,演示一個maven插件:docker-maven-plugin用法,來打通環境。

前提條件

1、須要咱們windows上安裝docker服務

2、須要docker服務配置http倉庫接口,windowsdocker服務配置以下(傳統配置模式無權限修改文件)

本地環境配置

1windows安裝docker-toolbox,傻瓜安裝便可。

2打開Docker Quickstart Terminal終端,等待初始始化完成後。

3、輸入docker-machine env命令,返回docker服務的api接口和證書位置,以下:

 

 

4、輸入docker-machine ssh命令,進入sh環境中,配置http倉庫路徑

 

 

修改文件配置(當前用戶是docker不是root,要sudo提高至root):

sudo vi /var/lib/boot2docker/profile

 

 

5、修改完成,保存。重啓docker服務

sudo /etc/init.d/docker restart

 

 

 

項目環境配置maven插件

在咱們的工程pom中加入docker-maven-plugin插件的配置,以下

 

 

1、其中,imageName配置鏡像的全路徑名,即指定私庫的名稱

2dockerHostdockerCertPath對應配置上一步中dockerapi和證書值

 

 

打包運行

idea爲例,整個項目裝配完成,只須要操做maven的一二三步驟,即直接鏡像進入倉庫,整個過程毫無違和感

 

 

若使用的不是idea工具,可直接使用maven命令,一句完成打包,以下:

 

 

 

校驗鏡像倉庫結果

 

 

至此,咱們的服務器環境,已經能夠直接運行docker run 鏡像獲得結果了

 

Docker-Compose使用

當項目涉及容器較多時,須要一個管理容器的工具

docker-compose安裝

curl方式安裝

sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose       

增長可執行權限

sudo chmod +x /usr/local/bin/docker-compose

查看版本

docker-compose version

 

 

docker-compose.yaml命令

docker-compose的命令與docker命令極爲類似,用法上沒有區別,下面列出它特有的幾種命令: 

up 建立並啓動容器:docker-compose up -d --scale 服務名=數字

---------- d表示後臺運行,scale是表示對應的服務同時啓動幾個容器

down 中止並刪除容器: docker-compose down

---------- 會停掉容器,並刪除掉容器。若是不但願刪除容器,請使用stop

docker-compose實戰

 

 

編寫一個項目總體服務,一個網關nginx + springboot的集羣,如上圖

其中nginx服務,將配置文件掛載在主機當前項目目錄的路徑下:nginx/conf.d/

 

 

命令:docker-compose up -d

 

 

docker-compose up -d --scale member-1=2

member-1服務啓動兩個容器

 

 

Docker網絡路由

docker的跨主機網絡路由

假設咱們如今有兩臺docker主機,各啓動了本身的容器在運行

 

 

問題由來

1、在網橋模式下,同一個主機下的容器,使用同一個網橋docker0,它們組成一個局域網,如上圖主機1172.17.6.0網段下的三個容器

2、同一個主機下的容器,相互之間網絡是通的

3、但不一樣主機下,是不一樣的局域網,它們之間網絡不能互通。如:172.17.6.2的容器,想要訪問172.17.8.2的容器

方案

a192.168.244.7,容器網段172.17.6.1/16a機起了容器ip172.17.6.2

b192.168.244.8,容器網段172.17.8.1/16b機起了容器ip172.17.8.2

 

兩臺機分別配置路由表

a機,route add -net 172.17.8.0 netmask 255.255.255.0  gw 192.168.244.8

b機,route add -net 172.17.6.0 netmask 255.255.255.0  gw 192.168.244.7

添加好後,路由表相似下圖

 

 

而後aping b機容器,發現還是ping不通,卡住ping不通,就是數據包被drop掉了

ip_forward配置

咱們在b機上使用如下命令查看網絡包轉發狀況,發現有掉包

iptables -t filter -nvL FORWARD

 

咱們須要b機上配置,尋找172.17ip的網絡包不要丟掉,要轉發

a機: iptables -I DOCKER  --dst 172.17.0.0/16 -j ACCEPT

b機: iptables -I DOCKER  --dst 172.17.0.0/16 -j ACCEPT

網絡ok,整個網絡包的流程,完整以下:

 

相關文章
相關標籤/搜索