docker 前后端配置
一.服务器环境
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/dockerd
为ExecStart=/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