將nginx+tomcat整合遷移到二代swarm
阿新 • • 發佈:2019-01-03
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,說明實驗成功