当前位置: 首页 > news >正文

【Docker】windows本地docker使用compose编排容器化部署mysql

准备在windows本地docker容器里跑个mysql,因为没有源拉取镜像,遂从已有mysql镜像的服务器打包到本地安装

打包已有镜像

查看服务器中mysql的docker镜像列表:

$ docker images | grep mysql
mysql        8.0.39           f5da8fc4b539   7 months ago    573MB

打包镜像

$ docker save -o mysql-8.0.39.tar mysql:8.0.39

把镜像下载到本地,使用scp命令或用FTP图形软件

导入镜像

回到windows打开Powershell,导入镜像:

# 导入镜像
docker load -i E:\DockerDesktop\mysql-8.0.39.tar  

# 查看导入结果
docker images

补充一个linux服务器导入镜像的方式:

# 先上传mysql-8.0.39.tar到linux服务器,scp命令或ftp软件(此处省略)
# 或者直接从镜像源下载一个(当前在/root/mysql路径中)
wget https://mirrors.aliyun.com/mysql/MySQL-8.0/mysql-8.0.27.tar.gz
# 然后load,注意linux路径与windows的差异
docker load -i /root/mysql/mysql-8.0.27.tar 

启动容器

写了一个docker-compose.yaml文件来快速启动:

version: '3'

services:
	mysql:
    image: mysql:8.0.39
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: root   #root用户密码,必须
      TZ: Asia/Shanghai	# 容器时区设置,建议,其必要性见文章末尾
      MYSQL_DATABASE: mydatabase  #可选
      MYSQL_USER: myuser          #可选
      MYSQL_PASSWORD: mypassword  #可选
    ports:
      - "3406:3306" # 将本地端口 3406 映射到容器的 3306 端口
    volumes:
      - //e/DockerDesktop/volumes/mysql8/mysql-data:/var/lib/mysql  # 把容器里/var/lib/mysql绑定挂载到 Windows E盘路径
    restart: always # 容器重启时自动启动

应用compose文件(默认命名docker-compose.yaml):

docker-compose up -d

当compose文件并非默认命名时,需要指定文件启动:

docker-compose -f docker-mysql8-compose.yaml up -d
# -f: 或--file,参数后指定compose文件。单条命令可以用多个-f指定多个文件

此外,单个compose文件可声明多个服务,若要指定启动某个服务:

docker-compose -f docker-mysql8-compose.yaml up -d mysql8
# 将仅启动docker-mysql8-compose.yaml文件中定义的名为mysql8的服务

验证容器已启动:

docker ps

连接mysql

宿主机连接容器mysql服务:

# 注意端口号是对外映射的端口号
mysql -h 127.0.0.1 -P 3406 -u root -p

其他命令

宿主机连接docker容器终端:

docker exec -it mysql8 bash
  • mysql8 是容器名称

在容器内连接 MySQL:

mysql -u root -p

时区异常问题

数据表定义了current_timestamp类型的字段,发现插入数据的时间与宿主机时间并不一致,因为未给容器设置时间

  1. 进入容器

    docker exec -it mysql8 bash
    
  2. 查看容器内时间

    date
    # Thu Feb  6 11:40:16 CST 2025这是输出
    
  3. 使用下面命令修改容器时区为中国上海

    ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone
    
  4. 重启容器,mysql会自动更新历史数据,无需手动更新数据时间!

永久解决该问题,在docker-compose.yaml文件里应该把时区定义为环境变量:

services:
	mysql:
    image: mysql:8.0.39
    container_name: mysql8
    environment:
      MYSQL_ROOT_PASSWORD: root   #root用户密码,必须
      TZ: Asia/Shanghai

相关文章:

  • 机器学习之KMeans算法
  • atop命令介绍(全面资源监控:同时监控CPU、内存、磁盘、网络和进程活动)性能监控、资源数据
  • 基于MySQL的创建Java实体Bean和TypeScript实体Bean
  • DeepSeek-R1深度解读
  • Vue + CSS实现渐变栅格进度条
  • 【机器学习】强化学习
  • 鬼泣:动作系统3
  • 服装零售行业数字化时代的业务与IT转型规划P111(111页PPT)(文末有下载方式)
  • springmvc中使用interceptor拦截
  • PyTorch使用(2)-张量数值计算
  • mysql解析器和优化器
  • Solana笔记案例:写一个SOL转账程序
  • DeepSeek写打台球手机小游戏
  • 后端接口开发完成后,接口地址访问不到提示404,Spring项目的包结构错误
  • [特殊字符]1.2.1 新型基础设施建设
  • 手搓聊天室1.0.0----基于ws和protobuf协议
  • git 查看某个函数的所有提交日志
  • 友思特应用 | 行业首创:基于深度学习视觉平台的AI驱动轮胎检测自动化
  • Linux安装Elasticsearch集群-----docker安装es集群
  • FastJson:JSON JSONObject JSONArray详解以及SimplePropertyPreFilter 的介绍
  • 戴昕谈隐私、数据、声誉与法律现实主义
  • 理想汽车副总裁刘杰:不要被竞争牵着鼻子走,也不迷信护城河
  • 新闻1+1丨应对外部冲击,中央政治局会议释放哪些信号?
  • 邮轮、无人机、水上运动……上海多区推动文旅商体展融合发展
  • 国防部:“台独”武装摆练纯属搞心理安慰,怎么演都是溃败的死局
  • 2025一季度,上海有两把刷子