📔

dockerのコンテナ構築をAWSを使用してサクッとやってみる

2023/03/21に公開

はじめに

dockerを使ったサービスの開発が一般的になっており、自身の携わる案件においても当然のように使われています。
今回は、弊社の課題図書である下記本を参考に、AWSでdockerを構築していきました。
基本的な構築ではあるものの、知識の理解を改めて付けながら進めていこうと思います。

参考図書

さわって学ぶクラウドインフラ_docker基礎からのコンテナ構築をやってみる

※Kindle Unlimited 会員は、このタイトルを追加料金なし(¥0)で読み放題
※私は館員の為、無料でkindle版購入

Dockerとは

Dockerは、コンテナ仮想化技術を提供するオープンソースのプラットフォームです。
Dockerを使用することで、アプリケーションやサービスをコンテナと呼ばれる独立した実行環境にパッケージ化し、異なる環境でも同じように動作させることができます。

メリット

上記の通り、ポータビリティが高い為、異なるプラットフォームでも簡単に移植、開発することができます。
また、コンテナは分離された環境で実行されるため、安全性や信頼性が高く、本体のPCに影響を与えることが少ないです。
拡張性もある為、今回行うようなAWSを使用して、開発を進めることもできます。

デメリット

コンテナを使用する場合、ネットワーク設定がややこしいことが挙げられます。
私自身も開発する中で、docker同士のネットワークが把握できずに戸惑ってしまう経験もありました。
とはいえ、慣れの部分もあると思うので、Dockerを使わない理由にはならないと思います。

やってみる

Dockerを利用できるサーバーを用意する

AWSを使って

  • EC2を、uduntuOSで起動する
  • ターミナルからssh接続でEC2内に入る
ssh -i "downloads/shink32-test.pem" ubuntu@ec2-13-112-151-155.ap-northeast-1.compute.amazonaws.com

docker-engineのインストール

  • 必要なパッケージのDL
sudo apt-get -y install spt-transport-https ca-certificates curl gnupg-agent software-properties-common

Ubuntu Linuxシステムで実行されるAPTパッケージマネージャーを使用して、いくつかのパッケージをインストールする

apt-transport-https:

HTTPSを介したAPTリポジトリアクセスをサポートするパッケージ

ca-certificates:

公開CA証明書を含むパッケージ

curl:

URLを使用してデータを転送するためのツール

gnupg-agent:

GnuPG暗号化プログラムのためのエージェント

software-properties-common:

Ubuntuパッケージマネージャーのリポジトリ管理に使用される共通ソフトウェアプロパティ

  • docker-engineのインストール

  • dockerの確認

ubuntu@ip-172-31-13-192:~$ docker --version
Docker version 23.0.1, build a5ee5b1
ubuntu@ip-172-31-13-192:~$ 

webサーバーを起動する

apacheサーバーを起動していきます。

apacheについて復習

世界中で最も広く使われているWebサーバーの1つ。
Linux、Unix、Windows、macOSなどのオペレーティングシステムで実行可能。

Apacheは、クライアントからのHTTPリクエストを受け取り、適切なレスポンスを生成して返すWebサーバーの役割を担います。Apacheは、静的ファイル(HTML、CSS、画像など)だけでなく、PHPやPerlなどのスクリプト言語で書かれたWebアプリケーションを実行することもできます。

dockerを起動する

$ docker run -dit --name my-apache-app -p 8080:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4

dockerイメージをdoker hubから取得して実行する。

ubuntu@ip-172-31-13-192:~$ docker run -dit --name my-apache-app -p 8080:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4
Unable to find image 'httpd:2.4' locally
2.4: Pulling from library/httpd
3f9582a2cbe7: Pull complete 
9423d69c3be7: Pull complete 
d1f584c02b5d: Pull complete 
758a20a64707: Pull complete 
08507f82f391: Pull complete 
Digest: sha256:76618ddd53f315a1436a56dc84ad57032e1b2123f2f6489ce9c575c4b280c4f4
Status: Downloaded newer image for httpd:2.4
6e94f457c011027e09a9beaf6b184fa6c831aafb0b1026080bf1270c4a3b16bc
ubuntu@ip-172-31-13-192:~$ 

Apacheの入ったDockerコンテナが起動する。

ubuntu@ip-172-31-13-192:~$ docker ps
CONTAINER ID   IMAGE       COMMAND              CREATED          STATUS          PORTS                                   NAMES
6e94f457c011   httpd:2.4   "httpd-foreground"   45 seconds ago   Up 43 seconds   0.0.0.0:8080->80/tcp, :::8080->80/tcp   my-apache-app

無事に、AWSでdockerが立ち上がりました。
とても簡単ですね。

コンテナのネットワークについて

Dockerでは、コンテナ間の通信やコンテナとホストマシンの通信を制御するために、仮想的なネットワークを作成することができます。

また、ホストマシンや他のコンテナと分離された独自のネットワークを作成することができます。これにより、セキュリティや管理の観点から、コンテナの通信をより細かく制御することができます。

Docker同士のネットワークについて

まず、Dockerの「docker network create」コマンドを使用して、新しいネットワークを作成します。例えば、以下のように実行します。

$ docker network create my-network

次に、コンテナを作成し、先ほど作成したネットワークに接続します。以下は、2つのコンテナを作成し、同じネットワークに接続する例です。

$ docker run --name container1 --network my-network -d nginx
$ docker run --name container2 --network my-network -d nginx

これにより、container1とcontainer2の2つのコンテナが作成され、my-networkという名前のネットワークに接続されます。これにより、container1とcontainer2間での通信が可能になります。

さいごに

AWSでDockerを起動しながら、基礎部分の振り返りはできたように思います。
案件に入っている中で、必ず使う技術なので、この基盤をしっかりと構築した上で、開発を進めていきたいと思います。

Discussion