はじめに
Amazon Linux AMIのサポート期間終了が2020年12月31日までと発表されました。今後はAmazon Linux 2での運用が必要となってきます。そこで、dockerhubで配布されているAmazon Linux 2のコンテナイメージを使って検証環境を構築してみます。
参考情報
- Dockerfile を書くベスト・プラクティス — Docker-docs-ja 17.06.Beta ドキュメント
- Dockerfileの書き方, 利用する命令, 作成手順 - わくわくBank
- 効率的に安全な Dockerfile を作るには - Qiita
- tfenvでTerraformのバージョン管理をする - Qiita
- Dockerで開発環境を仮想化する - Qiita
- Dockerの基本操作メモ - Qiita
- 増え続ける Dockerfile 用の GitHub Repository をなんとかする - Qiita
- Docker上のAmazonLinux2でLaravelの環境構築 - Qiita
- rbenv を利用した Ruby 環境の構築 | Developers.IO
- [TIPS] AWS CLIの「v1」と「v2」を共存させて使う方法 (Dockerコンテナ編) | Developers.IO
- Amazon LinuxをDockerで動かす | ハックノート
- GitHubとDockerHubを連携してDockerイメージを自動ビルドする方法(Automated Build) | Casual Developers Note
- bash - Dockerコンテナにログインしても.bash_profileで設定している環境変数が反映されない - スタック・オーバーフロー
Dockerfile & コンテナイメージ 成果物
作成したDockerfileとコンテナイメージはそれぞれ以下にあります。
- https://github.com/revsystem/Dockerfiles/tree/master/AmazonLinux2
- https://hub.docker.com/r/revsystem/amzn2
試した環境
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.15.4
BuildVersion: 19E287
$ docker --version
Docker version 19.03.8, build afacb8b
作成したDockerfileのビルドやコンテナ実行はMac OS上で行いました。
dockerhubのコンテナイメージの説明にこのように書かれているので、他の環境でも動作すると思います。
Where can I run Amazon Linux container images?
You can run Amazon Linux container images in any Docker based environment. Examples include, your laptop, in AWS EC2 instances, and ECS clusters.
Amazon Linux 2 on Docker にインストールするアプリケーション
Dockerfile内の環境変数でバージョン指定をしています。
Dockerfileを作成した時点の最新版を指定しています。コンテナを作って壊してを繰り返す使い方でなければコンテナ実行後にrbenvやpyenvを実行して必要なバージョンをインストールすることもできます。
- xpanes:4.1.1
- rbenv
- Ruby:2.7.1
- pyenv
- Python:3.8.2
- tfenv
- Terraform:0.12.24
- Ansible:2.9.7
- aws-cli:v2
Dockerfileは https://github.com/revsystem/Dockerfiles/tree/master/AmazonLinux2 に置いています。
Dockerイメージのビルドとコンテナ実行
Dockerfileを手元でビルドする場合。
Dockerイメージのビルド
git clone https://github.com/revsystem/Dockerfiles.git
cd Dockerfiles/AmazonLinux2
docker image build -t amzn2-awscliv2 .
コンテナ実行
docker container run -it amzn2-awscliv2 /bin/bash --login
ローカル環境のディレクトリをコンテナ上にマッピングする
~/.ssh
や~/.aws
をコンテナにマッピングする場合。
docker container run -it -v ~/.aws:/home/ec2-user/.aws -v ~/.ssh:/home/ec2-user/.ssh -v $(pwd):/home/ec2-user/aws amzn2-awscliv2 /bin/bash --login
dockerhub上のイメージを使ってコンテナ実行
手元でビルドするとPythonやRubyのビルドに時間がかかるため、そのまま使うだけであればこちらのほうが手軽です。
docker container run -it revsystem/amzn2 /bin/bash --login
Linuxユーザーとsudo
コンテナを実行すると ec2-user というユーザでログインします。 root 権限が必要な場合は sudo コマンドが使えます。ec2-userのパスワードはec2-user
です。
[ec2-user@59716cc68639 ~]$ sudo su -
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for ec2-user:
-bash-4.2#