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

deeply發表於2021-09-09

               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的主配置檔案

圖片1.png 

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

--label=host=node1   :  主機名

--registry-mirror=:國內的映象

 

注:另外node2的伺服器節點也需要修改

 圖片2.png

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

啟動這個docker-compose編排檔案

 

檢視docker service  list  

 圖片4.png

檢視執行的節點

 圖片5.png

 

                          Nginx+tomcat1+tomcat2反向代理docker

 

實現上面的三個容器執行必須要有三個dockerfile寫出來的啟動映象

 

Nginx:

圖片1.png 

這裡使用的是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的映象:

 圖片2.png

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  映象   /路徑

 

 圖片3.png

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

 

 

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

圖片4.png

圖片5.png

完成之後需要啟動這個docker-compose檔案

圖片6.png       

自己定義名字

當然刪除的命令是

圖片7.png

看一下起來的容器

圖片8.png 

前面說過tomcat2在woeker節點上工作

  圖片9.png                圖片10.png

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

需要在nginx的主配置檔案配置upstream,可以去卷組裡面配置

 圖片11.png

                             手動新增

圖片12.png

 

 圖片13.png

新增在卷組當中會自動和容器的資料同步,防止容器掛掉資料丟失

 

完成之後需要測試一下

 圖片14.png

反向代理測試:

 

 

 圖片15.png

 

 

 圖片16.png

 

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

©著作權歸作者所有:來自51CTO部落格作者tty之星的原創作品,如需轉載,請註明出處,否則將追究法律責任

好知識,才能預見未來


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1978/viewspace-2821703/,如需轉載,請註明出處,否則將追究法律責任。

相關文章