前期第04回 - oddmutou/jugyo-2026kyototech GitHub Wiki
今回の目標
- Dockerをインストールできるように
- Docker Compose をインストールできるように
- Docker Compose コマンドを叩けるように
- Docker上で起動したnginxで静的ファイルを配信できるように
仮想的な環境を簡単に作るための技術です。仮想的な環境は簡単に作成と削除を行うことができ,面倒なミドルウェアのインストール・設定を毎回行う必要がなくなります。
仮想的な環境のことをコンテナと呼びます。一つのサーバー(コンピューター)内に沢山作ることができ,また同時に動かすことができます。
コンテナは 仮想マシン (VMと呼ばれます) と似たように扱えるのですが,仮想マシン(VM)と違って,ホストと一部のリソースを共有します(※1)。そのため,仮想マシン(VM)にくらべオーバーヘッドが小さく,より軽量で,より早く作成と削除ができます。
※1 WindowsやMacにもDockerを便利に使えるツール(Docker Desktop)が有りますが,その場合は共有しません。Linux上でLinuxのコンテナを上げるからこそ資源を共有できるのです。WindowsやMacでDockerを使う時は結局LinuxのVMが上がってしまうのです。この授業ではLinuxをインストールしているサーバー(EC2インスタンス)上でDockerを使うため気にしなくてもいいですが,もしWindowsやMacのパソコン上で作業をする場合はVM上げるのとあまり違いがないということを片隅に置いといてください。
Amazon Linux2の場合
sudo yum install -y docker
sudo systemctl start docker
sudo systemctl enable docker
dockerをインストールをすることができましたが、dockerは全てのユーザーが使えるようになってはいません。
デフォルトのユーザー(ec2-user)でもsudoつけずにdockerコマンドを立たけるように、dockerグループに追加します。
sudo usermod -a -G docker ec2-user
ご存知の通り、usermodを反映するために一度ログアウトする必要があります。
sshの場合は一度ログアウトしログインしなおすことで反映させることができます。
screenのウィンドウ等もすべて一度終了させる(exitコマンドで)とよいでしょう。
この授業では直接dockerコマンドを叩くことはあまりしません。全てDocker Composeというツール経由でdockerを叩きます。
複数のDockerのコンテナを簡単に扱うためのツール(Dockerコマンドのサブコマンド)です。
参考: https://docs.docker.com/compose/
Amazon Linux 2 の場合
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -SL https://github.com/docker/compose/releases/download/v5.1.2/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
インストールできたかどうかの確認
docker compose version
Amazon Linux の標準のパッケージマネージャがインストールするDockerの場合、buildの最新版を別途導入する必要がある場合があります。
mkdir -p ~/.docker/cli-plugins
ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/')
BUILDX_URL=$(curl -s https://api.github.com/repos/docker/buildx/releases/latest | grep "browser_download_url.*linux-$ARCH" | cut -d '"' -f 4)
curl -L $BUILDX_URL -o ~/.docker/cli-plugins/docker-buildx
chmod +x ~/.docker/cli-plugins/docker-buildxdocker buildx version で確認して、 v0.34.1 (またはそれ以上のバージョン) が表示されたら大丈夫です!
(参考: https://github.com/amazonlinux/amazon-linux-2023/issues/1032#issuecomment-3874686692)
Docker Composeは,カレントディレクトリにあるcompose.ymlという設定ファイルを参照します。(もちろんオプションで他の場所にある設定ファイルを参照することもできます。)
まずは作業用のディレクトリを作ってその中に移動しましょう。
mkdir dockertest
cd dockertest
まずは設定ファイルを書きましょう。
vim compose.yml
中身はこんなかんじ
services:
web:
image: nginx:latest
ports:
- 80:80
起動
docker compose up
起動できたら,ウェブブラウザでEC2インスタンスのホスト名またはIPアドレス(SSHでログインするときと同じもの)に接続してみましょう。
ブラウザのURLのところに http://IPアドレス と入力して開いてみましょう。
Welcome to nginx!って表示されていたら成功です。
確認できたら Docker Compose を停止させてみましょう。ログが流れているウィンドウ(先程docker compose upを叩いたところ)で Ctrl+C(コントロールキーとCの同時押し)を押すと終了します。
Webサーバーです。さっき上げましたね。
自分の作ったファイルや,プログラムの出力結果もWebに配信することができます。
nginxの設定ファイルを書いてみましょう。
まず設定ファイル用のディレクトリを作ります。
mkdir nginx
mkdir nginx/conf.d
設定ファイルを作成
vim nginx/conf.d/default.conf
中身はこんなかんじで
server {
listen 0.0.0.0:80;
server_name _;
charset utf-8;
root /var/www/public;
}
次に配信するファイルを置くディレクトリをつくります。
mkdir public
配信するファイルを作りましょう。
vim public/index.html
なかみはこんなかんじで
<!DOCTYPE html>
<h1>Hello world</h1>
最後に compose.yml を編集します。
vim compose.yml
なかみはこんなかんじで
services:
web:
image: nginx:latest
ports:
- 80:80
volumes:
- ./nginx/conf.d/:/etc/nginx/conf.d/
- ./public/:/var/www/public/
シメにdocker compose を再起動して確認。
先程docker compose upしたままの場合はCtrl+Cで終了させる。
その後,再度docker compose upを叩いて起動。
ブラウザで http://EC2インスタンスのアドレス/index.html にアクセスして確認してみましょう。
nginxのルート下に、さらにディレクトリを作って、index.html 以外のファイルを設置することができます。
mkdir public/hoge
vim public/hoge/huga.html適当にHTMLを書いて、 ブラウザで http://EC2インスタンスのIPアドレス/hoge/huga.html にアクセスして確認してみましょう。
適当に複数ページを作って、a要素(<a href="">みたいなやつのこと)を使ってページ間で遷移できるようにしてください。href属性は相対パスで指定しましょう。