本章节原文地址:http://www.czquan.cn/#/resource-detail/35394
1.认识Dockerfile
1.1 Dockerfile是干什么的?
Dockerfile 主要用于docker构建镜像的一个描述文件,描述镜像要做那些工作,比如描述该应用依赖的镜像,设定环境变量,启动参数等信息,执行相关命令等操作。
1.2 实战:Dockerfile部署mysql应用
1、准备工作
创建mysql5.7文件夹,进入该文件夹,创建init文件夹,用于存放mysql部署第一次启动的时候要初始化的数据(可以放入创建一张表或者初始化某些表的数据的sql脚本)
创建init文件夹,假设想要创建一个first_db数据库和一张first_table表,需要在init文件夹内部写入对应的sql脚本(Tips:这种方式创建数据库和表只能是第一次部署改容器的时候会执行,后面容器重启都不会再次执行该脚本,只用于第一次部署有效)
比如创建一个init.sql
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for first_table
-- ----------------------------
DROP TABLE IF EXISTS `first_table`;
CREATE TABLE `first_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for first_table
-- ----------------------------
DROP TABLE IF EXISTS `first_table`;
CREATE TABLE `first_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
2 、创建Dockerfile文件
From mysql:5.7 #使用mysql5.7 镜像,本地没有该镜像会自动从远程仓库拉取
WORKDIR /docker-entrypoint-initdb.d # 切换到mysql容器中初始化数据库的目录,这个当容器启动时会自动执行该文件夹下的脚本
ADD ./init/init.sql . #将当前目录下的init.sql 文件复制 到 容器的当前目录中,当前目录是/docker-entrypoint-initdb.d
3 、构建镜像
使用Dockerfile构建自定义的mysql镜像5.7,在mysql5.7文件夹内当前目录下执行该命令,./表示当前目录,也可以省略/,会自动找到当前目录下的Dockerfile文件进行执行
docker build –t mysql-db ./
4 、构建好后创建容器
# 构建容器
# -p 宿主机外网端口:容器内部启动端口
# –e 是设置环境变量,设置MYSQL_ROOT_PASSWORD:mysql初始root账户的密码
docker run -p 3310:3306 -e MYSQL_ROOT_PASSWORD=xxx mysql_sample_db
**Tips:**当然使用docker命令直接创建容器的方式在应用中少见,这样不太易于管理服务的配置,后面市场中大多数使用docker-c