GVKun编程网logo

docker 重启 redis、mysql 数据丢失的解决方法(docker重启后数据丢失)

16

对于想了解docker重启redis、mysql数据丢失的解决方法的读者,本文将提供新的信息,我们将详细介绍docker重启后数据丢失,并且为您提供关于CentOS7中Docker安装tomcat、r

对于想了解docker 重启 redis、mysql 数据丢失的解决方法的读者,本文将提供新的信息,我们将详细介绍docker重启后数据丢失,并且为您提供关于CentOS7中Docker安装tomcat、redis、mysql 8.0、docker springboot 集成 redis、mysql 应用部署、docker 入坑 4 搭建 mongoldb、redis、mysql、docker 入坑4 搭建mongoldb、redis、mysql的有价值信息。

本文目录一览:

docker 重启 redis、mysql 数据丢失的解决方法(docker重启后数据丢失)

docker 重启 redis、mysql 数据丢失的解决方法(docker重启后数据丢失)

官方文档:

所以 mysql 应如下启动:

docker run --name mysql -p 3306:3306 -d -e MYSQL_ROOT_PASSWORD=密码 -v /windows盘符/指定的文件夹路径:/var/lib/mysql    mysql --sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION --lower_case_table_names=1

redis:

docker run -p 6379:6379 -d  -v /windows盘符/指定的文件夹路径:/data    redis:5.0 redis-server --requirepass ''redis密码'' --appendonly yes

多看官方文档,里面有详细的说明 

CentOS7中Docker安装tomcat、redis、mysql 8.0

CentOS7中Docker安装tomcat、redis、mysql 8.0

一、CentOS7安装Docker

1、检查内核版本,必须是3.10及以上

[root@iz2zeizzt8ihoeoyopzzyhz ~]# uname -r
3.10.0-514.26.2.el7.x86_64

2、使用 yum install docker进行安装

[root@iz2zeizzt8ihoeoyopzzyhz ~]#yum install docker

下载确认后出现Complete!则表示成功

3、启动docker

[root@iz2zeizzt8ihoeoyopzzyhz ~]# systemctl start docker

4、查看docker版本

[root@iz2zeizzt8ihoeoyopzzyhz ~]# docker -v
Docker version 1.13.1, build 94f4240/1.13.1

5、开机启动docker

[root@iz2zeizzt8ihoeoyopzzyhz ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

二、Docker安装tomcat并部署war工程

1、拉取tomcat镜像

可以在https://hub.docker.com/r/library/tomcat/ 进行搜索(不指定版本默认安装最新版)

2、安装tomcat

[root@iz2zeizzt8ihoeoyopzzyhz ~]# docker pull tomcat

3、查看所有镜像

[root@iz2zeizzt8ihoeoyopzzyhz ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/tomcat    latest              56219f61066f        51 minutes ago      463 MB

4、启动tomcat

[root@iz2zeizzt8ihoeoyopzzyhz ~]# docker run --name tomcat8080 -d -p 8080:8080 tomcat 
a3d4f36dca9865619b48c325c06f5147c92230e369051a60e82fb461eb6f1e20

--name :给容器命名

-d : 后台运行

-p:端口映射

5、查看运行的tomcat

[root@iz2zeizzt8ihoeoyopzzyhz ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
a3d4f36dca98        tomcat              "catalina.sh run"   5 seconds ago       Up 4 seconds        0.0.0.0:8080->8080/tcp   tomcat8080

然后在浏览器输入 ip:8080可访问默认的tomcat界面

6、部署war工程

首先上传war包到服务器,比如我上传到/home路径下

[root@iz2zeizzt8ihoeoyopzzyhz ~]# ll
total 212532
-rw-r--r-- 1 root root  17231526 Nov 22  2017 admin-controller.war

7、将war包复制到docker容器的tomcat中

可以参考以下两篇博文:

https://blog.csdn.net/qq_32351227/article/details/78673591

https://blog.csdn.net/leafage_m/article/details/72082011

具体我的操作如下:

获取长长的那个ID(tomcat8080是我启动的tomcat起的名字)

[root@iz2zeizzt8ihoeoyopzzyhz ~]# docker inspect -f ''{{.Id}}'' tomcat8080
a3d4f36dca9865619b48c325c06f5147c92230e369051a60e82fb461eb6f1e20

查看容器中tomcat地址(a3d4f36dca98是tomcat的id)

[root@iz2zeizzt8ihoeoyopzzyhz ~]# docker  exec -it  a3d4f36dca98   /bin/bash
root@a3d4f36dca98:/usr/local/tomcat# 

将tomcat中webapps下的默认文件都删除

root@a3d4f36dca98:/usr/local/tomcat# cd webapps/
root@a3d4f36dca98:/usr/local/tomcat/webapps# 
root@a3d4f36dca98:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager   ----这些文件都删掉
root@a3d4f36dca98:/usr/local/tomcat/webapps# 

将war包cp进tomcat的webapps路径下(docker cp 本地文件路径 ID全称:容器路径)

[root@iz2zeizzt8ihoeoyopzzyhz ~]# docker cp admin-controller.war a3d4f36dca9865619b48c325c06f5147c92230e369051a60e82fb461eb6f1e20:/usr/local/tomcat/webapps/admin-controller.war

restart下就能访问部署的项目了

三、Docker安装redis

1、拉取redis镜像(推荐使用Docker中国的镜像加速)

[root@iz2zeizzt8ihoeoyopzzyhz ~]# docker pull registry.docker-cn.com/library/redis

2.启动redis

[root@iz2zeizzt8ihoeoyopzzyhz ~]# docker run -d -p 6379:6379 --name redis6379 bfcb1f6df2db

然后就可以使用redis客户端工具RedisDesktopManage本地进行操作了

四、Docker安装mysql 8

1、拉取mysql镜像

[root@iz2zeizzt8ihoeoyopzzyhz ~]# docker pull mysql

2.启动mysql

[root@iz2zeizzt8ihoeoyopzzyhz ~]# docker run -p 3309:3306 --name mysql3309 -e MYSQL_ROOT_PASSWORD=root -d mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

连接客户端会出现问题:本地连接不上

解决:

#Docker-mysql8.0客户端无法连接
 
进入容器bash并进入mysql命令行
docker exec -it mysql3306 bash
root@eb3dbfb0958f:/# mysql -uroot -p  
Enter password:   
Welcome to the MySQL monitor.  Commands end with ; or \g.  
…   
mysql>
//使用mysql数据库
mysql>use mysql
   
//修改数据库
mysql> ALTER USER ''root''@''%'' IDENTIFIED WITH mysql_native_password BY ''root'';
 
//重新修改密码后可连接成功
mysql> alter  user ''root''@''%'' identified by ''root'';
 
//刷新数据库
mysql> flush privileges;

然后本地就能连接成功了。

docker springboot 集成 redis、mysql 应用部署

docker springboot 集成 redis、mysql 应用部署

  • 使用 docker 安装 redis

查找镜像:docker search redis

拉取 redis 镜像:docker pull redis

查找本地的镜像:docker images redis

  1. 默认无密码执行命令
redis的基础上run一个容器:docker run -d -p 6379:6379 [imageid]  执行成功,返回容器id

2. 密码版

docker run -d --name redis -p 6379:6379 redis --requirepass 123456
参数解释:-d是在后端执行,-p 6379:6379 指定端口,前面一个是宿主机暴露端口,后面一个是容器端口

3. redis 客户端连接命令:docker exec -it 0b63b7eacc29 redis-cli

  • mysql 的安装步骤同上,在容器创建的时候,脚本修改:
docker run -p 3306:3306 --name mysql -v /root/docker/mysql/conf:/etc/mysql/conf.d 
-v /root/docker/mysql/logs:/logs -v /root/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
-p 指定端口 --name 指定容器名称 -v 映射配置,前面是宿主机目录,后面是容器中的位置  -e MYSQL_ROOT_PASSWORD=123456  设置 root 用户和密码
  • 最后启动打包发布应用   

Dockerfile

# 基础镜像使用Java
FROM java:8
# 作者
MAINTAINER Bruce Shaw
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
RUN mkdir /pm/
# 拷贝当前下面的所有lib到docker下面temp
ARG JAR_FILE=/target/*.jar
ADD ${JAR_FILE} /pm/
# 容器入口点,在指定容器启动程序及参数
ENTRYPOINT ["java", "-cp", "/pm/*", "com.you.PmWebApplication"]
# 指定容器需要映射到主机的端口
EXPOSE 8010

创建镜像

docker build -f Dockerfile .

启动项目

docker run -d -p 8010:8010 -p 8085:8085 --link mysql:mysql --link redis:redis [imageId] --name pm

-d 后台启动  -p 指定端口 可以多个成组 --link 连接宿主的 mysql 和容器内部的 mysql;redis 同理 --name pm 指定容器名称

docker 查看日志

docker logs [containId] -f

-f 参数 可以查看实时的日志

docker 入坑 4 搭建 mongoldb、redis、mysql

docker 入坑 4 搭建 mongoldb、redis、mysql

搭建 mongodb

$ docker run --name mongo -it -d -p 27017:27017 -v ~/docker-data/mongo:/data/db -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=123456 mongo
$ docker exec -it mongo /bin/bash
# mongo -u admin -p 123456

 然后我们添加一个用户:

db.createUser({
    {
        user: "spring",
        pwd: "123456",
        roles: [
            role: "readWrite", db: "demo"
        ]
    }
})

在 java 的配置文件:

spring.data.mongodb.uri=mongodb://spring:123456@localhost:27017/demo

 

搭建 redis

$ docker run --name redis-server -it -d -p 6379:6379 -v ~/docker-data/redis:/data/db redis redis-server --appendonly yes
$ docker exec -it redis-server redis-cli

 

搭建 mysql

1、拉取官方镜像(我们这里选择 5.7,如果不写后面的版本号则会自动拉取最新版)

docker pull mysql:5.7   # 拉取 mysql 5.7
docker pull mysql       # 拉取最新版mysql镜像

2、一般来说数据库容器不需要建立目录映射

sudo docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
  • –name:容器名,此处命名为 mysql
  • -e:配置信息,此处配置 mysql 的 root 用户的登陆密码
  • -p:端口映射,此处映射 主机 3306 端口 到 容器的 3306 端口
  • -d:源镜像名,此处为 mysql:5.7

3、如果要建立目录映射

duso docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
  • -v:主机和容器的目录映射关系,":" 前为主机目录,之后为容器目录

4、连接 mysql

sudo docker exec -it mysql /bin/bash
mysql -uroot -p123456

 

 

5、使用 java 的 jdbc 测试

 1 import java.sql.*;
 2 
 3 public class JdbcTest {
 4     public static void main(String[] args) {
 5         Connection connection = null;
 6         PreparedStatement preparedStatement = null;
 7         ResultSet resultSet = null;
 8         try
 9         {
10             //加载数据驱动
11             Class.forName("com.mysql.jdbc.Driver");
12             //通过驱动管理类获取数据库连接
13             connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8","root","123456");
14             System.out.println("创建数据库连接成功");
15             //定义sql语句?表示占位符
16             String sql = "select * from user where username = ?";
17             //获取预处理statement
18             preparedStatement = connection.prepareStatement(sql);
19             //设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
20             preparedStatement.setString(1,"zhangsan");
21             //向数据库发出sql查询,查询出结果集
22             resultSet = preparedStatement.executeQuery();
23             //遍历查找结果集
24             while (resultSet.next()){
25                 System.out.println(resultSet.getString("id") + ""
26                 + resultSet.getString("username"));
27             }
28         } catch (Exception e) {
29             e.printStackTrace();
30         }finally {
31             //释放资源
32             if(resultSet != null){
33                 try{
34                     preparedStatement.close();
35                 }catch (SQLException e){
36                     e.printStackTrace();
37                 }
38             }
39             if(connection != null){
40                 try{
41                     connection.close();
42                 }catch (SQLException e){
43                     e.printStackTrace();
44                 }
45             }
46         }
47     }
48 }

 5、数据库:

 6、驱动

 mysql-connector-java-5.1.36

7、在 idea 中添加 lib 文件夹,在文件夹 lib 中添加驱动的 jar 包,然后

 

 

下面的方式待验证:

1、在宿主机上创建 /mysql/data 和 /mysql/conf

2、docker run --name mysql -d --rm -v /home/mantishell/mysql/conf:/etc/mysql/conf.d -v /home/mantishell/mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

3、ALTER USER ''root''@''%'' IDENTIFIED WITH mysql_native_password BY ''123456'';

 

docker 入坑4 搭建mongoldb、redis、mysql

docker 入坑4 搭建mongoldb、redis、mysql

搭建mongodb

$ docker run --name mongo -it -d -p 27017:27017 -v ~/docker-data/mongo:/data/db -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=123456 mongo
$ docker exec -it mongo /bin/bash
# mongo -u admin -p 123456

 然后我们添加一个用户:

db.createUser({
    {
        user: "spring",
        pwd: "123456",
        roles: [
            role: "readWrite", db: "demo"
        ]
    }
})

在java的配置文件:

spring.data.mongodb.uri=mongodb://spring:123456@localhost:27017/demo

 

搭建redis

$ docker run --name redis-server -it -d -p 6379:6379 -v ~/docker-data/redis:/data/db redis redis-server --appendonly yes
$ docker exec -it redis-server redis-cli

 

搭建mysql

1、拉取官方镜像(我们这里选择5.7,如果不写后面的版本号则会自动拉取最新版)

docker pull mysql:5.7   # 拉取 mysql 5.7
docker pull mysql       # 拉取最新版mysql镜像

2、一般来说数据库容器不需要建立目录映射

sudo docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
  • –name:容器名,此处命名为mysql
  • -e:配置信息,此处配置mysql的root用户的登陆密码
  • -p:端口映射,此处映射 主机3306端口 到 容器的3306端口
  • -d:源镜像名,此处为 mysql:5.7

3、如果要建立目录映射

duso docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
  • -v:主机和容器的目录映射关系,":"前为主机目录,之后为容器目录

4、连接mysql

sudo docker exec -it mysql /bin/bash
mysql -uroot -p123456

 

 

5、使用java的jdbc测试

 1 import java.sql.*;
 2 
 3 public class JdbcTest {
 4     public static void main(String[] args) {
 5         Connection connection = null;
 6         PreparedStatement preparedStatement = null;
 7         ResultSet resultSet = null;
 8         try
 9         {
10             //加载数据驱动
11             Class.forName("com.mysql.jdbc.Driver");
12             //通过驱动管理类获取数据库连接
13             connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8","root","123456");
14             System.out.println("创建数据库连接成功");
15             //定义sql语句?表示占位符
16             String sql = "select * from user where username = ?";
17             //获取预处理statement
18             preparedStatement = connection.prepareStatement(sql);
19             //设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
20             preparedStatement.setString(1,"zhangsan");
21             //向数据库发出sql查询,查询出结果集
22             resultSet = preparedStatement.executeQuery();
23             //遍历查找结果集
24             while (resultSet.next()){
25                 System.out.println(resultSet.getString("id") + ""
26                 + resultSet.getString("username"));
27             }
28         } catch (Exception e) {
29             e.printStackTrace();
30         }finally {
31             //释放资源
32             if(resultSet != null){
33                 try{
34                     preparedStatement.close();
35                 }catch (SQLException e){
36                     e.printStackTrace();
37                 }
38             }
39             if(connection != null){
40                 try{
41                     connection.close();
42                 }catch (SQLException e){
43                     e.printStackTrace();
44                 }
45             }
46         }
47     }
48 }

 5、数据库:

 6、驱动

 mysql-connector-java-5.1.36

7、在idea中添加lib文件夹,在文件夹lib中添加驱动的jar包,然后

 

 

下面的方式待验证:

1、在宿主机上创建/mysql/data和/mysql/conf

2、docker run --name mysql -d --rm -v /home/mantishell/mysql/conf:/etc/mysql/conf.d -v /home/mantishell/mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

3、ALTER USER ''root''@''%'' IDENTIFIED WITH mysql_native_password BY ''123456'';

 

我们今天的关于docker 重启 redis、mysql 数据丢失的解决方法docker重启后数据丢失的分享就到这里,谢谢您的阅读,如果想了解更多关于CentOS7中Docker安装tomcat、redis、mysql 8.0、docker springboot 集成 redis、mysql 应用部署、docker 入坑 4 搭建 mongoldb、redis、mysql、docker 入坑4 搭建mongoldb、redis、mysql的相关信息,可以在本站进行搜索。

本文标签: