LoginSignup
0
0

EC2上のRHEL8 にDockerコンテナ作る

Last updated at Posted at 2023-08-30

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で立ち上げるまでを記載する。

やること

  1. AWS EC2をAMIイメージのRHEL8を利用して起動しssh接続
  2. Podmanインストール
  3. Docker-composeでwordpressを起動する

1 AWS EC2をAMIイメージのRHEL8を利用して起動

  1. AWS EC2コンソールにログインし、インスタンスを起動

    • マシンイメージ(AMI)は検索窓にRHEL等打てばRHEL8のイメージが見つかるのでそれを選択する
    • キーペアは新しいキーペア作ると公開鍵がダウンロードフォルダに保存される
    • セキュリティグループも作成
    • ストレージも任意で設定
  2. 起動できたら、EC2コンソールからパブリックIPアドレスを控えておく(EC2を起動すると毎回変わるので、起動後はここのIPを確認)

  3. 公開鍵の設定

    • (windowsの場合)ダウンロードした.pemファイルをダウンロードフォルダからCドライブ>ユーザー>ユーザー名>.sshへ移動させる

    • .sshのフォルダがない場合は、新たに作成し、移動させる

    • もし.sshのフォルダは隠しファイルのため、表示されない場合は、表示タブ>隠れファイルにチェックを入れ確認する

  4. ssh接続

    ssh -i ~/.ssh/鍵の名前.pem  ec2-user@パブリックIPアドレス
    
    • 接続を続けるかメッセージが初回だけ出る(IPが変わると毎回)のでyesを打つ
    Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
    
  5. EC2にログインできたらRHELのバージョンを確認

    [root@rhel77 ~]# cat /etc/redhat-release
    Red Hat Enterprise Linux Server release xxxxxx
    

    無事RHEL8でEC2が起動していることを確認

2. Podmanインストール

  1. 以下のコマンド打って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      |~~
    
  2. 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
    
    
  3. コンテナ間通信するためにプラグインをインストール

    $ 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!
    
  4. 常時起動しているように設定

    sudo su -
    
    # podman.socketの自動起動設定
    systemctl enable podman.socket
    
    # podman.socketの起動
    systemctl start podman.socket
    

3.Docker-composeでwordpressを起動する

今回はパブリックIPで接続してみたいためパブリックIPからの接続検証をする

立てるコンテナ

  • wordpress
  • MySQL
  1. 任意のディレクトリを作ってdocker-compose.yamlを作成する。

    mkdir wordpress_project
    cd wordpress_project
    
    touch docker-compose.yaml
    vi docker-compose.yaml
    
    Docker-compose.yaml
    version: '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
    

    (ボリュームの記載をしてないので、データ永続化させる場合はボリューム情報記載してください。)

 

  1. EC2のセキュリティグループを修正

    1. EC2コンソールの左ペインからセキュリティグループ>EC2が紐づいてるセキュリティグループをクリック

    2. インバウンドルールを編集押してHTTP (ポート 80) および MySQL (ポート 3306) のトラフィックを許可する

  2. コンテナ起動

    普通に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
    
  3. サイトへアクセス

http://<EC2のパブリックIPアドレス> をブラウザで開いて接続する

言語を選ぶようなwordpressの設定画面が出ればOKです。

ちなみに

サイトアクセス時に

Error establishing a database connection

と出ている場合は、コンテナ間通信ができてない可能性があるので、

sudo yum install podman-plugins

でプラグインをインストールし、立ち上げ直せば出るかもです。

それでも出ない場合、データベースの設定が正しくない可能性があるのでdocker-copmose.ymlやセキュリティグループを見直してみてください。

参考サイト

Red Hat Enterprise Linux 8 で Docker を使う

0
0
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
0
0