ローカル用Amazon Linux 2環境

目次

  1. 1. Amazon Linux とは
  2. 2. 今日の本題
  3. 3. いざ実践
    1. 3.1. Dockerfile
    2. 3.2. docker-compose.yml
    3. 3.3. 近景
  4. 4. 総括
amazon-linux-2

久しぶりにIT技術職っぽい記事です。

Amazon Linux とは

Amazon Linux 2 は、Amazon Web Services (AWS) の Linux オペレーティングシステムです。このサービスを使用すると、セキュリティ重視の、安全で高性能な実行環境、クラウドアプリケーションを開発および実行できます。Amazon Linux 2 は追加料金なしで利用できます。Amazon Linux 2 のセキュリティアップデートとメンテナンスアップデートは継続的に提供されます。

・Amazon Linux 2
こちらは RHEL7 / CentOS7 をベースとしていると言われております。Systemd が採用されていることからも、実際の操作は RHEL7/CentOS7 に近いです。

Amazon Linux 2 は Amazon EC2 の作成時に選択できるOSのひとつです。RHEL7をベースにしていると言われていますが公式から明言されているわけではないので定かではありません。とはいえ使ってみたかんじはCentOS 7に近いというのはかなり納得できるので概ね間違ってはいないと思います。

今日の本題

ここ半年くらい仕事でAWSにさわる頻度が劇的に増えました。僕自身はLinux環境を1からガッツリ作ったのは4,5年まえに1度だけやったきりで、そのときもネットで調べながらああでもないこうでもないと苦戦しながら進めただけで、あとは既存サーバーにたまにログインして少し操作とかする程度だったのでほぼ覚えていなかったのですが、仕事の都合で急遽やらざるをえなくなったので断片的な知識をどうにか組合せつつなんとかそれっぽいものを作ったりしていました。

それにあたり、EC2にあれこれインストールしたりすることも多いのですが、ぶっ壊したらまずいということもあってAMIをこまめに作りながらおっかなびっくりしていてなかなかスピードが上がらないこともあって、自分のローカル環境にEC2と同じものがあれば検証が楽なのになーと思うようになりました。

そんなときに Amazon Linux 2 の公式イメージがあることを知りました。
(基本的に特に理由がない限りは EC2 は Amazon Linux 2 で作っています)
amazonlinux - Official Image | Docker Hub

これを使えば自分のローカル環境に EC2 と同じものが用意できそう、ということでやってみたというのが今日の話です。

いざ実践

というわけで作ってみたものがこちらです。

先に紹介した Amazon Linux 2 の Docker イメージは実際の Amazon Linux 2 と完全に同じというわけではなくあくまでもベースだけのようです。そもそも Docker イメージって必要最低限なものだけを同梱しておくのが思想ということもあって、例えば Linux のコマンドや、その他普通の Linux 環境なら入っているだろうというパッケージも入っていなかったりします。

なので、公式の Docker イメージをもとに足りないものをいろいろ足してみて、VM感覚で使えるコンテナを作ってみた、というものです。

Dockerfile

というわけでとりあえず僕なりにいろいろ補完した Dockerfile を参考までに晒します。↑で貼った GitHub のリポジトリにも全く同じものがあるのでそっちを見てもらってもいいです。

# https://hub.docker.com/_/amazonlinux
FROM amazonlinux:2

# DL4006警告対応
# https://github.com/hadolint/hadolint/wiki/DL4006
SHELL ["/bin/bash", "-o", "pipefail", "-c"]

# amazon-linux-extras のインストール
RUN amazon-linux-extras install -y

# yum 関係と必要なものいろいろ入れる
RUN yum update -y && yum install \
git tree glibc-langpack-ja update-motd openssh-server vim hostname which procps systemd sudo tar unzip -y && yum clean all

# man コマンドを使えるようにする
# https://zenn.dev/okz/articles/39d7faa7a6d59a
RUN yum -y --setopt=tsflags='' install man-pages-ja man-pages-dev-ja && yum clean all

# 日本語対応
ENV LANG ja_JP.utf8
ENV LC_ALL ja_JP.utf8
ENV TZ Asia/Tokyo
RUN yum reinstall -y glibc-common

# vim の設定ファイル
# root と ec2-user 両方に反映させたいのでスケルトンにも追加しておく
COPY .vimrc /root/.vimrc
COPY .vimrc /etc/skel/.vimrc

# SSH接続用設定
# PasswordAuthentication と Port の設定を変更
RUN mkdir -m 700 /root/.ssh && mkdir -m 700 /etc/skel/.ssh
RUN sed -ri 's/^#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config \
&& sed -ri 's/^PasswordAuthentication yes/#PasswordAuthentication yes/' /etc/ssh/sshd_config \
&& sed -ri 's/^#Port 22/Port 20022/' /etc/ssh/sshd_config \
&& echo 'root:password' | chpasswd

# motd の更新を実行
# 一応 enable も指定しておく
RUN update-motd --enable && update-motd

# ec2-user の作成
# 本物らしくパスワードなしで sudo が使えるようにしておく
ARG USERNAME=ec2-user
RUN useradd -m -s /bin/bash $USERNAME && echo "$USERNAME ALL=NOPASSWD: ALL" >> /etc/sudoers

docker-compose.yml

操作は docker-compose コマンドで行うため設定ファイルを追加してます。

version: "3.9"

services:
amazon-linux-2:
build: ./docker/aml2
container_name: amazon-linux-2
hostname: localhost
privileged: true
command: /sbin/init
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
ports:
- 20022:20022

近景

鍵の設定をすればこんなかんじでSSH接続もできます。

ssh.png

総括

そもそもコンテナイメージを軽くするために余計なものは極力入れないというのがコンテナというものかと思いますので正直こんなかんじでなんでもかんでも突っ込んでいくならコンテナの意味ねー、って話にはなってしまうんですが、とはいえaws使うひとにはまあまあ便利かなとは思います。興味があれば参考にしてみてください。

スポンサーリンク
share