LoginSignup
1
2

More than 3 years have passed since last update.

DockerでOracle、SQLServer、DB2、MySQL、PostgreSQLの試し方

Last updated at Posted at 2020-05-29

動機

使ったことがないリレーショナルデータベースを使う必要がでてきたときの覚書、後で見返す用。

対象のリレーショナルデータベースは、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
1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2