docker + docker composeでRHELを使う
TL;DR
ローカルのRHELコンテナ環境を試しに作ってみたときの備忘録です。
docker composeを使用してRHEL8(ubi)とRHEL8(python-39)コンテナを作成しました。
(最新では既にRHEL9のコンテナイメージがありますね。。。)
前提環境
OS: Windows11(wsl2)
Docker: version 25.0.3
Docker Compose: version v2.24
wsl上でdockerおよびdocker composeコマンドを使います。
事前準備
作業ディレクトリ作成
下記コマンドでRHELコンテナ環境構築で作業するディレクトリを作成します。
$ mkdir rhelContainer
$ mkdir -p rhelContainer/rhel8
$ mkdir -p rhelContainer/py39_rhel8
また、本記事ではdocke-composeファイルとDockerfileを使用するので、touch <file name>
コマンドで作成しておきます。
(先に作成しなくても大丈夫です。本記事ではディレクトリ・ファイル構成を示すために先に作成しています。)
今回の例では下記のような構成となります。
(tree
コマンドがない場合は、sudo apt update
した後にsudo apt install tree
で最新verをインストールできます。)
$ tree
.
├── compose.yml
├── py39_rhel8
│ └── Dockerfile
└── rhel8
└── Dockerfile
使用するイメージの検索
使用するコンテナイメージを探します。
Red Hat UBIイメージはregistry.access.redhat.com/ubi
にあるので、docker search
コマンドで確認できます。
$ docker search registry.access.redhat.com/ubi
NAME DESCRIPTION STARS OFFICIAL
ubi9/go-toolset rhcc_registry.access.redhat.com_ubi9/go-tool… 0
ubi8/go-toolset Platform for building and running Go 1.11.5 … 0
ubi8/openjdk-8-runtime OpenJDK 1.8 runtime-only image on Red Hat Un… 0
...
今回の例では下記2つを利用します。
- ubi8/ubi
- ubi8/python-39
環境構築手順
RHEL8(UBI)コンテナ
ubi8/ubi用のDockerfile設定を記載します。
追加パッケージとしてvimとhostnameパッケージを入れるようにしています。
hostname
コマンドはipアドレスを調べるために入れています。ip
コマンドを入れたい場合はiprouteパッケージをインストールしてください。
(--disableplugin=subscription-manager
オプションをいれるとsubscription-managerに関するメッセージを非表示にできます。)
FROM registry.access.redhat.com/ubi8/ubi
RUN mkdir /my_work
ARG my_work_dir=/my_work
WORKDIR $my_work_dir
RUN dnf -y install --disableplugin=subscription-manager vim
RUN echo "set number" >> ~/.vimrc
RUN echo "set encoding=utf-8" >> ~/.vimrc
RUN echo "set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8" >> ~/.vimrc
RUN echo "set fileformats=unix,dos,mac" >> ~/.vimrc
RUN dnf -y install --disableplugin=subscription-manager hostname
# RUN dnf -y install --disableplugin=subscription-manager iproute
RHEL8(python39)コンテナ
次にubi8/python-39用のDockerfile設定を記載します。
このコンテナイメージにはhostname
コマンドが入っているので、インストールしません。
単にイメージの記載のみしています。
FROM registry.access.redhat.com/ubi8/python-39
optional:ネットワーク設定(固定ip)
optionalですが、ipアドレスを固定する場合の設定をします。(参考)
docker composeファイルで各サービスとネットワークで設定をする必要があります。
networks:
my-network:
ipv4_address: 192.168.1.2
networks:
my-network:
ipv4_address: 192.168.1.3
networks:
my-network:
ipam:
driver: default
config:
- subnet: 192.168.1.0/24
docker composeファイル
上記の設定などを含めたdocker composeファイルの例は下記となります。
作成されるコンテナ名やVMのhostnameなども指定しています。
(VM動詞はサービス名で疎通できるので、サービス名とhostnameを合わせたほうが良さそうですね。。。)
services:
rhel:
build:
context: ./rhel8
dockerfile: Dockerfile
container_name: my-rhel8-container
hostname: my-rhel8
tty: true
networks:
my-network:
ipv4_address: 192.168.1.2
py39:
build:
context: ./py39_rhel8
dockerfile: Dockerfile
container_name: my-py39-rhel-container
hostname: my-py39-rhel
tty: true
networks:
my-network:
ipv4_address: 192.168.1.3
depends_on:
- rhel
entrypoint: /bin/bash
networks:
my-network:
ipam:
driver: default
config:
- subnet: 192.168.1.0/24
環境実行と確認
環境を実行し、簡易的な確認をします。
コンテナ環境の開始
下記コマンドでコンテナ環境を開始します。
$ docker compose up -d
...
[+] Running 2/3
⠸ Network rhelContainer_my-network Created 1.3s
✔ Container my-rhel8-container Started 0.8s
✔ Container my-py39-rhel-container Started 0.9s
RHEL8環境の確認
ubi8/ubiコンテナに入って、hostname, ipアドレス, OSの確認をしてみます。
$ docker-compose exec rhel bash
[root@my-rhel8 my_work]# hostname
my-rhel8
[root@my-rhel8 my_work]# hostname -I
192.168.1.2
[root@my-rhel8 my_work]# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.9 (Ootpa)
[root@my-rhel8 my_work]# exit
RHEL8(python39)環境の確認
次にubi8/python-39コンテナに入って、hostname, ipアドレス, OSの確認をしてみます。
$ docker-compose exec py39 bash
(app-root) bash-4.4$ hostname
my-py39-rhel
(app-root) bash-4.4$ hostname -I
192.168.1.3
(app-root) bash-4.4$ cat /etc/redhat-release
Red Hat Enterprise Linux release 8.9 (Ootpa)
(app-root) bash-4.4$ exit
コンテナ環境の停止、削除
コンテナ環境を停止する場合は、docker compose stop
コマンドを実行します。(削除はしない)
docker compose down
コマンドでは、upで作成したコンテナとネットワークを削除します。(デフォルト)
下記コマンドでは、オプション--rmi all
をつけてイメージも削除しています。ボリュームを削除する場合は-v
または--volumes
オプションでvolumesセクションの名前付きボリュームを削除できます。
$ docker compose down --rmi all
[+] Running 5/5
✔ Container my-py39-rhel-container Removed 0.4s
✔ Container my-rhel8-container Removed 0.5s
✔ Image rhelContainer-rhel:latest Removed 0.0s
✔ Image rhelContainer-py39:latest Removed 0.0s
✔ Network rhelContainer_my-network Removed 0.2s
その他
今回はpython39のコンテナイメージを利用しましたが、他にもたくさんのイメージがあるので使ってみたいです。
Discussion