動機
使ったことがないリレーショナルデータベースを使う必要がでてきたときの覚書、後で見返す用。
対象のリレーショナルデータベースは、Oracle、SQLServer、DB2、MySQL、PostgreSQLです。
各種リレーショナルデータベースをDockerで動かして、データベース毎のCUIツールを使うまでを記します。
前提
dockerのインストールやコマンドのオプションとかは公式ページやQiitaで紹介されているので、自身の覚書程度にしています。
proxy環境下の場合の設定
proxy環境下で試すときはいくつか事前に設定しておくこと。
Ubuntu
sudo vi /etc/apt/apt.conf
Acquire::http::Proxy "http://proxy.server:port/";
Acquire::https::Proxy "http://proxy.server:port/";
CentOS
sudo vi /etc/yum.conf
proxy=http://proxy.server:port/
共通
vi ${HOME}/.bashrc
PROXY="proxy.server:port/"
export http_proxy=${PROXY}
export HTTP_PROXY=${PROXY}
export https_proxy=${PROXY}
export HTTPS_PROXY=${PROXY}
docker インストール
インストール手順
詳細は省略
https://docs.docker.com/engine/install/ubuntu/
https://docs.docker.com/engine/install/centos/
一般ユーザでdockerコマンドを使えるようにする
sudo usermod -aG docker your-user
Oracle
参考URL
oracle databaseはdockerイメージが配布されていないので、ビルドするところから。
https://github.com/oracle/docker-images/tree/master/OracleDatabase/SingleInstance
ビルドスクリプトをgithubから取得
cd ${HOME}/prj/DB/oracle/
git clone https://github.com/oracle/docker-images
ビルド
マシンパワー、ネットワークによりますが、1時間くらいかかりました。
cd ${HOME}/prj/DB/oracle/docker-images/OracleDatabase/SingleInstance/dockerfiles
./buildDockerImage.sh -v 18.4.0 -x
コンテナを起動前の準備
ホスト側にoradataのディレクトリを作ります。このときパーミッションは777とします。これをしておかないと、コンテナ内部からホスト側へのファイル書き込みができないので。
mkdir -p ${HOME}/prj/DB/oracle/oradata
chmod 777 ${HOME}/prj/DB/oracle/oradata
コンテナを起動
docker run --name my-oracle \
-p 1521:1521 -p 5500:5500 \
-e ORACLE_PWD=myoracle \
-e ORACLE_CHARACTERSET=AL32UTF8 \
-v ${HOME}/prj/DB/oracle/oradata:/opt/oracle/oradata \
-d oracle/database:18.4.0-xe
コンテナ起動状況を確認
docker logs -f my-oracle
次のようなメッセージが出ています。「SYSTEM」ユーザのパスワードが出ています。
ORACLE PASSWORD FOR SYS AND SYSTEM: myoracle
Specify a password to be used for database accounts. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9]. Note that the same password will be used for SYS, SYSTEM and PDBADMIN accounts:
Confirm the password:
次のメッセージが表示されたらOK。
#########################
DATABASE IS READY TO USE!
#########################
コンテナに入り、簡単な動作確認
docker exec -it --user root my-oracle bash -p
bash-4.2# su oracle
[oracle@hostname /]$ sqlplus SYSTEM/myoracle
SQL*Plus: Release 18.0.0.0.0 - Production on Fri May 29 12:45:51 2020
Version 18.4.0.0.0
Copyright (c) 1982, 2018, Oracle. All rights reserved.
Last Successful login time: Thu May 28 2020 12:54:45 +00:00
Connected to:
Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0
SQL> select table_name from all_tables;
省略
SQL> exit
Disconnected from Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0
[oracle@hostname /]$ exit
exit
exit
bash-4.2# exit
コンテナの停止と次回以降の開始
docker stop my_oracle
docker start my_oracle
SQL Server
参考URL
https://hub.docker.com/_/microsoft-mssql-server
コンテナを起動
docker run -it --name my-sqlserver \
-e 'ACCEPT_EULA=Y' \
-e 'SA_PASSWORD=yourStrong(!)Password' \
-e 'MSSQL_PID=Express' \
-p 1433:1433 \
-d mcr.microsoft.com/mssql/server:2017-latest
コンテナ起動状況を確認
docker logs -f my-sqlserver
次のメッセージが表示されたらOK。
SQL Server is now ready for client connections. This is an informational message; no user action is required.
コンテナに入り、簡単な動作確認
docker exec -it --user root my-sqlserver bash -p
root@hostname:/# /opt/mssql-tools/bin/sqlcmd -S 127.0.0.1 -U sa -P 'yourStrong(!)Password'
1> SELECT table_catalog,table_schema,table_name,table_type FROM information_schema.tables;
2> go
省略
1> exit
root@hostname:/# exit
コンテナの停止と次回以降の開始
docker stop my-sqlserver
docker start my-sqlserver
DB2
参考URL
https://hub.docker.com/r/ibmcom/db2
コンテナを起動前の準備
次のディレクトリを作っておきます。
mkdir -p ${HOME}/prj/DB/db2
コンテナを起動
docker run -it --name my-db2 \
--privileged=true \
-p 50000:50000 \
-e LICENSE=accept \
-e DB2INST1_PASSWORD=db2 \
-e DBNAME=testdb \
-v $HOME/prj/DB/db2:/database \
-d ibmcom/db2:latest
コンテナ起動状況を確認
docker logs -f my-db2
次のメッセージが表示されたらOK。
(*) Setup has completed.
コンテナに入り、簡単な動作確認
docker exec -it --user root my-db2 bash -c "su - db2inst1"
db2
コマンドに -t
オプションをつけること。これをしておかないと、SQL文の改行ができないので。
[db2inst1@hostname ~]$ db2 -t
(c) Copyright IBM Corporation 1993,2007
Command Line Processor for DB2 Client 11.5.0.0
You can issue database manager commands and SQL statements from the command
prompt. For example:
db2 => connect to sample
db2 => bind sample.bnd
For general help, type: ?.
For command help, type: ? command, where command can be
the first few keywords of a database manager command. For example:
? CATALOG DATABASE for help on the CATALOG DATABASE command
? CATALOG for help on all of the CATALOG commands.
To exit db2 interactive mode, type QUIT at the command prompt. Outside
interactive mode, all commands must be prefixed with 'db2'.
To list the current command option settings, type LIST COMMAND OPTIONS.
For more detailed help, refer to the Online Reference Manual.
db2 => connect to testdb;
Database Connection Information
Database server = DB2/LINUXX8664 11.5.0.0
SQL authorization ID = DB2INST1
Local database alias = TESTDB
db2 => select
db2 (cont.) => tabname
db2 (cont.) => from
db2 (cont.) => syscat.tables;
省略
db2 => quit;
DB20000I The QUIT command completed successfully.
[db2inst1@hostname ~]$ exit
コンテナの停止と次回以降の開始
docker stop my-db2
docker start my-db2
MySQL
参考URL
https://hub.docker.com/_/mysql
コンテナを起動
docker run -it --name my-mysql -e MYSQL_ROOT_PASSWORD=mysql -d mysql:latest
コンテナ起動状況を確認
docker logs -f my-mysql
次のメッセージが表示されたらOK。
/usr/sbin/mysqld: ready for connections. Version: '8.0.20' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.
コンテナに入り、簡単な動作確認
docker exec -it --user root my-mysql bash -p
root@hostname:/# mysql -u root -h localhost -p
Enter password: mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.20 MySQL Community Server - GPL
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> SELECT table_catalog,table_schema,table_name,table_type FROM information_schema.tables;
省略
mysql> exit
Bye
root@hostname:/# exit
コンテナの停止と次回以降の開始
docker stop my-mysql
docker start my-mysql
PostgreSQL
参考URL
https://hub.docker.com/_/postgres
コンテナを起動
docker run -it --name my-postgres -e POSTGRES_PASSWORD=postgres -d postgres:latest
コンテナ起動状況を確認
docker logs -f my-postgres
次のメッセージが表示されたらOK。
database system is ready to accept connections
コンテナに入り、簡単な動作確認
docker exec -it --user root my-postgres bash -p
root@hostname:/# psql -h localhost -p 5432 -U postgres
psql (12.3 (Debian 12.3-1.pgdg100+1))
Type "help" for help.
postgres=# SELECT table_catalog,table_schema,table_name,table_type FROM information_schema.tables;
省略
postgres=# exit
root@hostname:/# exit
コンテナの停止と次回以降の開始
docker stop my-postgres
docker start my-postgres