docker-compose部署微服务项目

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

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

这是父工程的依赖

docker-compose部署微服务项目_第1张图片

    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
            
        
    

第二级父工程:

docker-compose部署微服务项目_第2张图片

   
        
            
                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
        
    

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

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

docker-compose部署微服务项目_第3张图片

3.第三步,clean,package

docker-compose部署微服务项目_第4张图片

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

docker-compose部署微服务项目_第5张图片

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

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

我新建了一个service文件夹

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

 docker-compose部署微服务项目_第6张图片

 如下:

docker-compose部署微服务项目_第7张图片

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

docker-compose部署微服务项目_第8张图片

 docker-compose部署微服务项目_第9张图片

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

接着就是配置每一个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
        

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

docker-compose部署微服务项目_第10张图片

docker-compose部署微服务项目_第11张图片

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

安装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-compose部署微服务项目_第12张图片

下一步,创建一个网络:

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以及其他的一些服务都可以拉取,可以上网自己搜,我这边就不呈现了

docker pull mysql

docker pull nacos/nacos-server

拉取完以后启动mysql和nacos

#启动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的服务。

mysql:

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

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

nacos:

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

docker-compose部署微服务项目_第13张图片 

 

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

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

docker-compose部署微服务项目_第14张图片

docker-compose部署微服务项目_第15张图片 

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

安装docker-compose

#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

 8、启动所有服务

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

docker-compose部署微服务项目_第16张图片

 执行

#启动所有的service
docker-compose up -d

#启动单个service
docker-compose up -d canal

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

docker-compose部署微服务项目_第17张图片

然后再去访问自己的后端的接口,如果能访问成功就说明部署成功。不访问成功建议先去本地跑一遍报错的那些服务,看看本地会不会报错,如果本地也报错那在本地调试好后在重新把对应服务的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 进程号

你可能感兴趣的:(腾讯云部署微服务——后端部署,docker,微服务,linux,java,maven)