こんにちは、櫻井です。
今回はDockerを使って、環境構築に時間をかけずにredmineをインストールする方法をご紹介します。
1からredmineを構築しようとした場合、サーバのインストールやDBのインストール、Rubyのインストールなどを依存関係にも注意しながら構築していく必要があります。
Dockerを使うことで構築にかける時間を短縮し、環境設定をコード化しておくことで再利用性を高めることが今回の目的です。
また今回は前編なので、docker-compose.ymlについてはDocker社のオフィシャルイメージの”How to use this image” にあるサンプルをそのまま使用して構築します。ボリュームの永続化の方法や、ファイルに記述されたコマンドの説明などは後編で行います。
目次
今回必要な知識
Dockerイメージ
Dockerコンテナを立ち上げるために必要なパッケージです。イメージはDockerfileからオリジナルで作成することも可能ですが、Docker Hub というところからダウンロードすることも出来ます。このイメージから “mysql” や “python” や “ubuntu” 等の環境をコンテナとして構築することが出来ます。
Dockerコンテナ
Dockerイメージから作成された実体です。複数作成されたコンテナは互いに影響せず、隔離された実行環境です。
Docker Compose
docker-compose.ymlというファイルに記述された情報をもと必要なコンテナ群を一度に起動・停止したり隔離されたコンテナ同士の連携をしたりなど、複数のコンテナをまとめて管理するためのツールです。
Dockerを使うメリット
- 環境の構築が簡単にできる
Dockerイメージからコンテナを作成することで、素早く環境を構築することが出来ます。
- 環境の作り直しがしやすい
環境を間違えて破壊してしまった場合や、作り直したいなどの時はコンテナを一度削除して起動するだけで作り直すことが出来ます。
- 他のアプリケーションとの競合を意識せずに構築できる
「こっちのアプリケーションではMySQL8.0を使いたいけど、他のアプリケーションではMySQL5.7を使いたい」といった問題もコンテナを使うことで簡単に解決できます。そのため、1台のサーバに複数のアプリケーションを同居させることも容易になります。
- 再利用性が高い
一度 Dockefile やdocker-compose.ymlを作成してしまえば、開発環境で構築した内容を本番環境でもすぐに構築することが出来ます。また環境の差異も極めて少ないので、「開発環境では動いたけど本番環境では動かない」ということも少なくなります。
前提
- EC2にログインすることができる
- セキュリティーグループで8080番ポートを開けている
Dockerを使ってredmineを構築する
では実際にDockerを使ってEC2にredmineを構築するので、EC2にログインしてください。
今回EC2のイメージはAmazon Linux 2 を使用しています。(他のイメージの場合はコマンドに差異がある可能性があることに注意してください。)
Dockerをインストールする
EC2内のパッケージを最新にします。
1 |
$sudo yum update -y |
Docker をインストールします。
1 |
$sudo amazon-linux-extras install -y docker |
インストール出来ているかの確認をします。”docker -v” と入力してバージョンの情報が出力されていればOKです。
1 2 3 |
$docker -v Docker version 20.10.13, build a224086 |
Dockerを起動します。
1 |
$sudo systemctl start docker |
Dockerの自動起動設定をしておきます。
1 |
$sudo systemctl enable docker |
起動の確認をします。
1 |
$sudo systemctl status docker |
① Loaded : /usr/lib/systemd/system/docker.service; “enabled”になっていれば自動起動の設定ができています。
②Active : active (running) となっていれば起動ができています。
DockerをインストールするとOSにdockerグループが作成されます。
今ログインしているユーザ(今回はec2-user)をdockerグループに追加します。Dockerグループにユーザを追加することでsudo コマンド無しでDockerのコマンドを使うことができるようになります。
1 |
$sudo usermod -a -G docker ec2-user |
グループの設定を反映させるために一度ログアウトしてから再度ログインしておいてください。
Docker Composeをインストールする
今回はpipコマンドでDocker Composeのインストールを行うため、Pythonとpipをインストールします。
1 |
$sudo yum install -y python3 python3-pip |
pipを使ってDocker Composeをインストールします。
1 |
$sudo pip3 install docker-compose |
Docker Composeがインストール出来ているかの確認をします。
1 2 3 |
$docker-compose --version docker-compose version 1.29.2, build unknown |
もし “command not found” と表示された場合は以下のコマンドでシンボリックリンクを作成し、再度
“docker-compose —version”
を実行してみてください。
1 |
$sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose |
Docker Hubで今回の構築に必要なDockerイメージを探す
今回redmineを構築するので、redmineのDockerイメージを探します。
Docker Hub にアクセスし、検索ボックスに “redmine” と入力して検索します。
検索結果から、今回はDocker社のオフィシャルイメージのredmineを使うことにします。
オフィシャルイメージに移動し、ページの中間あたりに ”How to use this image” というものがあるので見てみると、Docker Composeのためのサンプルが用意されているので、これをもとにdocker-compose.yml を作成していきます。
docker-compose.ymlを作成する
ここからは、Dockerコンテナを一括管理及び連携させるためのdocker-compose.ymlというファイルを作成していきます。
冒頭でも触れましたが、ボリュームの永続化の方法や、ファイルに記述されたコマンドの説明などの詳細は後編で行います。データの永続化をしていないコンテナを削除した場合、データベースのデータや、アップロードしたファイルなどは削除されてしまうことに注意してください。
まずはdocker-compose.ymlを配置する任意のディレクトリを作成し、移動します。
1 2 |
$mkdir -p /home/ec2-user/blog/redmine $cd /home/ec2-user/blog/redmine |
docker-compose.ymlを作成し、テンプレートをそのままコピペして保存します。
このファイル名は必ずdocker-compose.ymlにしてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$vim docker-compose.yml 以下を記述します。 version: '3.1' services: redmine: image: redmine restart: always ports: - 8080:3000 environment: REDMINE_DB_MYSQL: db REDMINE_DB_PASSWORD: example REDMINE_SECRET_KEY_BASE: supersecretkey db: image: mysql:5.7 restart: always environment: MYSQL_ROOT_PASSWORD: example MYSQL_DATABASE: redmine |
保存ができたら、docker-compose.ymlが配置されたディレクトリで以下のコマンドを実行してください。
docker-composeコマンドはdocker-compose.ymlがあるディレクトリでしか作用しません。
1 |
$docker-compose up -d |
docker-compose.ymlの情報からコンテナが起動します。
初めてイメージを利用する場合はダウンロードするため少し時間がかかります。
起動できているかの確認をしてみます。
1 |
$docker-compose ps |
以下の画像のように State が UpになっていればOKです。
最後にブラウザからアクセスしてみます。
http://EC2インスタンスのパブリックip:8080
でアクセスしてください。以下のように接続できれば成功です。
また、初期設定では
ログインID : admin
パスワード : admin
でログインすることが出来ます。
まとめ
これでDockerを使ってEC2にredmineを構築することが出来ました。1から構築するより格段に早く構築することが出来たと思います。
また後編では、今回説明を省略したボリュームの永続化やコマンドの説明などを踏まえてdocker-compose.ymlをカスタマイズしていこうと思います。
一緒に働く仲間を募集中!
ギークフィードではAWSエンジニアを募集しています。
興味がある方はこちらからエントリーをしてぜひ一緒に働きましょう!
- 特定の時間あたりのlambda実行数をSlackに通知する - 2023-12-23
- 公衆電話からでも使える電話帳サービスをLEX + AmazonConnectで作ってみた - 2023-12-19
- SQSを使ってlambdaを10秒ごとに定期実行する - 2023-12-14
- Slack と AWS の電話番号登録アプリ – Bolt + CDK ソースコード解説 - 2023-03-26
- SlackとAWSを組み合わせた電話番号登録アプリの開発 – Boltフレームワーク+CDKで作ってみた - 2023-03-26