Docker的安装
-
卸载旧版本
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
-
使用yum安装
sudo yum install docker-ce
-
设置开机自启和自动服务
sudo systemctl enable docker
sudo systemctl start docker
-
建立docker用户组
sudo groupadd docker
//将当前用户加入docker组
sudo usermod -aG docker $USER
安装consul、redis、rabbitmq
-
新建docker网络
docker network create -d bridge spring-net
-
获取镜像
docker pull consul
docker pull redis
docker pull rabbitmq:management
-
运行镜像
//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
-
获取镜像
docker pull nginx
-
运行
docker run -d --rm -p 80:80 --name nginx nginx
-
拷贝配置(只保留nginx.conf以及conf.d)
docker cp nginx:/etc/nginx /etc/nginx
-
停止容器
docker stop nginx
-
修改配置文件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 {
}
}
-
重新运行镜像
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
部署微服务
-
配置服务器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
-
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>
-
application配置
redis:
host: ${REDIS_HOST:localhost}
rabbitmq:
host: ${RABBIT_MQ_HOST:localhost}
consul:
host: ${CONSUL_HOST:localhost}
-
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"]
-
运行服务
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