RHEL8ではDockerサポートしてないので、Podmanを利用する必要がある。
1.3. Docker を使用せずにコンテナーを実行 Red Hat Enterprise Linux 8 | Red Hat Customer Portal
Red Hat では、RHEL 8 から Docker コンテナーエンジンと、docker コマンドが削除されました。
RHEL で Docker を使用する場合は、異なるアップストリームプロジェクトから Docker を取得できますが、RHEL 8 では対応していません。
どうしてもDockerでないといけない場合、DockerのEnterprize版を使えばできるらしい。
https://docs.mirantis.com/mcr/23.0/compat-matrix/mcr-23.0-compatibility-matrix.html
(DockerのEnterPrize版はMirantis Container Runtimeに変わった)
PodmanはDockerコマンドを自動的に内部でPodmanコマンドに変換してくれるので、通常のDockerコマンドを打てばコンテナが立ち上がったりしてくれる。
Podmanの仕様などを調べるため、EC2上に簡単なwordpress+MySQL環境をdocker-composeで立ち上げるまでを記載する。
やること
- AWS EC2をAMIイメージのRHEL8を利用して起動しssh接続
- Podmanインストール
- Docker-composeでwordpressを起動する
1 AWS EC2をAMIイメージのRHEL8を利用して起動
-
AWS EC2コンソールにログインし、インスタンスを起動
- マシンイメージ(AMI)は検索窓にRHEL等打てばRHEL8のイメージが見つかるのでそれを選択する
- キーペアは新しいキーペア作ると公開鍵がダウンロードフォルダに保存される
- セキュリティグループも作成
- ストレージも任意で設定
-
起動できたら、EC2コンソールからパブリックIPアドレスを控えておく(EC2を起動すると毎回変わるので、起動後はここのIPを確認)
-
公開鍵の設定
-
(windowsの場合)ダウンロードした.pemファイルをダウンロードフォルダからCドライブ>ユーザー>ユーザー名>.sshへ移動させる
-
.sshのフォルダがない場合は、新たに作成し、移動させる
-
もし.sshのフォルダは隠しファイルのため、表示されない場合は、表示タブ>隠れファイルにチェックを入れ確認する
-
-
ssh接続
ssh -i ~/.ssh/鍵の名前.pem ec2-user@パブリックIPアドレス
- 接続を続けるかメッセージが初回だけ出る(IPが変わると毎回)のでyesを打つ
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
-
EC2にログインできたらRHELのバージョンを確認
[root@rhel77 ~]# cat /etc/redhat-release Red Hat Enterprise Linux Server release xxxxxx
無事RHEL8でEC2が起動していることを確認
2. Podmanインストール
-
以下のコマンド打ってpodmanをインストールする
# Podmanのインストール sudo yum module install -y container-tools # インストールできたかを確認する podman --version # >podman version 4.4.1 # podman-dockerパッケージのインストール sudo yum install -y podman-docker # Dockerのバージョンを確認する docker --version # >Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg. # >podman version x.x.x # Docker動作確認(任意) docker run --rm hello-world
こんなんが出てくればOK
(hello worldではなくhello Podman worldなんだなー)
!... Hello Podman World ...! .--"--. / - - \ / (O) (O) \ ~~~| -=(,Y,)=- | .---. /` \ |~~ ~/ o o \~~~~.----. ~~ | =(X)= |~ / (O (O) \ ~~~~~~~ ~| =(Y_)=- | ~~~~ ~~~| U |~~
-
composeのインストール
composeを使うので以下コマンドを打ちcomposeをインストール
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose $ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose $ docker-compose version # >docker-compose version 1.29.2, build 5becea4c
-
コンテナ間通信するためにプラグインをインストール
$ sudo yum install podman-plugins Updating Subscription Management repositories. Unable to read consumer identity This system is not registered with an entitlement server. You can use subscription-manager to register.
途中でインストールサイズこれだけあるけどいい?って聞かれるのでyを押す
Total download size: 5.2 M Installed size: 16 M Is this ok [y/N]: y .................... ............ Complete!
-
常時起動しているように設定
sudo su - # podman.socketの自動起動設定 systemctl enable podman.socket # podman.socketの起動 systemctl start podman.socket
3.Docker-composeでwordpressを起動する
今回はパブリックIPで接続してみたいためパブリックIPからの接続検証をする
立てるコンテナ
- wordpress
- MySQL
-
任意のディレクトリを作ってdocker-compose.yamlを作成する。
mkdir wordpress_project cd wordpress_project
touch docker-compose.yaml vi docker-compose.yaml
Docker-compose.yamlversion: '3' services: wordpress: image: wordpress:latest ports: - "80:80" # パブリック IP アドレスからのアクセスを許可 environment: WORDPRESS_DB_HOST: mysql WORDPRESS_DB_USER: exampleuser WORDPRESS_DB_PASSWORD: examplepass WORDPRESS_DB_NAME: exampledb depends_on: - mysql mysql: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: examplepass MYSQL_DATABASE: exampledb MYSQL_USER: exampleuser MYSQL_PASSWORD: examplepass
(ボリュームの記載をしてないので、データ永続化させる場合はボリューム情報記載してください。)
-
EC2のセキュリティグループを修正
-
EC2コンソールの左ペインからセキュリティグループ>EC2が紐づいてるセキュリティグループをクリック
-
インバウンドルールを編集押してHTTP (ポート 80) および MySQL (ポート 3306) のトラフィックを許可する
-
-
コンテナ起動
普通にdocker-compose up すると権限がないので、できないのでsudoを付けて起動
sudo docker-compose up -d
起動ができたか念のため確認する
両方upになってればOK
$ sudo docker-compose ps Name Command State Ports -------------------------------------------------------------------------------------------- wordpress_project_mysql_1 docker-entrypoint.sh mysqld Up () 3306/tcp, 33060/tcp wordpress_project_wordpress_1 docker-entrypoint.sh apach ... Up () :80->80/tcp
-
サイトへアクセス
http://<EC2のパブリックIPアドレス>
をブラウザで開いて接続する
言語を選ぶようなwordpressの設定画面が出ればOKです。
ちなみに
サイトアクセス時に
Error establishing a database connection
と出ている場合は、コンテナ間通信ができてない可能性があるので、
sudo yum install podman-plugins
でプラグインをインストールし、立ち上げ直せば出るかもです。
それでも出ない場合、データベースの設定が正しくない可能性があるのでdocker-copmose.ymlやセキュリティグループを見直してみてください。
参考サイト
Red Hat Enterprise Linux 8 で Docker を使う