美文网首页
自定义 Dockerfile 示例

自定义 Dockerfile 示例

作者: hemiao3000 | 来源:发表于2022-06-23 19:49 被阅读0次

    我们编写自己的Dockerfile来实现我们的需求,这里以 Mysql:5.7 为例。不同的版本可能有一定的出入,需要详细去阅读官方文档。脚本如下:

    FROM mysql:5.7
    LABEL OG=felord.cn
    COPY utf8mb4.cnf /etc/mysql/conf.d/utf8mb4.cnf
    COPY ./sql  /tmp/sql
    RUN mv /tmp/sql/*.sql /docker-entrypoint-initdb.d
    RUN rm -rf /tmp/sql
    
    • 第一步,引入官方 Mysql:5.7 Docker镜像。
    • 第二步,无实际意义,主要是作者、组织信息。
    • 第三步,很重要!本来我没有配置第三行,结果运行容器后发现初始化数据的中文全部乱码了。所以需要在初始化数据库前修改Mysql的编码等配置,这里我顺便把时区也改为了+8:00。
    • 第四步,复制包含数据库脚本的 ./sql文件夹到镜像的/tmp/sql下。
    • 第五步,使用 mv 命令把第四步拷贝的文件夹下的所有.sql文件复制到 /docker-entrypoint-initdb.d下,这样才能利用2.章节的机制进行初始化数据库。
    • 第六步,删除使用过的临时目录。

    然后你可以通过构建镜像命令构建自定义的Mysql镜像:

    # 一定不要忘记最后的一个 . 点
    docker build -t mysql:5.7c .
    

    通过 mysql:5.7c 镜像启动一个名称为 mysql-service 的容器,root 密码为 123456,并持久化数据到宿主机 D:/mysql/data 下:

    docker run -d --rm --name mysql-service \
      -v d:/mysql/data:/var/lib/mysql \
      -p 3306:3306 \
      -e MYSQL_ROOT_PASSWORD=123456 \
      -e MYSQL_ROOT_HOST=% \
      mysql:5.7c
    

    小贴士:你可以通过 SHOW VARIABLES LIKE 'character%' 查看字符集是否更改为utf8mb4,也可以通过SHOW VARIABLES LIKE '%time_zone%' 查看时区是否是东八区。

    相关文章

      网友评论

          本文标题:自定义 Dockerfile 示例

          本文链接:https://www.haomeiwen.com/subject/exymvrtx.html