docker如何安全的运行mysql镜像,以防止容器被杀了之后数据不会丢失

为了安全地运行 MySQL 容器并确保数据不会因容器被删除或重启而丢失,需要将 MySQL 的数据存储到 持久化存储 中。通常可以通过以下两种方式实现:


1. 使用 Docker 卷(Volume)持久化数据

Docker 卷是一种将容器内的数据存储到宿主机上的机制,即使容器被删除,数据仍然保留。

步骤:

  1. 创建 Docker 卷

    docker volume create mysql_data
    
  2. 运行 MySQL 容器并挂载卷

    docker run -d \
      --name mysql_container \
      -e MYSQL_ROOT_PASSWORD=your_password \
      -v mysql_data:/var/lib/mysql \
      mysql:latest
    
    • -v mysql_data:/var/lib/mysql:将容器内的 /var/lib/mysql 目录(MySQL 默认数据存储路径)挂载到 Docker 卷 mysql_data
    • -e MYSQL_ROOT_PASSWORD=your_password:设置 MySQL 的 root 用户密码。
  3. 验证数据持久化

    • 停止并删除容器:
      docker stop mysql_container
      docker rm mysql_container
      
    • 重新运行容器并挂载相同的卷:
      docker run -d \
        --name mysql_container_new \
        -e MYSQL_ROOT_PASSWORD=your_password \
        -v mysql_data:/var/lib/mysql \
        mysql:latest
      
    • 数据仍然存在,因为卷中的数据未被删除。
  4. 查看卷信息

    docker volume inspect mysql_data
    

2. 绑定挂载宿主机目录(Bind Mount)

将 MySQL 数据直接存储到宿主机的指定目录中。

步骤:

  1. 创建宿主机目录

    mkdir -p /path/to/mysql_data
    
  2. 运行 MySQL 容器并挂载宿主机目录

    docker run -d \
      --name mysql_container \
      -e MYSQL_ROOT_PASSWORD=your_password \
      -v /path/to/mysql_data:/var/lib/mysql \
      mysql:latest
    
    • -v /path/to/mysql_data:/var/lib/mysql:将容器内的 /var/lib/mysql 目录挂载到宿主机的 /path/to/mysql_data 目录。
  3. 验证数据持久化

    • 停止并删除容器:
      docker stop mysql_container
      docker rm mysql_container
      
    • 重新运行容器并挂载相同的目录:
      docker run -d \
        --name mysql_container_new \
        -e MYSQL_ROOT_PASSWORD=your_password \
        -v /path/to/mysql_data:/var/lib/mysql \
        mysql:latest
      
    • 数据仍然存在,因为数据存储在宿主机的目录中。

3. 其他注意事项

  • 备份数据:即使使用了持久化存储,也建议定期备份 MySQL 数据。

    • 使用 mysqldump 备份:
      docker exec mysql_container mysqldump -u root -p your_database > backup.sql
      
    • 恢复数据:
      cat backup.sql | docker exec -i mysql_container mysql -u root -p your_database
      
  • 设置容器重启策略

    • 使用 --restart 参数设置容器重启策略,避免容器意外退出后无法自动恢复。
      docker run -d \
        --name mysql_container \
        --restart unless-stopped \
        -e MYSQL_ROOT_PASSWORD=your_password \
        -v mysql_data:/var/lib/mysql \
        mysql:latest
      
  • 限制资源使用:避免容器因资源不足被系统杀死。

    • 限制内存和 CPU:
      docker run -d \
        --name mysql_container \
        --memory="512m" \
        --cpus="1" \
        -e MYSQL_ROOT_PASSWORD=your_password \
        -v mysql_data:/var/lib/mysql \
        mysql:latest
      

通过以上方法,可以确保 MySQL 容器在删除或重启后数据不会丢失,同时提高容器的稳定性和安全性。

posted @   PyAj  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示