1、因为docker部署mysql主节点默认使用的UTC标准时区,所以会导致mysql的时间与实际时间相差8小时,这样docker部署mysql主节点为空的了。
2、这时候就需要输入vetclocaltimeetclocaltime,此方法仅能保证docker容器中的时区与宿主机一致,这样docker部署mysql主节点为空就解决了。
docker pull mysql:5.7
将全部的配置文件和关联的文件夹统一放到 /opt/docker/mysql 中
创建 MySQL 配置文件文件夹
mkdir -p /opt/docker/mysql/conf.d
增加并修改配置文件 config-file.cnf
vim /opt/docker/mysql/conf.d/config-file.cnf
输入如下内容:
创建 MySQL 数据文件夹
mkdir -p /opt/docker/mysql/var/lib/mysql
启动,设置默认密码 root ,TZ 设置容器的默认时区
Windows使用这条:
进入容器
docker exec -it mysql bash
进入 MySQL
mysql -uroot -p
输入刚才我们设置的密码 root
授权
mysql>GRANT ALL ON *.* TO 'root'@'%'
刷新权限
mysql>flush privileges
更新加密规则
mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY 'root' PASSWORD EXPIRE NEVER
更新 root 密码
mysql>ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密码'
刷新权限
mysql>flush privileges
退出容器
exit
启动容器
docker start mysql
停止容器
docker stop mysql
重启容器
docker restart mysql
进入容器
docker exec -it mysql bash
删除容器
docker rm mysql
查看日志
docker logs -f mysql
备份数据
docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p 密码' >/usr/local/all-databases.sql
恢复数据
docker exec -i mysql sh -c 'exec mysql -uroot -p 密码' </usr/local/all-databases.sql
本文以开源项目SpringBlade和Saber为例。
1、创建自定义网络
目的是将用到的服务都放到同一个网络段,以方便互相通信。
docker network create --subnet 172.19.0.0/16 mynetwork
2、Docker安装MySQL、Redis、Nginx
(1)安装MySQL
docker pull mysql:5.7.30
cd ~
mkdir docker/mysql/{conf,logs,data} -p
cd docker/mysql
docker run --name mysql_blade --network=mynetwork --ip=172.19.0.6 -p 3307:3306 -v PWD/logs:/var/log/mysql -v PWD/data:/data:rw -v $PWD/conf/redis.conf:/etc/redis/redis.conf:ro --privileged=true --name redis-6389 -d redis redis-server /etc/redis/redis.conf
(3)安装Nginx
将Saber发布到Nginx中要用到
docker pull nginx
2、Docker打包SpringBlade
3、Docker打包并发布Saber
(1)编写nginx.conf
cd Saber
touch nginx.conf,写入以下内容:
//nginx.conf开始
user root
worker_processes 1
error_log /var/log/nginx/error.log warn
pid/var/run/nginx.pid
events {
worker_connections 1024
}
http {
include /etc/nginx/mime.types
default_type application/octet-stream
}
//nginx.conf结束
(2)修改env.js文件
baseUrl要与下面的SpringBlade容器的地址和端口匹配:
(3)编写Dockerfile
编写dockerfile并将其放到与dist同一目录:
FROM nginx
VOLUME /tmp
ENV LANG en_US.UTF-8
ADD ./dist/ /usr/share/nginx/html/
COPY./nginx.conf /etc/nginx/
EXPOSE 1889
EXPOSE 443
(4)打包并发布
cd ~
mkdir docker/saber/conf -p
cd docker/saber
cp ~/Saber/nginx.conf conf
yarn run build
docker build -t saber:1.0 .(注意最后的.)
docker run -itd --name saber --network=mynetwork --ip=172.19.0.8 -p 1889:1889 -v $PWD/conf:/mnt/ saber:1.0
4、Docker打包并发布SpringBlade
(1)pom.xml配置
/
<docker.repostory>10.10.0.127:10080</docker.repostory>
<docker.registry.name>blade</docker.registry.name>
<docker.image.tag>0.0.1</docker.image.tag>
<docker.maven.plugin.version>1.4.10</docker.maven.plugin.version>
<build>
<finalName>SpringBlade</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>* / .xml</include>
</includes>
</resource>
</resources>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version> {project.build.finalName}</finalName>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version> {project.basedir}</contextDirectory>
<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
<repository> {docker.registry.name}/ {docker.image.tag}</tag>
<buildArgs>
<JAR_FILE>target/ {java.version}</source>
<target>${java.version}</target>
<encoding>UTF-8</encoding>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
(2)yml配置
redis及mysql都要与前面的创建容器时的配置相同:
(3)创建私有仓库(利用Harbor)
在harbor管理界面创建项目blade,下面上传镜像的时候要加入项目路径。
(4)打包
mvn clean install dockerfile:build -Dmaven.test.skip=true
(5)上传到私有仓库
两种方式:
mvn dockerfile:push
或者docker push 10.10.0.127:10080/blade/springblade:0.0.1
然后在Harbor管理后台就可以看到镜像了。
要pull下来的话:
docker pull 10.10.0.127:10080/blade/springblade:0.0.1
(6)发布
cd ~
mkdir docker/blade/app -p
cd docker/blade
docker run -itd --name blade --network=mynetwork --ip=172.19.0.7 -p 9001:9001 -v $PWD/app:/mnt/ 10.10.0.127:10080/blade/springblade:0.0.1
至此,就可以通过localhost:1889来访问Saber了。
另外,我通过uri来区分多租户。例如localhost:1889是管理租户,localhost:1889/test是名为test的租户。这样就避免了在登录界面填写租户id。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)