【初心者】EC2にDockerをインストールしてコンテナをたててみる

こんにちは、SCSKの林です。

Dockerの勉強として、EC2インスタンスにDockerをインストールしコンテナを環境を構築してみたのでその手順をご紹介したいと思います。

EC2を作成

以下内容でまずEC2を作成しました。

EC2設定内容

AMI 無料対象枠のAmazon Linux 2
インスタンスタイプ t2.micro
ネットワークセグメント パブリックサブネット
IP パブリックIP付与
ロール SSMが使用できるような権限 (AmazonEC2RoleforSSM) がついたロール

その他はデフォルトです。
とりあえずインターネットに接続できるインスタンスを用意しました。

docker,docker-composeをインストール

EC2インスタンスにAWS Systems Manager(Session Manager)経由でログインし、以下コマンドを実行しました。

dockerインストール
$ sudo yum install -y docker # dockerのインストール
$ sudo service docker start # dockerの起動
$ sudo usermod -a -G docker ssm-user # ssm-userをdockerグループに入れる。これでssm-userがdockerコマンドを実行できる
$ sudo docker info # dockerの起動確認

上手く起動しない場合は一度ログインし直してみてください。

docker-composeインストール

docker-composeの最新バージョンは以下のサイトから確認できますので、コマンドの1.27.4のところを適宜書き換えて実行してください。
https://docs.docker.com/compose/install/#install-compose-on-linux-systems

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose --version

上手く起動しない場合一度ログインし直してみてください。

dockerでnginxコンテナを立ち上げる

ファイル構成

まずはホームディレクトリに移動して、ディレクトリを作成します。

$ cd ~
$ mkdir docker-nginx-test

ディレクトリ配下の構造は以下のようにしました。

docker-nginx-test
└ html #directory ー index.html # file(hogeとでも書いておく)
└Dockerfile #file

Dockerfileの記述

Dockerfileの中身は以下にしました。

FROM nginx
COPY ./html /usr/share/nginx/html

コンテナの起動

イメージを作成して、コンテナを起動していきます。

$ cd ~/docker-nginx-test
$ docker build -t docker-nginx-test .
$ docker run -d --rm -p 8080:80 --name docker-nginx-test docker-nginx-test

ここの動きについて解説します。

まず2行目のdocker buildコマンドでDockerfileに書かれている通りにDocker Imageを作成します。
Dockerfileには以下のように記載されていましたので

FROM nginx
COPY ./html /usr/share/nginx/html
  • 1行目:Docker Hubからnginxがインストールされたイメージをコピーしてます。
  • 2行目:OS上に先ほど作成したhtmlディレクトリの配下をDocker上の/usr/share/nginx/htmlにコピーをしてきています。

上記の2行の処理が行われ、イメージが作成されます。

次に3行目のdocker runコマンドで指定したimageを基にコンテナを作成します。
-p オプションで、コンテナ内部のポート80(HTTP)を、8080ポートで外部にマッピングしています。

説明した「docker build」「docker run」の処理を図で表したものが以下になります。

EC2の用語で例えると、以下のようなものかと思います。

  • 「docker build」はAWSが提供しているAMIからをEC2を起動し、指定のコマンドを実行し、カスタムAMIに落とす。
  • 「docker run」はそのカスタムAMIからEC2の起動

ブラウザ上でアクセス確認

ブラウザ上で [http://<EC2のIPアドレス>:8080] にアクセス
hogeと表示されました。

hoge

今回はここまでとなります。
今後もDockerの勉強を続けていこうとおもいます。

それではまた。

タイトルとURLをコピーしました