想在linux服务器上运行微服务项目首先需要将其打包,在本地上也要能运行起来(打包成jar包并用java -jar xx.jar去运行),然后再去添加一些配置文件,放到docker上就可以运行了。具体操作如下:
这是父工程的依赖
org.apache.maven.plugins
maven-compiler-plugin
第二级父工程:
org.springframework.boot
spring-boot-maven-plugin
src/main/java
**/*.xml
false
如果是报错说找不到某个公共工具包如commonutil,可以尝试在plugin标签下加:
repackage
如果报错找不到主方法入口或者主菜单,在plugin下加:
主启动类的相对路径如:com.xx.xx.Main
ZIP
如果是公共包需要打包,可以在公共包的pom文件下加上:
org.apache.maven.plugins
maven-compiler-plugin
修改配置文件,将本地的localhost改成线上的服务器的ip地址,包括mysql的数据源配置和redis的主机地址、nacos等等。
打包完成以后可以看到每一个模块下面都有一个target文件夹,点进去发现有一个jar包,有主方法的会有一个.original的包在下面
然后cmd进入这个文件夹用java -jar xx.jar运行,如果没报错基本上没啥问题。如果能在线上的nacos查看到服务已经注册那就可以了。
我新建了一个service文件夹
然后里面嵌套了很多文件夹,因为每一个jar包都要有一个单独的Dockerfile文件和它放到一起
如下:
有多级的也要分多级存放:
接着就是配置每一个jar包配对的Dockerfile文件了
以下是我的模板:
Dockerfile:
FROM openjdk:8-jdk-alpine #拉取镜像
ADD xxxx.jar /xxxx.jar #将这个jar包添加到工作目录
EXPOSE 1111 #服务暴露的端口号
ENTRYPOINT ["java","-jar","/xxxx.jar"] #启动jar包的命令
然后配置一个总的docker-compose.yml文件,这个文件将作为入口去找到所有的微服务的Dockerfile运行启动命令。
#复制的时候要注意格式,多一个或少一个空格都会导致运行失败
#版本要注意,要留意linux系统的docker-compose的版本是多少,我的是1.29.1
#所以对应的是3.8
version: "3.8"
#下面会创建一个网络
networks:
my-net:
volumes:
data:
services:
#对每一个服务起别名
service-name1:
build:
#docker文件所在路径,相对于当前这个文件的
context: ./service/xxx
dockerfile: Dockerfile
ports:
- "暴露的端口:暴露的端口"#当前服务的端口:想在线上暴露的端口
networks:
- my-net
service-name1:
build:
#docker文件所在路径,相对于当前这个文件的
context: ./service/xxx
dockerfile: Dockerfile
ports:
- "暴露的端口:暴露的端口"#当前服务的端口:想在线上暴露的端口
networks:
- my-net
安装docker前:
安装yum工具:
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
更新本地镜像源:
# 设置docker镜像源
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
安装docker:
yum install -y docker-ce
启动前一定要关闭防火墙
# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
#查看是否关闭防火墙
systemctl status firewalld
启动docker:
systemctl start docker
查看是否启动:
systemctl status docker
docker network create my-net
这个是GitHub的下载命令:
sudo curl -L https://github.com/docker/compose/releases/download/1.29.1/docker-compose-'uname -s'-'uname -m'-o /usr/local/bin/docker-compose
如果上面比较慢就用下面的:
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.1/docker-compose-'uname -s'-'uname -m'-o /usr/local/bin/docker-compose
redis、nginx以及其他的一些服务都可以拉取,可以上网自己搜,我这边就不呈现了
docker pull mysql
docker pull nacos/nacos-server
#启动mysql
docker run -it --name mysql8 -e MYSQL-ROOT_PASSWORD=密码 -p 3306:3306 --network my-net --network-alias mysql-net --restart=always -d mysql
#启动nacos,启动前记得先把nacos的数据库弄到linux上的数据库里面
docker run -it --name nacos2 \
-e JVM_XMS=256m -e JVM_XMX=256m -e MODE=standalone \
-e SPRING_DATASOURCE_PLATFROM=mysql -e MYSQL_SERVICE_HOST=主机ip \
-e NACOS_AUTH_IDENTITY_KEY=my-identity-key \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=数据库密码 \
-e MYSQL_SERVICE_DB_NAME=nacos的配置数据库 \
-p 8848:8848 -p 9848:9848 -d nacos/nacos-server \
--restart=always
启动成功以后用docker ps -a可以看到docker容器中有mysql 和nacos的服务。
使用docker exec -it mysql8 bash可以进入mysql登录面板:
然后输入mysql -u root -p和密码即可登录
先去把这个文件执行到上面的mysql里面
进入到/usr/nacos/nacos/bin目录,对startup.sh文件添加java环境;
然后对下面这个文件执行启动命令:./startup.sh -m standalone以单机的模式启动。
尝试去访问http:ip:8848/nacos如果能进去那说明nacos启动成功。
#github镜像
sudo curl -L https://github.com/docker/compose/releases/download/1.29.1/docker-compose-'uname -s'-'uname -m'-o /usr/local/bin/docker-compose
#国内镜像
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.1/docker-compose-'uname -s'-'uname -m'-o /usr/local/bin/docker-compose
安装完成以后进行添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
测试安装结果
docker-compose --version
首先cd到刚刚上传到linux的项目文件夹,必须进到有docker-compose.yml文件的文件夹
执行
#启动所有的service
docker-compose up -d
#启动单个service
docker-compose up -d canal
如果是第一次启动项目会自动去下载依赖和构建项目,且一个个去运行。然后就可以看到docker中存在的服务
然后再去访问自己的后端的接口,如果能访问成功就说明部署成功。不访问成功建议先去本地跑一遍报错的那些服务,看看本地会不会报错,如果本地也报错那在本地调试好后在重新把对应服务的jar包拉到服务器上,这时候因为docker中已经存在了这个服务的镜像,所以可以使用
docker ps -a
找到出问题的那个服务,并把最开始的进程号复制下来,将这个进程删除
docker rm 进程号
然后对这个镜像进行重建:
docker-compose up --build 服务名
下面是常用的命令:
#查看某个服务的日志
docker logs 容器id
#查看docker中的镜像信息,比如占用内存和镜像id
docker images
#停止一个镜像容器的运行
docker stop 容器id
#查看某个服务的状态:如nginx
ps -ef | grep nginx
#docker启动redis面板
docker exec -it redis镜像名称 bash
#后台启动本地redis服务,进入redis的文件夹
redis-server redis.conf &
#进入redis
redis-cli
#查看docker的运行状态和信息
systemctl status docker
#停止/重启/启动运行docker
systemctl stop/restart/start docker
#查看端口是否被占用
sudo netstat -lnp | grep :端口号
#杀死进程
kill 进程号