39.2.4 LinuxコンテナでのCOBOL2002の使用例
ここでは,ホスト上のファイルを入出力するCOBOLプログラムをDockerイメージに取り込んで,コンテナ起動時に実行する手順を例に説明します。
この使用例では,コンテナを起動すると,COBOLプログラムが実行されて,ホスト上のファイルのデータが,ホスト上の別のファイルへ書き出されるという一連の処理を実現できます。
- 〈この項の構成〉
(1) COBOLプログラムの作成
COBOLプログラムの作成例を次に示します。
このCOBOLプログラムでは,入力ファイルからデータを読み込み,読み込んだデータを出力ファイルへ書き出します。この例では,実行可能ファイルを「sample.out」とします。
IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE1. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT FILE-1 ASSIGN TO SYS010. …1. SELECT FILE-2 ASSIGN TO SYS020. …2. DATA DIVISION. FILE SECTION. FD FILE-1. 01 FILE-1-REC PIC X(30). FD FILE-2. 01 FILE-2-REC PIC X(30). PROCEDURE DIVISION. OPEN INPUT FILE-1 OUTPUT FILE-2. READ FILE-1. MOVE FILE-1-REC TO FILE-2-REC. WRITE FILE-2-REC. CLOSE FILE-1 FILE-2. STOP RUN. END PROGRAM SAMPLE1.
- 説明
-
-
COBOLプログラムの入力ファイルを指定します。
ここでは,COBOLプログラム実行時に,環境変数CBL_SYS010に指定された物理ファイル名を入力ファイルとします。
-
COBOLプログラムの出力ファイルを指定します。
ここでは,COBOLプログラム実行時に,環境変数CBL_SYS020に指定された物理ファイル名を出力ファイルとします。
-
(2) COBOLプログラムの格納
Dockerfile格納ディレクトリ下に作業ディレクトリを作成し,「(1) COBOLプログラムの作成」で作成したCOBOLプログラム(sample.out)を格納します。この例では,Dockerfile格納ディレクトリの作業ディレクトリを「sample」とします。
[/]# cd <Dockerfile格納ディレクトリ>/sample [<Dockerfile格納ディレクトリ>/sample]# ls sample.out
(3) Dockerイメージの作成
「39.2.1 COBOL2002をLinuxコンテナに取り込む方法」に従って,ベースとなるDockerイメージを作成します。この例では,Dockerイメージ名を「cobol2002serversuite:0460」とします。
(4) Dockerfileの作成
COBOLプログラムをDockerイメージに取り込むためのDockerfileを作成します。また,COBOLプログラムからファイルにアクセスするために,環境変数でCOBOLプログラムのファイル名に対して,物理ファイル名を割り当てます。
記述例を次に示します。
FROM cobol2002serversuite:0460 …1. RUN mkdir /tmp/sample …2. COPY sample /tmp/sample …3. WORKDIR /tmp/sample …4. RUN mkdir /tmp/mntdir …5. ENV CBL_SYS010 /tmp/mntdir/file01 …6. ENV CBL_SYS020 /tmp/mntdir/file02 …7. CMD ./sample.out …8.
- 説明
-
-
ベースとなるDockerのイメージを指定します。この例では,「(3) Dockerイメージの作成」で作成した「cobol2002serversuite:0460」を指定しています。
-
コンテナに作業ディレクトリを作成します。この例では,コンテナの作業ディレクトリを「/tmp/sample」とします。
-
「(2) COBOLプログラムの格納」でDockerfile格納ディレクトリの作業ディレクトリにコピーしたCOBOLプログラムを,コンテナの作業ディレクトリにコピーします。
-
カレントディレクトリをコンテナの作業ディレクトリに位置づけます。
-
ホスト側のディレクトリをマウントするコンテナ側のディレクトリを作成します。コンテナは,ホスト側のディレクトリをマウントして起動します。この例では,ホスト側のディレクトリを「/tmp/hostdir」,コンテナ側のディレクトリを「/tmp/mntdir」とします。
-
環境変数CBL_SYS010に物理ファイル名(/tmp/mntdir/file01)を指定して,COBOLプログラムで使用する入力ファイルを割り当てます。コンテナを起動する前に,コンテナ側のディレクトリにマウントされるホスト側のディレクトリ(/tmp/hostdir)に,ファイル(file01)を作成しておいてください。
-
環境変数CBL_SYS020に物理ファイル名(/tmp/mntdir/file02)を指定して,COBOLプログラムで使用する出力ファイルを割り当てます。
-
コンテナ起動時に実行するCOBOLプログラムを指定します。
-
(5) COBOLプログラムのDockerイメージへの取り込み
「(4) Dockerfileの作成」で作成したDockerfileを指定して,docker buildコマンドを実行します。この例では,Dockerイメージ名を「cobol2002_sample:0460」とし,Dockerfile格納ディレクトリをカレントディレクトリに位置づけてからコマンドを実行しています。
[/]# cd <Dockerfile格納ディレクトリ> [<Dockerfile格納ディレクトリ>]# ls Dockerfile local.repo media
COBOLプログラムを実行するDockerイメージが,Dockerfile格納ディレクトリに作成されます。
(6) コンテナの起動
docker runコマンドで,ホスト側のディレクトリをコンテナ側のディレクトリにマウントして,コンテナを起動します。この例では,ホスト側ディレクトリを「/tmp/hostdir」,コンテナ側ディレクトリを「/tmp/mntdir」とします。また,Dockerイメージ名を「(5) COBOLプログラムのDockerイメージへの取り込み」で作成した「cobol2002_sample:0460」とします。各オプションについては,Dockerのドキュメントを参照してください。
[/]#docker run --name <コンテナの名前> --mount type=bind,source=/tmp/hostdir,destination=/tmp/mntdir cobol2002_sample:0460
コンテナを起動すると,COBOL2002プログラム(sample.out)が実行され,ホスト上のファイル(/tmp/hostdir/file01)のデータが,ホスト上の別のファイル(/tmp/hostdir/file02)へ書き出されます。