docker配置前后端部署 配置springboot + vue +nginx+mysql8主从库

一.服务器环境

1.基本环境

开发环境:idea

前后端服务器:centosos7 (0.132)

master数据库服务器:centosos7(0.176)

slave数据库服务器:windos(0.162)

docker-compose安装

2.安装docker-compose

2.1 linux 安装docker-compose

安装

curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

授权

chmod +x /usr/local/bin/docker-compose

查看版本

docker-compose version
2.2 windos安装docker-compoe

https://github.com/docker/compose/releases/download/1.29.1/docker-compose-Windows-x86_64.exe.sha256

放到指定位置即可

3.Docker安装

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start

二.idea自动部署docker

1 docker开启远程连接访问

1.1修改docker.service文件,添加监听2375端口

路径 /usr/lib/systemd/system/docker.service

开发文件

vi /usr/lib/systemd/system/docker.service

添加 ExecStart= 修改ExecStart=/usr/bin/dockerdExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375

ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375
1.2.重启docker
systemctl daemon-reload
systemctl start docker
1.3.开发防火墙端口
# 开放80端口
firewall-cmd --permanent --add-port=2375/tcp
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

2.部署

2.1、Dockerfile部署
1.在File --> Settings --> Plugins 在输入框中搜索Docker,选择并安装。安装完成后重启Docker

在这里插入图片描述

2.配置idea

打开File–> Settings–>Build,Execution,Deployment或者在设置搜索框直接搜索docker

在这里插入图片描述

新增docker配置

3.pom.xml配置

添加docker plugin

<plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <!--将插件绑定在某个phase执行-->
                <executions>
                    <execution>
                        <id>build-image</id>
                        <!--用户只需执行mvn package ,就会自动执行mvn docker:build-->
                        <phase>install</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <imageName>jack/${project.artifactId}</imageName>
                    <dockerDirectory>${project.basedir}/</dockerDirectory>
                    <imageTags>
                        <imageTag>latest</imageTag>
                    </imageTags>
                    <!--指定远程 docker api地址-->
                    <dockerHost>http://127.0.0.1:2375</dockerHost>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
4.添加Dockerfile
<dockerDirectory>${project.basedir}/</dockerDirectory>

因为我在上面指定了docker文件的目录是项目的根目录则添加Dockerfile也要放在根目录下。

FROM java:8
EXPOSE 9091

VOLUME /tmp
ADD njp-api.jar /app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","/app.jar"]
5.maven install 部署镜像

Run 控制台输出如下

在这里插入图片描述

service 中docker下出现镜像

在这里插入图片描述

创建容器

在这里插入图片描述

在这里插入图片描述

2.2、docker-compose 部署
2.2.1.配置docker-compose.yml

位置在根目录下

在这里插入图片描述

version: '2'
services:
#使用到 xjar加密首选创建golang镜像
  golang:
#    指定dockerfile文件位置
    build: .
#    指定容器名称
    container_name: golang
    tty: true
#项目启动的容器
  njp-plus-sbm-api:
    #指定dockerfile文件位置
    build:
      context: ./njp-plus-sbm-api
    restart: always
    container_name: njp-plus-sbm-api-test
    image: njp/njp-plus-sbm
    volumes:
      - /opt/docker:/GO
#    这里依赖golang当golang启动过后才创建njp-plus-sbm-api
    depends_on:
      - golang
    ports:
    - "9091:9091"
#  环境配置
    environment:
    - spring.profiles.active=test

2.2.2 Dockerfile配置

golang:位置也在根目录下

FROM golang:1.9-alpine as builder
#指定工作路径
WORKDIR  /go/src
#从本地拷贝xjar.go 到容器
COPY njp-plus-sbm-api/target/xJarDir/xjar.go .
#执行build 放在/go/src下
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o Xjar

启动项目镜像Dockerfile

FROM java:8
EXPOSE 9091

#维护人的信息
MAINTAINER The njp-plus Project <im@taoyalong.cn>

#创建mul
VOLUME /NJP
#将本地资源放到容器中
ADD target/xJarDir/njp-plus-sbm-api.jar /app.jar
#从20210918_golang:latest容器拷贝到当前容器
COPY --from=20210918_golang:latest /go/src/Xjar /NJP/xjar
#修改时间为当前时间 我也不懂干什么
RUN bash -c 'touch /app.jar'
#启动 项目
CMD nohup /NJP/xjar java -Xms256m -Xmx1024m -jar /app.jar
2.2.3 部署
1.windos 启动
D:\software\docker-compose-windows-x86_64.exe --host "tcp://127.0.0.1:2375" up -d

--host "服务器docker的开放地址"

2.在linux启动
docker-compose up -d

3.成功后的容器

在这里插入图片描述

三.开放防火墙端口9091

# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp

#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

# 参数解释
1、firwall-cmd:是Linux提供的操作firewall的一个工具;
2、--permanent:表示设置为持久;
3、--add-port:标识添加的端口;

四.Docker配置mysql 主从库

4.1.安装master mysql

  • 创建mysql工作目录,用于挂载数据和配置文件
#mkdir /opt/mysql
  • 启动一个未挂载容器
docker run -d -p 3306:3306 --name tempmysql -e MYSQL_ROOT_PASSWORD=123456 mysql
  • 进入容器拷贝需要挂载的目录
docker exec -it tempmysql /bin/bash
docker cp tempmysql:/etc/mysql /opt/mysql

在这里插入图片描述

  • 配置my.cnf内容

在最顶端添加以下内容

 [mysqld]
##########################
# log bin
##########################
server-id = 100				#必须唯一
log_bin = mysql-bin 		#开启及设置二进制日志文件名称
binlog_format = MIXED
sync_binlog = 1
expire_logs_days =7			#二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。

#binlog_cache_size = 128m
#max_binlog_cache_size = 512m
#max_binlog_size = 256M

binlog-do-db = test 		#要同步的数据库 ,不指定则排除不需要同步的全部同步

binlog-ignore-db = mysql 	#不需要同步的数据库 
binlog_ignore_db = information_schema
binlog_ignore_db = performation_schema
binlog_ignore_db = sys
  • 重新启动挂载的容器
docker run --name mysqlserver -p 3306:3306 --restart=always -e MYSQL_ROOT_PASSWORD=123456 -v /opt/mysql:/etc/mysql     -d mysql:8.0.19 --lower-case-table-names=1

--lower-case-table-names=1 指定大小写不敏感,必须在这里才能生效

  • 查看mysql是否运行成功
docker ps 

在这里插入图片描述

  • 查看大小写是否敏感
 docker exec -it mysqlserver /bin/bash
 mysql -u root -p
 输入密码进入
 show variables like "low%";

可以看到已经开启了

在这里插入图片描述

  • 查看log-bin是否开启
 docker exec -it mysqlserver /bin/bash
 mysql -u root -p
 输入密码进入
 show master status;

在这里插入图片描述

  • 授权slave角色
CREATE USER 'slaves'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* to 'slave'@'%';
flush privileges;
show grants for slaves;

在这里插入图片描述

4.2 配置slave服务器

和主库安装启动的方式是相同的

只是配置文件不同

[mysqld]
server-id=200 #设置主服务器的ID,可以任意配置但是多个主从之间不能重复

#binlog日志文件名(可以任意命名)
log-bin=mysql-bin
relay-log = mysql-relay-bin
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%

  • 通过查看master状态 获得mysql-bin.000003 position:155

在这里插入图片描述

  • 添加主库同步配置
change master to 
master_host='服务器地址',
MASTER_user='账户名',
master_password='密码',
-- 从上面得到
master_log_file='mysql-bin.000003',
-- 从上面得到position:155
master_log_pos=155,
master_port=3307,
MASTER_RETRY_COUNT = 60,
MASTER_HEARTBEAT_PERIOD = 10000;
  • 启动 slave
start slave;
  • 如果配置失败则先 关闭然后重置
stop slave;
RESET SLAVE;
  • 启动成功查看
show slave status;

在这里插入图片描述

Slave_IO_State :Wait for…

Slave_IO_Running:Yes

Slave_SQL_Running:Yes

r_password=‘密码’,
– 从上面得到
master_log_file=‘mysql-bin.000003’,
– 从上面得到position:155
master_log_pos=155,
master_port=3307,
MASTER_RETRY_COUNT = 60,
MASTER_HEARTBEAT_PERIOD = 10000;


- 启动 slave

```sql
start slave;
  • 如果配置失败则先 关闭然后重置
stop slave;
RESET SLAVE;
  • 启动成功查看
show slave status;

在这里插入图片描述

Slave_IO_State :Wait for…

Slave_IO_Running:Yes

Slave_SQL_Running:Yes

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值