1. 程式人生 > >Docker部署微服務(Cloud-Admin)

Docker部署微服務(Cloud-Admin)

文章目錄

Docker的安裝

  1. 解除安裝舊版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine
  1. 使用yum安裝
sudo yum install docker-ce
  1. 設定開機自啟和自動服務
sudo systemctl enable docker
sudo systemctl start docker
  1. 建立docker使用者組
sudo groupadd docker
//將當前使用者加入docker組
sudo usermod -aG docker $USER

安裝consul、redis、rabbitmq

  1. 新建docker網路
docker network create -d bridge spring-net
  1. 獲取映象
docker pull consul
docker pull redis
docker pull rabbitmq:management
  1. 執行映象
//consul
docker run -d -p 8500:8500 --name consul --network spring-net consul agent -server -bootstrap-expect=1 -client 0.0.0.0 -ui

//-bootstrap-expect:指定期望的server節點的數量,並當server節點可用的時候,自動進行bootstrapping


//rabbitmq
docker run -d --name rabbitmq --network spring-net -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672  rabbitmq:management


//redis  需要先配置好/etc/redis.conf
docker run -p 6379:6379 --network spring-net -v /etc/redis.conf:/etc/redis/redis.conf -v /opt/docker/redis:/data  --name redis -d redis redis-server /etc/redis/redis.conf --appendonly yes

//redis-server --appendonly yes : 在容器執行redis-server啟動命令,並開啟redis持久化配置

安裝nginx

  1. 獲取映象
docker pull nginx
  1. 執行
docker run -d --rm -p 80:80 --name nginx nginx
  1. 拷貝配置(只保留nginx.conf以及conf.d)
docker cp nginx:/etc/nginx /etc/nginx
  1. 停止容器
docker stop nginx
  1. 修改配置檔案conf.d下的defalut.conf
server {
   listen       80;
   server_name  localhost;
   charset utf-8;
   root /opt/nginx/dist;
   index index.html index.htm;
   location / {
       #root /opt/nginx/dist;
       #index index.html index.htm;
   }
   location /jwt/ {
       # 轉發請求到後端服務閘道器
       proxy_pass http://127.0.0.1:8765/jwt/;
   }
   location /api/ {
       proxy_pass http://127.0.0.1:8765/api/;
   }    
   error_page 404 /404.html;
   location = /40x.html {
   }
   error_page 500 502 503 504 /50x.html;
   location = /50x.html {
   }
}
  1. 重新執行映象
docker run --name nginx --network spring-net -p 80:80 -d -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -v /etc/nginx/conf.d:/etc/nginx/conf.d -v /opt/nginx/dist:/opt/nginx/dist nginx

部署微服務

  1. 配置伺服器docker可以遠端訪問
//在/usr/lib/systemd/system/docker.service中新增引數
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

//重新讀取配置檔案、重啟服務
systemctl daemon-reload
systemctl restart docker
  1. pom配置
   <build>
       <finalName>ace-gateway</finalName>
       <plugins>
           <plugin>
               <groupId>com.spotify</groupId>
               <artifactId>docker-maven-plugin</artifactId>
               <version>1.2.0</version>
               <configuration>
                   <dockerHost>http://你的伺服器地址:2375</dockerHost>
                   <imageName>${project.artifactId}</imageName>
                   <dockerDirectory>src/main/docker</dockerDirectory>
                   <resources>
                       <resource>
                           <targetPath>/</targetPath>
                           <directory>${project.build.directory}</directory>
                           <include>${project.build.finalName}.jar</include>
                       </resource>
                   </resources>
               </configuration>
           </plugin>
       </plugins>
   </build>
  1. application配置
redis:
   host: ${REDIS_HOST:localhost}
rabbitmq:
   host: ${RABBIT_MQ_HOST:localhost}
consul:
     host: ${CONSUL_HOST:localhost}
  1. Dockerfile配置
FROM livingobjects/jre8
VOLUME /tmp
ADD ace-gateway.jar app.jar
ENV REDIS_HOST=redis
ENV RABBIT_MQ_HOST=rabbitmq
ENV CONSUL_HOST=consul
RUN bash -c 'touch /app.jar' \
   && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
   && echo 'Asia/Shanghai' >/etc/timezone
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom", "-Dfile.encoding=utf-8","-jar","/app.jar"]
  1. 執行服務
docker run -d -p 8765:8765 --network spring-net --name geteway iot-gateway

防火牆開啟埠

//檢視已開放埠
firewall-cmd --list-ports
//新增埠 consul:8500 rabbitmq後臺管理介面:15672
firewall-cmd --zone=public --add-port=8500/tcp --permanent
//重啟防火牆
systemctl restart firewalld