本文是为想要轻松在Docker容器中启动MySQL的Docker初学者编写的。
另外,请注意,由于它基于SpringBoot(FrameWork)的开发,因此目标受众可能会受到限制。
假设
- 什么是Docker?
- 您已安装Mac版Docker
*如果尚未安装Docker,请参考下面的链接并启动Docker。
Qiita:https://qiita.com/scrummasudar/items/750aa52f4e0e747eed68
开发环境如下。
开发环境
- Mac OS High Sierra
- IntelliJ IDEA
- SpringBoot 2.0.5
- Java8的
- 码头工人
Docker首先是什么?
简而言之,它是开源容器管理软件。
通过使用Docker容器,可以加快应用程序的构建和部署。请参阅以下内容,因为将省略详细说明。
Qiita:https://qiita.com/gold-kou/items/44860fbda1a34a001fc1
官方文档:https://docs.docker.com/
什么是Docker Compose? ??
可以定义和启动各种容器的工具(码头工人)。基本上,您可以使用YAML文件设置服务环境。另外,您只需一个命令即可轻松上手。
*当您安装Docker For Mac时,它会自动提供,因此您不需要单独安装
这次要做什么
- 尝试使用docker-compose命令启动MySQL5.7(官方图片)
- 尝试连接到已启动的MySQL 5.7
- 检查数据库和表是否根据准备好的配置文件初始化
- 查看输出查询日志
步骤
1.检查是否已安装Docker
终端
1 2 3 4 5 6 7 8 | $ docker --version Docker version 18.03, build c97c6d6 #インストールされていればバージョンが表示される $ docker-compose --version docker-compose version 1.22.0, build 8dd22a9 $ docker-machine --version docker-machine version 0.14.0, build 9ba6da9 |
2.创建一个Dockerfile
目录结构如下。
宪法
1 2 3 4 5 6 7 8 9 10 | sample-project/ ├ docker/ | └ mysql/ | ├ conf.d/ | | └ my.cnf | ├ initdb.d/ | | ├ schema.sql | | └ testdata.sql | └ Dockerfile └ docker-compose.yml |
Dockerfile就像一个指令,用于命令构建哪种类型的映像。
要使用5.7版的MySQL,请编写以下内容以构建正式映像。
Docker文件
1 2 | FROM mysql:5.7 RUN touch /var/log/mysql/mysqld.log # 指定の場所にログを記録するファイルを作る |
3.创建docker-compose.yml
此YAML文件允许您配置多个服务。具体来说,您可以指定每个服务的端口号并设置存储区域(卷)。
docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | version: '3.3' # docker-composeのversionを指定 services: db: build: ./docker/mysql # Dockerfileの置き場所を指定 image: mysql:5.7 restart: always environment: MYSQL_DATABASE: sample_db MYSQL_USER: user MYSQL_PASSWORD: password MYSQL_ROOT_PASSWORD: rootpassword ports: - "3314:3306" volumes: - ./docker/mysql/initdb.d:/docker-entrypoint-initdb.d - ./docker/mysql/conf.d:/etc/mysql/conf.d - ./log/mysql:/var/log/mysql |
4.创建my.cnf
您可以在此处配置MySQL。
my.cnf
1 2 3 4 5 6 7 8 | [mysqld] character-set-server=utf8mb4 # mysqlサーバー側が使用する文字コード explicit-defaults-for-timestamp=1 # テーブルにTimeStamp型のカラムをもつ場合、推奨 general-log=1 # 実行したクエリの全ての履歴が記録される(defaultではOFFになっているらしい) general-log-file=/var/log/mysql/mysqld.log # ログの出力先 [client] default-character-set=utf8mb4 # mysqlのクライアント側が使用する文字コード |
5.创建一个表定义文件
我想创建表作为初始化过程,因此准备一个DDL文件。
schema.sql
1 2 3 4 5 6 | CREATE TABLE users ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(32) NOT NULL, email VARCHAR(32) NOT NULL, PRIMARY KEY (id) ); |
6.创建测试数据
您可以预先准备表中的数据。
testdata.sql
1 | INSERT INTO users (id,name,email) VALUES (1, 'TOM','[email protected]'); |
7.执行docker-compose命令
以下命令在项目的根目录中执行。
终端
1 2 3 4 5 6 7 8 9 10 11 12 13 | $ docker-compose up -d # コンテナを作成しスタートする Creating network "sample-project_default" with the default driver Creating sample-project_db_1 ... done $ docker-compose ps # 存在するコンテナのリストを表示する Name Command State Ports -------------------------------------------------------------------------------- sample-project_db_1 docker-entrypoint.sh Up 0.0.0.0:3314->3306/tcp mysqld , 33060/tcp ↓その他コマンド↓ $ docker-compose stop # サービスを停止させる $ docker-compose down # コンテナの停止、削除、さらにネットワーク、記憶領域を全て削除 |
8.尝试连接到启动的MySQL
在
中,我将尝试立即连接到docker-compose启动的Mysql。
终端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | $ docker exec -it sample-project_db_1 bash # sample-project_db_1というコンテナに入りコマンドを実行 # mysql -u user -p # ログインする Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. mysql> use sample_db; Database changed Database changed mysql> show tables; # テーブルが作られているか確認する +---------------------+ | Tables_in_sample_db | +---------------------+ | users | +---------------------+ 1 row in set (0.00 sec) mysql> select * from users; # 仕込んだデータが入っているか確認する +----+------+-----------------+ | id | name | email | +----+------+-----------------+ | 1 | TOM | [email protected] | +----+------+-----------------+ 1 row in set (0.00 sec) |
由于您仅按原样从容器内部连接到Mysql,因此请更改连接方法并进行检查。
通过指定主机名和端口登录。 (如果未指定,则似乎已连接到默认端口3306)
终端
1 2 3 4 5 6 | $ mysql --host 127.0.0.1 --port 3314 -u user -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g ? ? mysql> |
9.检查日志
确保在先前设置的位置创建文件。
目录结构
1 2 3 4 5 6 7 | sample-project/ ├ docker ├ log/ | └ mysql/ ├ src └ mysqld.log | └ docker-compose.yml |
文件的内容如下所示。
mysqld.log
1 2 3 4 5 6 7 8 | mysqld, Version: 5.7.23-log (MySQL Community Server (GPL)). started with: Tcp port: 0 Unix socket: /var/run/mysqld/mysqld.sock Time Id Command Argument 2018-10-13T11:38:04.918533Z 1 Query CREATE DATABASE mysql; 2018-10-13T11:38:04.919437Z 1 Query USE mysql; ? ? 以下割愛 |
这一次,所有查询日志都设置为输出,因此文件大小似乎很大(6.71MB)
印象数
我对容器的概念了解甚少,所以我觉得自己在做些事情,但是它比在本地安装MySQL并使用它要容易得多,并且它不会污染本地环境,所以我我正在考虑越来越多地使用它。
这次我没有介绍它,但是我希望以后可以分享使用Springboot开发的应用程序进行连接的过程。
其他参考页
- 外部链接1:http://dqn.sakusakutto.jp/2015/10/docker_mysqld_tutorial.html
- 外部链接2:https://blog.local-c.com/archives/1984