1. 程式人生 > >docker-swarm容器固定到node節點啟動

docker-swarm容器固定到node節點啟動

新的 反向代理 java_home const nal tomcat placement compose span

Docker-compose的編排

首先這裏需要創建一個目錄mkdir /docker-compose然後在裏邊創建一個docker-compose.yml的文件。

具體包括:

Images、hostname、ports、networks、volumes、deploy這些內容

其中包括nginx+tomcat1+tomcat2三個服務

version: "3" 這是最新的版本

services:

nginx:

image: nginx5:latest

hostname: nginx

ports:

- "8021:80"

networks:

- "mynet"

volumes:

- "/srv/jetsen/nginx:/nginx"

- "nginx://usr/local/nginx-1.6.2"

deploy:

placement:

constraints:

- engin.labels.function == nodeone

tomcat1:

image: tomcat15:latest

hostname: tomcat1

ports:

- "8088:8080"

networks:

- "mynet"

volumes:

- "/srv/jetsen/tomcat1:/tomcat1"

- "tomcat1jdk:/usr/local/jdk1.7.0_79"

- "tomcat1tomcat://usr/local/apache-tomcat-7.0.61/"

deploy:

placement:

constraints:

- engine.labels.function == nodeone

tomcat2:

image: tomcat15:latest

hostname: tomcat2

ports:

- "8089:8080"

networks:

- "mynet"

volumes:

- "/srv/jetsen/tomcat2:/tomcat2"

- "tomcat2jdk:/usr/local/jdk1.7.0_79"

- "tomcat2tomcat://usr/local/apache-tomcat-7.0.61/"

deploy:

placement:

constraints:

- engine.labels.function == nodetwo

volumes:

nginx:

tomcat1tomcat:

tomcat1jdk:

tomcat2tomcat:

tomcat2jdk:

networks:

mynet:

external: true

另外需要修改docker的主配置文件

技術分享圖片

--label=function=nodeone 一個標簽【別名】

--label=host=node1 主機名

--registry-mirror=http://e0d76b42.m.daocloud.io:國內的鏡像

註:另外node2的服務器節點也需要修改

技術分享圖片

完成之後通過docker stack deploy -c docker-compose.yml mynet:名字】

啟動這個docker-compose編排文件

查看docker service list

技術分享圖片

查看運行的節點

技術分享圖片



Nginx+tomcat1+tomcat2反向代理docker

實現上面的三個容器運行必須要有三個dockerfile寫出來的啟動鏡像

Nginx:

技術分享圖片

這裏使用的是nginx1.6.2版本

ENTRYPOINT /usr/local/nginx/sbin/nginx && tail -F /usr/local/nginx/logs/access.log

FROM docker.io/centos:7.2.1511

MAINTAINER LXF

RUN yum -y install gcc gcc-c++ kernel-headers dracut make auotmake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel

ADD ./nginx-1.6.2 /usr/local/nginx-1.6.2

RUN cd /usr/local/nginx-1.6.2 && ./configure --prefix=/usr/local/nginx --with-http_stub_status_module && make &&make install

EXPOSE 80

ENTRYPOINT /usr/local/nginx/sbin/nginx && tail -F /usr/local/nginx/logs/access.log

Tomcat1的鏡像:

技術分享圖片

Tomcat使用的是7版本

FROM docker.io/centos:7.2.1511

MAINTAINER LXF

RUN yum -y install gcc gcc- c++ make glibc kernel-headers tar glibc-common

ADD ./apache-tomcat-7.0.61 /usr/local/apache-tomcat-7.0.61

ADD ./jdk1.7.0_79 /usr/local/jdk1.7.0_79

ENV JAVA_HOME=/usr/local/jdk1.7.0_79

ENV PATH=$JAVA_HOME/bin:$PATH

FROM docker.io/centos:7.2.1511

MAINTAINER LXF

RUN yum -y install gcc gcc- c++ make glibc kernel-headers tar glibc-common

ADD ./apache-tomcat-7.0.61 /usr/local/apache-tomcat-7.0.61

ADD ./jdk1.7.0_79 /usr/local/jdk1.7.0_79

ENV JAVA_HOME=/usr/local/jdk1.7.0_79

ENV PATH=$JAVA_HOME/bin:$PATH

ENV CATALINA_HOME=/usr/local/apache-tomcat-7.0.61

ENV PATH=$JAVA_HOME/bin:$CATALINA_HOME/bin:$PATH

ADD ./server.xml /usr/local/apache-tomcat-7.0.61/conf/server.xml

RUN mkdir -p /web/webapp1

ADD index.jsp /web/webapp1/index.jsp

RUN chmod +x /usr/local/apache-tomcat-7.0.61/bin/*

EXPOSE 8080

ENTRYPOINT /usr/local/apache-tomcat-7.0.61/bin/startup.sh && tail -F /usr/local/apache-tomcat-7.0.61/logs/catalina.out

~

Tomcat2的鏡像和tomcat1的沒有區別就是在index.Jsp文件有區別

完成之後開始生產成鏡像 通過docker build -t 鏡像 /路徑

技術分享圖片

aa是nginx的鏡像

完成之後需要去編寫docker-compose.yml文件

內容如下

version: "3"

services:

tomcat1:

image: tomcat:1

hostname: tomcat1

expose:

- 8080

networks:

- "mynet"

volumes:

- "/srv/jetsen/tomcat1:/tomcat1"

- "tomcat1jdk:/usr/local/jdk1.7.0_79"

- "tomcat1tomcat://usr/local/apache-tomcat-7.0.61/"

deploy:

placement:

constraints:

- engine.labels.function == nodeone

tomcat2:

image: tomcat:2

hostname: tomcat2

expose:

- 8080

networks:

- "mynet"

volumes:

- "/srv/jetsen/tomcat2:/tomcat2"

- "tomcat2jdk:/usr/local/jdk1.7.0_79"

- "tomcat2tomcat://usr/local/apache-tomcat-7.0.61/"

deploy:

placement:

constraints:

- engine.labels.function == nodetwo

nginx:

image: aa:aa

hostname: nginx

ports:

- "8021:80"

networks:

- "mynet"

volumes:

- "/srv/jetsen/nginx:/nginx"

- "nginx1:/usr/local/nginx-1.6.2"

- "nginx2://usr/local/nginx"

deploy:

placement:

constraints:

- engine.labels.function == nodeone

volumes:

nginx:

nginx1:

nginx2:

tomcat1tomcat:

tomcat1jdk:

tomcat2tomcat:

tomcat2jdk:

networks:

mynet:

external: true

註:卷組一定要在最後標註,另外加紅顏色的路徑要創建才行 加綠色的表示申明的作用使用的卷組和網絡

技術分享圖片

技術分享圖片

完成之後需要啟動這個docker-compose文件

技術分享圖片

自己定義名字

當然刪除的命令是

技術分享圖片

看一下起來的容器

技術分享圖片

前面說過tomcat2woeker節點上工作

技術分享圖片 技術分享圖片

啟動三個容器之後進行反向代理的配置

需要在nginx的主配置文件配置upstream,可以去卷組裏面配置

技術分享圖片

手動添加

技術分享圖片

技術分享圖片

添加在卷組當中會自動和容器的數據同步,防止容器掛掉數據丟失

完成之後需要測試一下

技術分享圖片

反向代理測試:

技術分享圖片

技術分享圖片

註:如果有業務需要需要將docker-compose文件單獨分開那麽需要編寫單獨的文件,比如講上面的分為三分,每一份都需要申明網絡和卷組。當然使用同一個網絡mynet的話,啟動的容器之間還是可以互相同信得


docker-swarm容器固定到node節點啟動