在 Ubuntu 上安装 Docker(+ Docker-Compose)+ MySQL

尝试在 Ubuntu 上安装 Docker + MySQL。

下次的前提是Ubuntu环境已经创建完成,要实现与express连接并查看其内容。

    • PC環境

Vagrant 2.2.7

VirtualBox 6.1.2

Ubuntu 18.04

ここに Docker-CE + MySQL を入れていく
便利なので Docker-Compose も使うよ

安装Docker

只要参考网站一边操作,应该不会有什么问题。

Docker 安装前的准备工作

# apt更新
$ sudo apt-get update

# aptがHTTPS経由でリポジトリを使用できるようにする
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

# Docker公式GPGキー追加
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# キーを確認
$ sudo apt-key fingerprint 0EBFCD88

# stable設定
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

安装Docker

# apt更新
$ sudo apt-get update

# 最新バージョンをインストール
$ sudo apt-get install docker-ce

安装 Docker 后的对话

# docker グループを作成する
$ sudo groupadd docker

# ユーザを docker グループに追加する
$ sudo usermod -aG docker $USER

# 再起動してグループメンバーシップを認識させる
$ sudo reboot
# sudo なしで docker が動くのを確認
$ docker run hello-world

以下是可能会出现的内容。由于时机等方面的原因,摘要可能会发生变化。

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:9572f7cdcee8591948c2963463447a53466950b3fc15a247fcad1917ca215a2f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

安装Docker-Compose

可能的翻译如下:
尽量选择最新的可能比较好。
最新版本可以在Docker compose发布页面找到。
现在最新的版本是1.25.4吗?

# 最新をダウンロード
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 実行権限を付与
$ sudo chmod +x /usr/local/bin/docker-compose

# インストール確認
$ docker-compose --version

当确认安装时,将产生以下类似输出。

docker-compose version 1.25.4, build 8d51620a

安装MySQL

我查了很多其他的网站,但是觉得有些地方不太明白,所以我要整理一下放在手边。

如果是使用 Express 和 MySQL,我认为可以参考这个地方。
最终想要做的是准备以下两个服务器,从 Express 中引用 MySQL 的数据并使用。

    • Node.js + Express (+ MySQL Client) のインストールされている Ubuntu 18.04 サーバー?

 

    Docker-CE(+ Docker-Compose) + MySQL + Redis のインストールされている Ubuntu 18.04 サーバー? ★今やってるのはコレ★

我之前真的没意识到必须在Express上安装MySQL才能使用,真是不好意思呢……咳咳。在中途时差点想要放弃,说不如就在同一个服务器上吧。

在Docker-CE(加上Docker-Compose)之上,安装MySQL。

首先创建一个可使用MySQL的环境。文件结构等方面可以参考这里。

所以结构会保持不变。

MySQLTest/
├── docker/
│   └── db/
│       ├── data/
│       ├── my.cnf
│       └── sql/
│           ├── 001-create-tables.sql
│           └── init-database.sh
├── docker-compose.yml
└── init-mysql.sh

因为不想设为全局,所以从创建文件夹开始。

mkdir MySQLTest
cd MySQLTest

安装MySQL

npm install mysql --save

在稍后创建的docker-compose.yml文件中,任何不存在的文件夹都会自动创建,
但是我想要将my.cnf作为文件创建,所以请提前创建好相应的文件夹。

mkdir docker
cd docker
mkdir db
cd db

打开 nano(文本编辑器),创建 my.cnf 文件。

sudo nano my.cnf

这里是 my.cnf 的内容。它是关于字符编码的设置。请创建一个文件并保存下来。

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

[client]
default-character-set=utf8mb4

下一步,我们将创建一个docker-compose.yml文件。请返回到MySQLTest文件夹,然后使用nano文本编辑器创建docker-compose.yml文件。

cd ../../ #dbフォルダに居たらMySQLTestに戻る、そうじゃなければ無視して
sudo nano docker-compose.yml

以下是docker-compose.yml的內容。

version: '3'

services:
  # MySQL
  db:
    image: mysql
    container_name: mysql_host
    environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: test_database
        MYSQL_USER: docker
        MYSQL_PASSWORD: docker
        TZ: 'Asia/Tokyo'
    command: "mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci"
    volumes:
        - ./docker/db/data:/var/lib/mysql
        - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
        - ./docker/db/sql:/docker-entrypoint-initdb.d
    ports:
        - 3306:3306

创建一个用于初始化MySQL的shell脚本。在与docker-compose.yml相同的位置创建一个名为init-mysql.sh文件,其内容如下。

#!/bin/sh
docker-compose exec db bash -c "chmod 0775 docker-entrypoint-initdb.d/init-database.sh"
docker-compose exec db bash -c "./docker-entrypoint-initdb.d/init-database.sh"

启动和停止Docker

docker-compose up -d

创建了文件夹,确认 Docker 已启动。

docker-compose ps

运行↑的命令会输出这样的结果。看起来会显示一个列表。

   Name                 Command               State                 Ports
---------------------------------------------------------------------------------------
mysql_host   docker-entrypoint.sh mysql ...   Up      0.0.0.0:3306->3306/tcp, 33060/tcp

因为还要写和准备其他的东西,所以暂时结束。
如果在docker-compose.yml里写了,就可以一起处理,很方便。

docker-compose down

制作剩余的文件

刚刚没做的,我会创建 001-create-tables.sql 和 init-database.sh。

MySQLTest/
├── docker/
│   └── db/
│       ├── data/
│       ├── my.cnf
│       └── sql/  ↓この2つ
│           ├── 001-create-tables.sql
│           └── init-database.sh
├── docker-compose.yml
└── init-mysql.sh

创建001-create-tables.sql文件

在SQL文件夹中打开文本编辑器。

---- drop ----
DROP TABLE IF EXISTS `test_table`;

---- create ----
create table IF not exists `test_table`
(
 `id`               INT(20) AUTO_INCREMENT,
 `name`             VARCHAR(20) NOT NULL,
 `created_at`       Datetime DEFAULT NULL,
 `updated_at`       Datetime DEFAULT NULL,
    PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

将其保存为001-create-tables.sql。

创建 init-database.sh 文件

在SQL文件夹中打开文本编辑器。

#!/usr/bin/env bash
#wait for the MySQL Server to come up
#sleep 90s

#run the setup script to create the DB and the schema in the DB
mysql -u docker -pdocker test_database < "/docker-entrypoint-initdb.d/001-create-tables.sql"

将此保存为 init-database.sh。
不必担心执行权限,因为已在 init-mysql.sh 中进行了 chmod 处理。

MySQL启动并输入并显示数据。

终于准备就绪了,可以执行init-mysql.sh脚本了。

MySQLTest/
├── docker/
│   └── db/
│       ├── data/
│       ├── my.cnf
│       └── sql/
│           ├── 001-create-tables.sql
│           └── init-database.sh
├── docker-compose.yml
└── init-mysql.sh ←コレ

进行数据库初始化(shell执行)

./init-mysql.sh

数据库已经建立(表是空的),所以需要确认。

连接到MySQL数据库

将 mysql_host 设为与 docker-compose.yml 的 container_name 相同。

$ docker exec -it mysql_host bash

当连接成功时,将产生以下类似的输出。(由于容器的ID在root@之后,所以不应该相同)

root@ff7eb30d5b23:/#

让我们登录MySQL,检查数据库是否已创建好了。
请输入用户名和密码。

mysql -uroot -p

指定使用的数据库

执行”use test_database;”的语句。
↓类似这样

mysql> use test_database;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql>

展示桌子

如果有数据的话,会变成像↓这样,
如果没有的话,会显示 “0行记录受影响(0.00秒)”。

mysql> SELECT * FROM test_table;
+----+------+---------------------+---------------------+
| id | name | created_at          | updated_at          |
+----+------+---------------------+---------------------+
|  1 | TOM  | 2020-02-06 00:00:00 | 2020-02-06 00:00:00 |
+----+------+---------------------+---------------------+
1 row in set (0.00 sec)

mysql>

如果桌子本身没有的话,情况会变成这样。

mysql> SELECT * FROM table;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'table' at line 1
mysql>

在桌子上输入数据

首先,使用SQL语句进行输入。

INSERT INTO test_table (id,name,created_at,updated_at) VALUES (1, 'TOM','2020-02-06', '2020-02-06');

如果输入正确,就会变成这样。 , jiù huì .)

mysql> INSERT INTO test_table (id,name,created_at,updated_at) VALUES (1, 'TOM', '2020-02-06', '2020-02-06');
Query OK, 1 row affected (0.04 sec)

mysql>

再次尝试显示表格后,会变成↓这样

mysql> SELECT * FROM test_table;
+----+------+---------------------+---------------------+
| id | name | created_at          | updated_at          |
+----+------+---------------------+---------------------+
|  1 | TOM  | 2020-02-06 00:00:00 | 2020-02-06 00:00:00 |
+----+------+---------------------+---------------------+
1 row in set (0.00 sec)

mysql>

完成了创建样本数据的部分。
用”exit”命令退出。

请提供以下内容的中文本地化语句,只需一种选项:

参考

    • Dockerの話

https://qiita.com/shubatto/items/105f5b90e1cd91ba7c4c/

Docker公式の話

https://docs.docker.com/install/linux/docker-ce/ubuntu/

Node.jsとExpressとMySQLの簡単サンプル

https://qiita.com/tiwu_official/items/9ffc8e1fd1173b1a9e40

docker-compose でMySQL環境簡単構築

https://qiita.com/A-Kira/items/f401aea261693c395966

Docker compose release page

https://github.com/docker/compose/releases/

初心者向けdocker-composeコマンド逆引き

https://qiita.com/okyk/items/a374ddb3f853d1688820

docker-composeでMySQL5.7を起動して接続してみた

https://qiita.com/MJ-Hippos/items/58d0f98a15656ed65136

MySQLの話

https://qiita.com/astrsk_hori/items/e3d6c237d68be1a6f548

MySQL, Redisを利用する開発環境を Docker CE で構築する

https://qiita.com/rubytomato@github/items/79792a6e4bf205dd4bee

广告
将在 10 秒后关闭
bannerAds