本地配置文件
切换到本地配置文件及镜像构建文件目录
cd /opt/mysql_dockerfile
vi em-dockerfile
创建镜像构建文件
FROM mysql:5.7.26 ADD my.cnf /etc/mysql/conf.d/my.cnf ADD sm.sql /docker-entrypoint-initdb.d/sm.sql EXPOSE 3306
ADD 源文件 目标文件
ADD my.cnf 将本地配置文件添加到镜像中
ADD sm.sql 将初始化脚本条件到镜像中,在镜像启动时会运行
vi my.cnf
创建配置文件,防止乱码
[mysqld] init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake
vi sm.sql
创建初始化脚本,可以从数据库中导出,但是一般整库的导出只有建表语句,所以还需要手工添加建库语句,并使用该库(注意17行及21行)
/* 2 Navicat Premium Data Transfer 3 4 Source Server : 172.16.14.10(开发) 5 Source Server Type : MySQL 6 Source Server Version : 50724 7 Source Host : 172.16.14.10 8 Source Database : sm 9 10 Target Server Type : MySQL 11 Target Server Version : 50724 12 File Encoding : utf-8 13 14 Date: 01/16/2020 15:47:38 PM 15 */ 16 17 CREATE DATABASE sm; 18 19 SET NAMES utf8mb4; 20 SET FOREIGN_KEY_CHECKS = 0; 21 use sm; 22 -- ---------------------------- 23 -- Table structure for `t_alarm_dictionary` 24 -- ---------------------------- 25 DROP TABLE IF EXISTS `t_alarm_dictionary`; 26 CREATE TABLE `t_alarm_dictionary` ( 27 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增长id', 28 `dict_id` int(11) DEFAULT NULL COMMENT '字典编码', 29 `dict_name` varchar(100) DEFAULT NULL COMMENT '字典名称', 30 `parent_id` int(11) DEFAULT NULL COMMENT '父字典编码', 31 `key` varchar(200) DEFAULT NULL COMMENT '同一类字典的统一标识符', 32 `alarm_value_unit` varchar(200) DEFAULT NULL COMMENT '告警值/告警阈值单位', 33 `comment` varchar(200) DEFAULT NULL COMMENT '注释', 34 `enable_status` int(3) DEFAULT '1' COMMENT '是否启用(0默认为不启用,1启用)', 35 `device_type` int(2) DEFAULT NULL COMMENT '告警的区分符 0:单相 1:三相', 36 `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', 37 `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', 38 PRIMARY KEY (`id`), 39 UNIQUE KEY `dict_id` (`dict_id`) 40 ) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='告警数据字典'; 41 42 -- ---------------------------- 43 -- Records of `t_alarm_dictionary` 44 -- ---------------------------- 45 BEGIN;
配置文件准备好之后,就可以构建镜像了(确保是在配置文件所在目录执行构建语句)
构建镜像
注意最后的点及前面的空格
docker build -f /opt/mysql_dockerfile/em-dockerfile -t em-sm/mysql:latest .
运行结果如下:
[root@k8s-master mysql_dockerfile]# docker build -f /opt/mysql_dockerfile/em-dockerfile -t em-sm/mysql:latest . Sending build context to Docker daemon 1.842MB Step 1/4 : FROM mysql:5.7.26 ---> e9c354083de7 Step 2/4 : ADD my.cnf /etc/mysql/conf.d/my.cnf ---> 0f8d3a611b30 Step 3/4 : ADD sm.sql /docker-entrypoint-initdb.d/sm.sql ---> b2909d615513 Step 4/4 : EXPOSE 3306 ---> Running in b6c30efaa8cf Removing intermediate container b6c30efaa8cf ---> 587aef27d240 Successfully built 587aef27d240 Successfully tagged em-sm/mysql:latest
给镜像打tag
tagID根据实际情况填写,可通过docker images查看
docker tag 587aef27d240 172.16.14.6/em-sm/mysql:latest
将镜像推送到私有仓库
本文是推送到私有harbor仓库
docker push 172.16.14.6/em-sm/mysql:latest
运行结果如下:
[root@k8s-master mysql_dockerfile]# docker tag 587aef27d240 172.16.14.6/em-sm/mysql:latest [root@k8s-master mysql_dockerfile]# docker push 172.16.14.6/em-sm/mysql:latest The push refers to repository [172.16.14.6/em-sm/mysql] b765c651ca64: Pushed 143e8d2f741a: Pushed 229aaa48c303: Layer already exists b5ef0b1ea71d: Layer already exists 589aba1a5c0c: Layer already exists f9c0afa43f04: Layer already exists 7e7fffcdabb3: Layer already exists 77737de99484: Layer already exists 2f1b41b24201: Layer already exists 007a7f930352: Layer already exists c6926fcee191: Layer already exists b78ec9586b34: Layer already exists d56055da3352: Layer already exists latest: digest: sha256:8cf67b2c1aa686c3dc679e9b31053f0f8ef4e4b608d7fbade2e82a3b17457af5 size: 3038
登录harbor查看镜像
至此,镜像已经成功制作,并推送到了私有仓库,下面开始基于kuboard部署镜像。
kuboard部署mysql
进入相应的命名空间,点击创建工作负载,填写表单
字段名称 | 填写内容 | 说明 |
服务类型 | StatefulSet | |
服务分层 | 持久层 | |
服务名称 | em-sm-mysql | |
服务描述 | 数据库 | |
副本数量 | 1 | 请填写1 |
容器名称 | em-sm | |
镜像 | 172.16.14.6/em-sm/mysql:latest | |
Docker仓库密码 | 选择自己的私有仓库 | 没有就创建一个,对应harbor登录名及密码 |
抓取策略 | Always | |
环境变量 | MYSQL_ROOT_PASSWORD=root | |
Service | ClusterIP(集群内访问) | |
协议:TCP 服务端口: 3306 容器端口: 3306 |
填写完成点击保存完成即可。
点击工作容器中的sh进入终端管理页面
密码就是上一步中设置的环境变量