赞
踩
想在linux服务器上运行微服务项目首先需要将其打包,在本地上也要能运行起来(打包成jar包并用java -jar xx.jar去运行),然后再去添加一些配置文件,放到docker上就可以运行了。具体操作如下:
这是父工程的依赖
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
第二级父工程:
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
-
- <resources>
- <resource>
- <directory>src/main/java</directory>
- <includes>
- <include>**/*.xml</include>
- </includes>
- <filtering>false</filtering>
- </resource>
- </resources>
- </build>

如果是报错说找不到某个公共工具包如commonutil,可以尝试在plugin标签下加:
- <executions>
- <execution>
- <goals>
- <!--可以把依赖的包都打包到生成的Jar包中-->
- <goal>repackage</goal>
- </goals>
- </execution>
- </executions>
如果报错找不到主方法入口或者主菜单,在plugin下加:
- <configuration>
- <!-- 指定该Main Class为全局的唯一入口 -->
- <mainClass>主启动类的相对路径如:com.xx.xx.Main</mainClass>
- <layout>ZIP</layout>
- </configuration>
如果是公共包需要打包,可以在公共包的pom文件下加上:
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
修改配置文件,将本地的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 进程号

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。