LoginSignup
5
3

More than 3 years have passed since last update.

Windows10 Home環境にDocker DesktopをインストールしてOracle Databaseのイメージを動かす

Last updated at Posted at 2021-01-24

本投稿の背景

自宅PC(Windows Home環境)でDockerを触ってみようというのと、
さらにOracle Databaseも簡単に環境セットアップしたいなと思ったのが背景です。

本投稿で実施する内容

1.Windows10 Home(64bit)環境にDocker Desktopをインストール
2.Docker HubからOracle Database Enterprise EditionのイメージをPull  
3.Pullしたイメージを使用してコンテナを起動
image.png

1.Windows10 Home環境にDocker Desktopをインストール

Docker Desktopをインストール

https://www.docker.com/products/docker-desktop

ダウンロードした、Docker Desktop Installer.exe を実行
2つのチェックはそのままで、[OK]をクリック

インストールが終わったら、OSを再起動

OS再起動すると Dockerが起動します。
※OS起動時にDocker起動しないようにするには、DockerDesktopの[Setting]-[General]で
 [Start Docker Desktop when you log in]のチェックを外します

起動時に「An error occurred」とエラーがでる

上記リンク
https://docs.docker.com/docker-for-windows/troubleshoot/#virtualization 
を確認。

私の環境は、
・[Windowsの機能の有効化または無効化]で
「Linux用Windowsサブシステム」、「仮想マシンプラットフォーム」にチェックが入っている。
・仮想化機能を有効にするためのBIOS設定は[有効]。
・[Hyper-V]がOFFになっていました ★
  →こちらの記事 Hyper-VのON・OFFを簡単に自動化すっぞ!! を参考に
   Hyper-VをONにしたところ、「An error occurred」のエラーはでませんでした。
   
再度、Docker Desktopを起動(デスクトップにある、Docker Desktopで起動)
image.png

再びメッセージが出力されます

メッセージにある、https://aka.ms/wsl2kernel の[x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ]をクリックすると、wsl_update_x64.msi がダウンロードされますので、
ダウンロードが完了したら、こちらを実行します。

[Next]をクリック

[Finish]をクリック

[Restart]をクリック

Docker Desktopの画面が起動するので、[Skip tutorial]をクリック

コンテナがなにも起動していない状態と表示されている

Docker Desktopでサンプルコンテナを起動

Power Shellを起動

Dockerのバージョン確認

※Dockerがインストールされているかの確認

docker version

image.png

イメージの確認

docker images

イメージはない状態
image.png

コンテナ稼働状態の確認

docker ps -a

コンテナはまだ作成されていない状態
image.png

サンプルのコンテナを起動

getting-startedのイメージを使用して、コンテナ名はtutorial、コンテナのポート80は、ホストマシンのポート80に割り当てコンテナを起動。

docker run -d --name tutorial -p 80:80 docker/getting-started 

コンテナ稼働状態の確認

docker ps -a

runコマンドでしていしたtutorial という名前のコンテナが起動している。(STATUS が UP になっている)

image.png

ブラウザで localhost と入力

image.png

Getting Started のページが表示される
image.png

イメージの確認

docker images

runコマンドで指定した、getting-startedのImageがある
image.png

コンテナを停止、状態確認

docker stop <コンテナ名>
docker ps -a

STATUSがExitになり、コンテナが停止。
image.png

コンテナを削除

docker rm <コンテナ名>
docker ps -a

image.png

イメージを削除、確認

docker rmi <イメージ名>
docker images

イメージ削除後、docker images で確認してイメージが削除されたことを確認。
image.png

2.Docker HubからOracle DatabaseイメージをPull

Dockerイメージの入手方法

イメージの入手方法は2つあり、「ビルド済のイメージを使用する方法」と「ビルド用のイメージを入手して自分でビルドする方法」があります。

1.ビルド済のイメージを使用する方法
 ・Oracle Container Registry(https://container-registry.oracle.com)
 ・Docker Hub(https://store.docker.com)
2.ビルド用のイメージを入手して自分でビルドする方法
  ・Github(https://github.com/oracle/docker-images)

本投稿では、少ない手順でOracle Databaseのコンテナを使用したいので「ビルド済のイメージを使用する方法」を選択します。

Oracle Container Registryのイメージは、
「商用ライセンスまたはオラクル・トライアル・ライセンス契約」となっており、今回は個人で使用するのですが、トライアルライセンスの場合、「トライアル期間」は、 このトライアル・ライセンスの諸条件を受諾した日から30日となります。
※ライセンスについての詳細はOracle Container Registryにログインして内容を確認ください

Docker Hubのイメージは、
OTNライセンスとなっており、今回は学習用として使用しますのでDocker Hubのイメージを使用します。
※ライセンスについての詳細はDocker Hubにログインして内容を確認ください

本投稿では、Docker Hubのビルド済のイメージを使用します

Docker Hubを利用するためアカウント作成

Docker HubにあるOracle Databaseのイメージを使用するため、Docker Hubが利用できるようにアカウントを作成します。

Docker Hubにアクセスして、アカウント作成

https://hub.docker.com/
 

登録したemailにメールが届く

[Verify email address]をクリック

Docker ID、パスワードでSign In

Oracle Database Enterprise Editon のイメージを検索


利用規約を確認して[Proceed Checkout]をクリック

各種情報を入力して、[Get Content]をクリック

Oracle Database Enterprise Editon のイメージをPull

Power Shellを起動して、Docker Hubにログイン

docker login

Docker IDとパスワードを入力

Oracle Database Enterprise Edition のイメージをPull

docker pull store/oracle/database-enterprise:12.2.0.1
docker images

docker images で イメージがPullされていることを確認

3.PullしたOracle Database Enterprise Editionのイメージを使用してコンテナを起動

docker runコマンドでコンテナを起動

docker run -d -it --name orcl -p 1521:1521 -v C:\app\oradata:/ORCL store/oracle/database-enterprise:12.2.0.1

コンテナ名をorcl、1521ポートをホストマシンのポート1521に割り当て、oracleで使用するファイル群をホストマシンの c:\app\oradata に作成して、コンテナを起動しています。

-v オプションを指定しない場合、oracle で使用するファイル群は コンテナ内に作成されます。
コンテナを削除するとファイルも削除されてしまうため、それを回避する場合、-v オプションを指定してファイルを外部に作成します。

※上記のdocker run のパラメータは、Docker HubのOracle Database Enterprise Edition のものとなります。Oracle Container Registry や Github のイメージをビルドする場合、
ドキュメントを確認ください(それぞれ、若干パラメータが違います)

DB作成に少し時間がかかります。作成状況を確認する場合、docker logs で状況を確認します。

docker logs <コンテナ名>

「Done ! The database is ready for use .」と出ればDBは使える状態になっています。
image.png

作成されたコンテナを確認

docker ps -a 

image.png

設定されている設定項目

設定項目 設定値
DB_SID ORCLCDB
DB_PDB ORCLPDB1
DB_MEMORY 2GB(sga_target:1280M、pga_aggregate_target:768M
DB_DOMAIN localdomain
sysのパスワード Oradoc_db1

ホストマシンからsqlplusでDBに接続

コンテナの1521ポートがホストの1521ポートに割り当てられているので、1521ポートを指定してDB接続。

C:\> sqlplus sys/Oradoc_db1@localhost:1521/ORCLCDB.localdomain as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Sun Jan 24 21:57:22 2021

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Last Successful login time: Sun Jan 24 2021 21:51:11 +09:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL>
SQL>
SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL>
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB1                       READ WRITE NO
SQL>

コンテナに接続

docker exec でコンテナに接続して、DBにローカル接続。

docker exec -it orcl  bash 
[oracle@6dddfb8fbe94 /]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Sun Jan 24 13:02:29 2021

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB1                       READ WRITE NO
SQL>

コンテナを停止

docker stop <コンテナ名>
docker ps -a

image.png

コンテナ停止の際、DBのアラートログを見ると、DBをshutdown immediate でDBをシャットダウンしていました。
image.png

[検証その1] テーブルを作成して、コンテナ停止→起動でテーブルが残っているか確認

pdbに接続して、scottユーザを作成し、テーブル[test]を作成。

C:\> sqlplus sys/Oradoc_db1@localhost:1521/ORCLCDB.localdomain as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Sun Jan 24 13:02:29 2021

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB1                       READ WRITE NO
SQL>

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB1                       READ WRITE NO

SQL> alter session set container="ORCLPDB1";

Session altered.

SQL> create user scott identified by Welcome1!;
create user scott identified by Welcome1!

SQL>exit


C:\>sqlplus scott/Welcome1!@localhost:1521/ORCLPDB1.localdomain

SQL*Plus: Release 12.2.0.1.0 Production on Sun Jan 24 22:23:58 2021

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL>
SQL> create table test(col1 number);

Table created.

SQL> desc test
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL1                                               NUMBER

SQL>

この状態でコンテナ停止→起動

docker stop <コンテナ名>
docker start <コンテナ名>

コンテナ起動後、sqlplus で接続してテーブル確認

C:\>sqlplus scott/Welcome1!@localhost:1521/ORCLPDB1.localdomain

SQL*Plus: Release 12.2.0.1.0 Production on Sun Jan 24 22:32:00 2021

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Last Successful login time: Sun Jan 24 2021 22:23:59 +09:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> desc test
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL1                                               NUMBER

→結果は、テーブルは残っていることを確認

[検証その2] コンテナを削除→docker run(Oracleのファイル群は -v オプションで使用したディレクトリを指定して再利用)でテーブルが残っているか確認

コマンドは以下を実行。
コンテナ停止、コンテナ削除、コンテナ起動。DB作成が完了したかは docker logs で確認。

docker stop <コンテナ名>
docker ps -a 
docker rm <コンテナ名>
docker run -d -it --name orcl -p 1521:1521 -v C:\app\oradata:/ORCL store/oracle/database-enterprise:12.2.0.1
docker ps -a
docker logs <コンテナ名>

docker logs で「Done ! The database is ready for use .」が出力されたのを確認後、
sqlplus で接続して確認。

C:\>sqlplus scott/Welcome1!@localhost:1521/ORCLPDB1.localdomain

SQL*Plus: Release 12.2.0.1.0 Production on Sun Jan 24 23:11:54 2021

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Last Successful login time: Sun Jan 24 2021 22:32:00 +09:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> desc test
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL1                                               NUMBER

SQL>

結果は、
コンテナ削除する前に作成したテーブルがあることを確認。

-v オプションで指定したディレクトリのデータファイル群があれば、コンテナ削除しても、別ホストでコンテナ起動しても、DBのデータは引き継ぐことができることが確認できました。

5
3
0

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
5
3