Skip to content
n-izawa edited this page Feb 1, 2022 · 3 revisions

Dockerイメージの利用

概要

opensource COBOLをDockerコンテナとして実行できることを、別ページにて記載しました。

ここでは、その応用として、DBと連携した開発環境をDocker Composeを利用して作成してみます。

Docker Compose環境の構築

インストール方法などは以下を参照してください。

Linux環境では、Docker環境の構築後、以下のようにコマンドでインストールします。 ※バージョン箇所は都度読み替えてください。

curl -L https://github.com/docker/compose/releases/download/1.3.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

開発環境ファイルの入手

以下リポジトリで、Docker Compose用のファイルとサンプルプログラムを配布しています。

まずはリポジトリをチェックアウトしてください。

git clone https://github.com/opensourcecobol/opensource-cobol-devel.git
cd opensource-cobol-devel/

Docker Compose用の定義ファイル(docker-compose.yml)では、opensource COBOL実行用コンテナoscobolと、Postgresql実行用コンテナdbを定義しています。
※Docker Imageの変更に伴い、docker-compose.ymlにenvironment以下を追記する必要があります。パスワードの設定が推奨されています(https://github.com/docker-library/postgres/issues/681)

        db:
                image: postgres:9.6
         # 以下を追記する
                environment:
                        POSTGRES_HOST_AUTH_METHOD: 'trust'
                        # POSTGRES_PASSWORD: 'postgres'

修正した設定ファイルを用いて、各コンテナを立ち上げます。

docker-compose up -d

コンテナが立ち上がったら、まずはDB側にデータベースを作成するため、以下コマンドを実行します。

docker-compose exec db createdb -U postgres testdb

次に、COBOL実行用のコンテナに入り、コンパイルと実行を行います。 今回は定義ファイル内で、srcおよびcpyフォルダについて、あらかじめコンテナから参照できるようにしています。

docker-compose exec oscobol /bin/bash

コンソールから、以下コマンドでプリコンパイル、コンパイルを行います。

ocesql src/INSERTTBL.cbl INSERTTBL.pre
cobc -locesql INSERTTBL.pre
ocesql src/FETCHTBL.cbl FETCHTBL.pre
cobc -locesql FETCHTBL.pre

コンパイルの完了後、各プログラムを実行すると、DBアクセスが確認できます。

  • INSETTBLは、DB上にテーブルempを作成し、データのINSERTを行うサンプルです。
  • FETCHTBLは、テーブルempからカーソルのフェッチにより、データを参照するサンプルです。
[root@e8ccda101772 oscobol]# cobcrun INSERTTBL
*** INSERTTBL STARTED ***
NOTICE:  table "emp" does not exist, skipping
*** INSERTTBL FINISHED ***
[root@e8ccda101772 oscobol]# cobcrun FETCHTBL
*** FETCHTBL STARTED ***
TOTAL RECORD: 0012
---- -------------------- ------
NO   NAME                 SALARY
---- -------------------- ------
0001 HOKKAI TARO             400
0002 AOMORI JIRO             350
0003 AKITA SABURO            300
0004 IWATE SHIRO            -250
0005 MIYAGI GORO            -200
0006 FUKUSHIMA RIKURO        150
0007 TOCHIGI SHICHIRO       -100
0008 IBARAKI HACHIRO          50
0009 GUMMA KURO             -200
0010 SAITAMA JURO            350
0046 KAGOSHIMA ROKURO       -320
0047 OKINAWA SHICHIRO        480
*** FETCHTBL FINISHED ***

サンプルと同様に、DBアクセスするプログラムを作成し、srcとcpyフォルダで参照することで、DBアクセスのプログラムを作成することができます。