1. 程式人生 > >將nginx+tomcat整合遷移到二代swarm

將nginx+tomcat整合遷移到二代swarm

1、首先init二代swarm叢集,本實驗中只有兩個節點(192.168.110.144和192.168.110.147),具體搭建二代swarm集

群的方法可以參考我以前的部落格或者是官網https://docs.docker.com/engine/swarm/swarm-tutorial/create-swarm/

2、製作nginx映象的Dockerfile,內容如下

FROM debian:jessie

MAINTAINER NGINX Docker Maintainers "[email protected]"

ENV NGINX_VERSION 1.11.6-1~jessie

RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 \
        && echo "deb http://nginx.org/packages/mainline/debian/ jessie nginx" >> /etc/apt/sources.list \
        && apt-get update \
        && apt-get install --no-install-recommends --no-install-suggests -y \
                                                ca-certificates \
                                                nginx=${NGINX_VERSION} \
                                                nginx-module-xslt \
                                                nginx-module-geoip \
                                                nginx-module-image-filter \
                                                nginx-module-perl \
                                                nginx-module-njs \
                                                gettext-base \
        && rm -rf /var/lib/apt/lists/*

# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
        && ln -sf /dev/stderr /var/log/nginx/error.log

COPY default.conf /etc/nginx/conf.d
EXPOSE 80 443

CMD ["nginx", "-g", "daemon off;"]

其中比較關鍵的是COPY default.conf /etc/nginx/conf.d

注意:因為發現如果通過docker cp將default.conf拷貝到已經啟動的nginx容器中,是不能生效的,所以選擇將拷貝的

動作放在Dockerfile中

default.conf的內容如下:

server {
    listen       80;
    server_name  mynginx;

    location / {
        proxy_pass  http://myweb:8080/Redirect/hello.html;
    }
}
其中mynginx是nginx的service name(下面的步驟會看見),myweb是tomcat的service name(下面的步驟會看見)

,其實mynginx和myweb分別對應的是vip,關於vip的解釋可以參看我以前轉載的部落格。

3.建立測試web(Redirect工程,本工程只是實驗,所有隻有一個hello.jsp),hello.jsp內容如下

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
   Hello world
</body>
</html>
4、啟動tomcat service,啟動指令碼如下
docker service create \
  --name myweb \
  --network net1 \
  --publish 8080:8080 \
  --replicas 1 \
  dockertest1:5000/tomcat

其中dockertest1:5000/tomcat是本地映象,net1是overlay網路(docker network create net1 -d overlay

5、通過docker cp 命令將Redirect.war拷貝到tomcat容器裡面。其實在本實驗中--replicas=1,如果>1時候,還是參考

nginx Dockerfile的方式

6、啟動nginx service,指令碼內容如下:

docker service create \
  --name mynginx \
  --network net1 \
  --publish 80:80 \
  --replicas 1 \
  dockertest1:5000/nginx:1.0

dockertest1:5000/nginx:1.0是通過第4步驟中的Dockerfile build的映象,net1和第5步驟的net1是一樣的

7、service都正常啟動的結果

ID            NAME     REPLICAS  IMAGE                       COMMAND
2yz6diw5qywg  myweb    1/1       dockertest1:5000/tomcat     
dyr5m86oaslt  mynginx  1/1       dockertest1:5000/nginx:1.0

8、通過瀏覽器訪問http://192.168.110.144,如果打印出Hello world,說明實驗成功