(1)yum 包更新到最新
sudo yum update
(2)安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
(3)设置yum源为阿里云
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
(4)安装docker
sudo yum install docker-ce
(5)安装后查看docker版本
docker -v
(6)ustc镜像源设置
vi /etc/docker/daemon.json
注:1.docker文件夹不存在,需要先创建文件夹,再创建文件
2.这里使用阿里的镜像(比较快)
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
拉取nacos镜像并启动:
docker pull nacos/nacos-server
docker run -d --name nacos -p 8848:8848 -e PREFER_HOST_MODE=hostname -e MODE=standalone nacos/nacos-server
至此,我们已经可以使用nacos服务,UI地址:http://:8848/nacos 账号:nacos 密码:nacos:
上述方式是最简便的方式启动,但这样的话有一点小瑕疵,nacos所有元数据都会保存在容器内部。倘若容器迁移则nacos源数据则不复存在,所以通常我们通常会将nacos元数据保存在mysql中。下面附上配置方式:
修改配置文件:
#1 查看docker容器,nacos启动成功
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8149bca96437 nacos/nacos-server "bin/docker-startup.…" 4 minutes ago Up About a minute 0.0.0.0:8848->8848/tcp nacos
#2 进入容器
docker exec -it 8149bca96437 /bin/bash
#3 修改 conf/application.properties 内容如下:
vi conf/application.properties
数据库脚本:
https://github.com/alibaba/nacos/blob/master/config/src/main/resources/META-INF/nacos-db.sql
根据数据库位置修改你的nacos配置 文件(如:application.properties 内容替换为):
# spring
server.contextPath=/nacos
server.servlet.contextPath=/nacos
server.port=8848
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i
server.tomcat.basedir=
nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/**
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://<ip>:<port>/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=password
退出容器:
exit
查看容器ID:
docker ps
重启容器:
docker restart 8149bca96437
<build>
<finalName>elq-gateway</finalName>
<plugins>
<!--打包配置-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
打包完成后把jar 包传到服务器,自己创建个文件夹,比如我的:
4.进入到你创建的目录中
5.编写Dockerfile文件(重要)
在服务器新建一个dockerfile文件
命令:
vi dockerfile
# Docker image for springboot file run
# VERSION 0.0.1
# Author: eangulee
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER YL
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为app.jar【1、这里根据jar包名字进行调整!!!】
ADD elq-gateway.jar elq_gateway.jar
# 运行jar包【2、这里根据jar包名字进行调整!!!】
RUN bash -c 'touch /elq_gateway.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/elq_gateway.jar"]
解释下这个配置文件:
如果是第一次打包,它会自动下载java 8的镜像作为基础镜像,以后再制作镜像的时候就不会再下载了。
6.制作镜像
执行下面命令, 看好,最后面有个"."点!
# -t 参数是指定此镜像的tag名
docker build -t elq_gateway .
制作完成后通过docker images命令查看我们制作的镜像
docker images
docker run -d -p 88:88 elq_gateway
8、访问网站
直接浏览器访问: http://你的服务器ip地址:88/
已经进来了!
按照上文的步骤已足可以轻松应对docker部署springboot的全流程。但是这样在启动容器后,每次需更新jar包时,都得重新制作镜像,再重新制作容器。流程及其繁琐,效率极低。那如何在不更新镜像或者容器的前提下直接更新jar包完成部署呢?
FROM java:8
# 暴露端口
EXPOSE 88
# 运行
ENTRYPOINT ["java","-jar","/data/elq-gateway.jar"]
然后重新创建镜像:
docker build -t elq_gateway_new .
创建容器:
docker run --name elq_gateway_new -it -v /java_web/elq/docker-jar/gateway:/data -d -p 88:88 elq_gateway_new
这里说明一下,这个容器里面的 jar 包 我们已经映射到了 /java_web/elq/docker-jar/gateway 这个文件夹下:
所以我们想要重新部署的话只需要替换这里的jar 包,这样容器里的就也跟着变了,我们再重新启动容即可。
启动容器:
docker start elq_gateway_new
重启容器:
docker restart elq_gateway_new
sh脚本批量处理:
#elq_datacenter
cd /java_web/elq/docker-jar/datacenter;
sleep 1;
docker build -t elq_datacenter . ;
sleep 8;
docker run --name elq_datacenter -it -v /java_web/elq/docker-jar/datacenter:/data -d -p 8000:8000 elq_datacenter;
#elq_product
cd /java_web/elq/docker-jar/product;
sleep 1;
docker build -t elq_product . ;
sleep 8;
docker run --name elq_product -it -v /java_web/elq/docker-jar/product:/data -d -p 8100:8100 elq_product;
#elq_gateway
cd /java_web/elq/docker-jar/gateway;
sleep 1;
docker build -t elq_gateway . ;
sleep 8;
docker run --name elq_gateway -it -v /java_web/elq/docker-jar/gateway:/data -d -p 88:88 elq_gateway;