当前位置:   article > 正文

docker-compose部署微服务项目

docker-compose部署微服务

想在linux服务器上运行微服务项目首先需要将其打包,在本地上也要能运行起来(打包成jar包并用java -jar xx.jar去运行),然后再去添加一些配置文件,放到docker上就可以运行了。具体操作如下:

1.第一步添加plugins打包的依赖

这是父工程的依赖

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.apache.maven.plugins</groupId>
  5. <artifactId>maven-compiler-plugin</artifactId>
  6. </plugin>
  7. </plugins>
  8. </build>

第二级父工程:

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-maven-plugin</artifactId>
  6. </plugin>
  7. </plugins>
  8. <resources>
  9. <resource>
  10. <directory>src/main/java</directory>
  11. <includes>
  12. <include>**/*.xml</include>
  13. </includes>
  14. <filtering>false</filtering>
  15. </resource>
  16. </resources>
  17. </build>

 如果是报错说找不到某个公共工具包如commonutil,可以尝试在plugin标签下加:

  1. <executions>
  2. <execution>
  3. <goals>
  4. <!--可以把依赖的包都打包到生成的Jar包中-->
  5. <goal>repackage</goal>
  6. </goals>
  7. </execution>
  8. </executions>

如果报错找不到主方法入口或者主菜单,在plugin下加:

  1. <configuration>
  2. <!-- 指定该Main Class为全局的唯一入口 -->
  3. <mainClass>主启动类的相对路径如:com.xx.xx.Main</mainClass>
  4. <layout>ZIP</layout>
  5. </configuration>

如果是公共包需要打包,可以在公共包的pom文件下加上:

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.apache.maven.plugins</groupId>
  5. <artifactId>maven-compiler-plugin</artifactId>
  6. </plugin>
  7. </plugins>
  8. </build>

2.第二步,修改每一个yml文件或者properties文件

修改配置文件,将本地的localhost改成线上的服务器的ip地址,包括mysql的数据源配置和redis的主机地址、nacos等等。

3.第三步,clean,package

 打包完成以后可以看到每一个模块下面都有一个target文件夹,点进去发现有一个jar包,有主方法的会有一个.original的包在下面

然后cmd进入这个文件夹用java -jar  xx.jar运行,如果没报错基本上没啥问题。如果能在线上的nacos查看到服务已经注册那就可以了。

4、新建文件夹,将所有的jar包取出来放进去

我新建了一个service文件夹

然后里面嵌套了很多文件夹,因为每一个jar包都要有一个单独的Dockerfile文件和它放到一起

 

 如下:

 有多级的也要分多级存放:

 

5.配置Dockerfile文件和docker-compose.yml文件

接着就是配置每一个jar包配对的Dockerfile文件了

以下是我的模板:

Dockerfile:

  1. FROM openjdk:8-jdk-alpine #拉取镜像
  2. ADD xxxx.jar /xxxx.jar #将这个jar包添加到工作目录
  3. EXPOSE 1111 #服务暴露的端口号
  4. ENTRYPOINT ["java","-jar","/xxxx.jar"] #启动jar包的命令

 然后配置一个总的docker-compose.yml文件,这个文件将作为入口去找到所有的微服务的Dockerfile运行启动命令。

  1. #复制的时候要注意格式,多一个或少一个空格都会导致运行失败
  2. #版本要注意,要留意linux系统的docker-compose的版本是多少,我的是1.29.1
  3. #所以对应的是3.8
  4. version: "3.8"
  5. #下面会创建一个网络
  6. networks:
  7. my-net:
  8. volumes:
  9. data:
  10. services:
  11. #对每一个服务起别名
  12. service-name1:
  13. build:
  14. #docker文件所在路径,相对于当前这个文件的
  15. context: ./service/xxx
  16. dockerfile: Dockerfile
  17. ports:
  18. - "暴露的端口:暴露的端口"#当前服务的端口:想在线上暴露的端口
  19. networks:
  20. - my-net
  21. service-name1:
  22. build:
  23. #docker文件所在路径,相对于当前这个文件的
  24. context: ./service/xxx
  25. dockerfile: Dockerfile
  26. ports:
  27. - "暴露的端口:暴露的端口"#当前服务的端口:想在线上暴露的端口
  28. networks:
  29. - my-net

6.将所有文件(我这里是最外层的serivce)扔到服务器上

 7.安装docker和docker-compose以及拉取需要的服务

安装docker前:

        安装yum工具:

  1. yum install -y yum-utils \
  2. device-mapper-persistent-data \
  3. lvm2 --skip-broken

        更新本地镜像源:

  1. # 设置docker镜像源
  2. yum-config-manager \
  3. --add-repo \
  4. https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  5. sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
  6. yum makecache fast

安装docker:

yum install -y docker-ce

启动前一定要关闭防火墙

  1. # 关闭
  2. systemctl stop firewalld
  3. # 禁止开机启动防火墙
  4. systemctl disable firewalld
  5. #查看是否关闭防火墙
  6. 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

拉取需要使用的mysql8和nacos(我自己拉下来的nacos用不了,如果你也是,那建议自己去下载,不要用docker拉)

redis、nginx以及其他的一些服务都可以拉取,可以上网自己搜,我这边就不呈现了

  1. docker pull mysql
  2. docker pull nacos/nacos-server

拉取完以后启动mysql和nacos

  1. #启动mysql
  2. docker run -it --name mysql8 -e MYSQL-ROOT_PASSWORD=密码 -p 3306:3306 --network my-net --network-alias mysql-net --restart=always -d mysql
  3. #启动nacos,启动前记得先把nacos的数据库弄到linux上的数据库里面
  4. docker run -it --name nacos2 \
  5. -e JVM_XMS=256m -e JVM_XMX=256m -e MODE=standalone \
  6. -e SPRING_DATASOURCE_PLATFROM=mysql -e MYSQL_SERVICE_HOST=主机ip \
  7. -e NACOS_AUTH_IDENTITY_KEY=my-identity-key \
  8. -e MYSQL_SERVICE_PORT=3306 \
  9. -e MYSQL_SERVICE_USER=root \
  10. -e MYSQL_SERVICE_PASSWORD=数据库密码 \
  11. -e MYSQL_SERVICE_DB_NAME=nacos的配置数据库 \
  12. -p 8848:8848 -p 9848:9848 -d nacos/nacos-server \
  13. --restart=always

启动成功以后用docker ps -a可以看到docker容器中有mysql 和nacos的服务。

mysql:

使用docker exec -it mysql8 bash可以进入mysql登录面板:

然后输入mysql -u root -p和密码即可登录

nacos:

先去把这个文件执行到上面的mysql里面

 

 

进入到/usr/nacos/nacos/bin目录,对startup.sh文件添加java环境;

然后对下面这个文件执行启动命令:./startup.sh -m standalone以单机的模式启动。

 

尝试去访问http:ip:8848/nacos如果能进去那说明nacos启动成功。 

安装docker-compose

  1. #github镜像
  2. 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
  3. #国内镜像
  4. 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

 8、启动所有服务

首先cd到刚刚上传到linux的项目文件夹,必须进到有docker-compose.yml文件的文件夹

 执行

  1. #启动所有的service
  2. docker-compose up -d
  3. #启动单个service
  4. docker-compose up -d canal

 如果是第一次启动项目会自动去下载依赖和构建项目,且一个个去运行。然后就可以看到docker中存在的服务

然后再去访问自己的后端的接口,如果能访问成功就说明部署成功。不访问成功建议先去本地跑一遍报错的那些服务,看看本地会不会报错,如果本地也报错那在本地调试好后在重新把对应服务的jar包拉到服务器上,这时候因为docker中已经存在了这个服务的镜像,所以可以使用

docker ps -a

 找到出问题的那个服务,并把最开始的进程号复制下来,将这个进程删除

docker rm 进程号

然后对这个镜像进行重建:

docker-compose up --build 服务名

下面是常用的命令:

  1. #查看某个服务的日志
  2. docker logs 容器id
  3. #查看docker中的镜像信息,比如占用内存和镜像id
  4. docker images
  5. #停止一个镜像容器的运行
  6. docker stop 容器id
  7. #查看某个服务的状态:如nginx
  8. ps -ef | grep nginx
  9. #docker启动redis面板
  10. docker exec -it redis镜像名称 bash
  11. #后台启动本地redis服务,进入redis的文件夹
  12. redis-server redis.conf &
  13. #进入redis
  14. redis-cli
  15. #查看docker的运行状态和信息
  16. systemctl status docker
  17. #停止/重启/启动运行docker
  18. systemctl stop/restart/start docker
  19. #查看端口是否被占用
  20. sudo netstat -lnp | grep :端口号
  21. #杀死进程
  22. kill 进程号

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/218328
推荐阅读
相关标签
  

闽ICP备14008679号