文章目录

  • Docker构建MySQL镜像并初始化
    • Dockerfile 的一些常用语法
      • FROM
      • RUN
      • CMD
      • ENV
      • COPY
      • ADD
      • WORKDIR
      • EXPOSE
    • 构建自带初始化的 MySQL 镜像
      • Dockerfile
      • 启动脚本
      • schema.sql
      • privileges.sql

Docker构建MySQL镜像并初始化

使用 docker 直接 pull MySQL 的镜像是很简单,但是有时候却需要对容器做一些初始化操作,比如挂载配置文件和初始化数据库等,这些就需要通过巧妙利用 Dockerfile 来实现。

Dockerfile 的一些常用语法

docker 可以通过 Dockerfile 构建新的镜像,掌握 Dockerfile 的编写,是 docker 入门学习的第一步。

FROM

Dockerfile 的第一条指令,指定基础镜像,即你的镜像是在什么镜像的基础上构建的。比如这里我要制作基于 MySQL 的镜像,那么就是

FROM mysql

可以在镜像后指定特定版本,如果没有,则默认 latest。

FROM mysql:5.7.25

RUN

容器中 运行指定的命令。

有两种命令格式。

  1. 直接跟 shell 命令。
RUN <command>
  1. 调用可执行文件,支持传参调用。
RUN ["executable", "param1", "param2"]

需要注意的是,Dockerfile 中每条命令都会构建一层镜像,如有多条 RUN 命令,尽量不要拆开写成多个 RUN 命令,这会导致镜像多层、臃肿、容易出错。建议是写成一句或者放到一个 sh 文件中批量执行。

CMD

命令格式类似 RUN,但区别是,RUN是构建容器时就运行的命令以及提交运行结果,CMD 指定的是容器启动时执行的命令,在构建时并不运行。

需要注意的是,RUN 可以有多个,且每个都能起作用;而 CMD 虽然也可以有多个,但是只以最后一个为准。

ENV

设置环境变量。

有两种命令格式,但作用相同。

  1. 设置一对环境变量。
ENV <key> <value>
  1. 设置一对或多对环境变量。
ENV <key>=<value> ...

COPY

复制文件到容器中。

常用命令格式

COPY <src>... <dest>
COPY ["<src>",... "<dest>"]

ADD

将文件打包进容器,可以理解为 COPY 的升级版。

ADD <src>... <dest>
ADD ["<src>",... "<dest>"]

其中 ADD 的 <src> 不仅支持本地文件,还支持 url (类似 wget)。

WORKDIR

设置工作目录,也就是在容器中执行命令时所在的目录。

WORKDIR <path>

EXPOSE

暴露容器监听的内部端口到外部,如果外部需要访问该内部端口,需要指定端口映射。

EXPOSE <port>

构建自带初始化的 MySQL 镜像

Dockerfile

首先,Dockerfile 长这样,具体的命令上面有解释。核心逻辑就是拷贝三个文件进去,然后在容器启动的时候执行 setup.sh,由 setup.sh 执行另外两个文件。

FROM mysql:5.7.25# allow no password
ENV MYSQL_ALLOW_EMPTY_PASSWORD yes# copy file into container
COPY setup.sh /mysql/setup.sh
COPY schema.sql /mysql/schema.sql
COPY privileges.sql /mysql/privileges.sql# exec these command when container start up
CMD ["sh", "/mysql/setup.sh"]

这里首先设置允许免密登录是为了方便后面配置,密码最后再通过 privileges.sql 来设置。

启动脚本

setup.sh的作用就是启动 MySQL 服务,然后执行两个 sql 文件。

#!/bin/bash
set -eecho '1. starting mysql...'
service mysql startecho '2. creating database...'
mysql < /mysql/schema.sql# set password
echo '3. setting password....'
mysql < /mysql/privileges.sql# check mysql status
echo `service mysql status`
echo '4. mysql for baobaozhuan is ready...'tail -f /dev/null

schema.sql

一些对于数据库的初始化操作可以放在这里,比如这里我们需要创建一个数据库。当然,建表,插入数据那些都是可以的。

create database if not exists baobaozhuan;

privileges.sql

这个文件是对 MySQL 进行一些权限配置,比如设置用户密码,创建新用户,数据库授权等。

后面两句很重要,一开始没有加上授权,结果 go server 一直连不上 docker 里面的 MySQL server。

use mysql;
-- new user
set password for root@localhost = password('SYSU_baobaozhuan2019');
-- important
grant all on *.* to root@'%' identified by 'SYSU_baobaozhuan2019' with grant option;
-- use privileges
flush privileges;

欢迎访问我们的项目:https://swsad-dalaotelephone.github.io/docs/


Docker构建MySQL镜像并初始化相关推荐

  1. dockerfile构建mysql镜像并初始化数据库

    dockerfile: FROM mysql:5.7 WORKDIR /docker-entrypoint-initdb.d ENV LANG=C.UTF-8 ADD my.sql . 注意:sql语 ...

  2. Centos /Linux环境下利用Docker 安装mysql5.7镜像(含离线安装),启动mysql镜像并初始化数据库

    Docker 安装mysql镜像,含离线 Docker 安装mysql镜像(含离线) 准备mysql的Docker镜像(需要在有网的服务器中下载) 将准备好tar导入到docker镜像 Docker启 ...

  3. 用Dockerfile构建MySQL镜像并实现容器启动过程中MySQL数据库系统的初始化

    前一段时间就在研究用Dockerfile构建MySQL镜像并实现容器启动过程中MySQL数据库系统的初始化,但被一些无关紧要的事儿给耽误了,经过查阅<dockerfile最佳实践>及MyS ...

  4. Dockerfile 构建mysql镜像

    Dockerfile 构建mysql镜像 1,建立文件 2,构建my.cnf文件 3,构建Dockerfile文件 4,构建镜像 5,构建容器 6,进入容器给权限 7,登录mysql 8,在宿主机yu ...

  5. docker查看mysql镜像版本_Docker 查看镜像信息

    欢迎关注博主的微信公众号: 小哈学Java, 文末分享阿里 P8 资深架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 文章首发个人网站: https://w ...

  6. Docker构建JDK 镜像

    Docker构建JDK 镜像 在 Docker官网中的openJDK 镜像中,默认不是使用的北京时间,会导致启动jar应用程序时时区不对的情况,这里在 openJDK镜像的基础上,设置使用中国北京时间 ...

  7. docker构建hadoop镜像、docker-compose启动hdfs

    之前使用镜像singularities/hadoop:2.8安装过hdfs,但鉴于这个镜像已经很久没更新了,今天就手动安装一下hadoop,并构建成镜像,方便以后使用. 参考文档:docker构建ha ...

  8. 使用docker构建jenkins镜像并运行容器

    https://my.oschina.net/donhui/blog/470372?p={{currentPage+1}}   摘要: 使用docker构建jenkins镜像并运行容器 目录: 1.基 ...

  9. docker下载mysql镜像并启动容器

    docker下载mysql镜像并启动容器 下载mysql镜像 运行一个mysql容器 命令 参数含义 查看当前运行的容器状态 进入容器 使用root登录mysql 重启mysql容器 下载mysql镜 ...

最新文章

  1. java 日志脱敏框架 sensitive,优雅的打印脱敏日志
  2. java compare 返回值_关于Java你不知道的那些事之Java8新特性[Lambda表达式和函数式接口]...
  3. java线程的基本概念
  4. JDK 12附带紧凑数字格式
  5. 金蝶kis专业版公网访问_金蝶KIS云专业版—【账务处理】进阶操作101问
  6. 2019年春运贵州道路客运预计达6700万人次
  7. pandas php,pandas分组聚合代码详解
  8. RedHat 5.4+ Postfix +Extmail实现基于虚拟用户的邮件系统(三)
  9. 在ubuntu下怎么安装和使用Github
  10. NVIDIA控制面板闪退
  11. 非华为电脑安装华为电脑管家11.1.1.101
  12. python对大小写敏感吗_python中对于大小写是否敏感
  13. 如何用Photoshop去制作一张质量高的banner(轮播图)?
  14. 【自然语言处理】【向量表示】PairSupCon:用于句子表示的成对监督对比学习
  15. Excel学习经验总结
  16. Datawhale组队学习NLP之transformer Task 01
  17. Mac OS X: MS Office 2008 Preference Manifests
  18. 百度SEO站群彩虹网盘外链程序源码V5.1|网盘外链源码
  19. 构设计软CADS.2018.1.Analysis-Modelling-Design.Suite建筑结
  20. CH1-模型训练优化

热门文章

  1. 【Cocos 3d】金币粒子特效制作
  2. 关于SNMP远程管理端连接不上设备代理端问题
  3. CorelDRAW插件-CPG插件开发-标准工具栏添加按钮-CDR插件(四)
  4. Android 基于google Zxing实现对手机中的二维码进行扫描
  5. Dockerfile部署jar包
  6. Linux下安装libsodium,启用ss的chacha20高级加密
  7. 捷联惯导系统学习6.2(序贯滤波 )
  8. ssh 远程执行命令简介
  9. On Characterizing GAN Convergence Through Proximal Duality Gap翻译
  10. ldf格式是mysql还是sql_mdf与ldf文件格式