👋

EC2にDockerをインストールしDocker Hub経由でコンテナを配置して動かしてみる

2022/02/19に公開

概要

Docker を EC2 にインストールし、ローカルで作成したコンテナイメージを DockerHub 経由で EC2 に配置して、動かしてみます。
実際には ECS 等を使用すると思いますので、手順や動きを理解するため、EC2 を使ってみます。

手順

EC2 の準備

  1. AWS コンソールにて、EC2-インスタンスから、インスタンスの起動を選択し EC2 インスタンスを作成します。
  2. セキュリティグループに設定で、HTTP(80)のアクセスを0.0.0.0/0で許可しておくようにします。(後ほど接続確認するため)それ以外の設定は基本的にデフォルトで問題ありません。

EC2 に接続する

shell
ssh -i key.pem ec2-user@[IPアドレス]

Docker をインストールする

shell
sudo yum update -y
sudo amazon-linux-extras install docker

Docker を起動する

shell
sudo service docker start

ec2-user が docker グループに所属するように変更する

shell
sudo usermod -a -G docker ec2-user

いったんログアウトして EC2 に入りなおす

shell
exit
ssh -i key.pem ec2-user@[IPアドレス]

Docker がインストールできているかを確認する。

shell
docker info
実行結果
Client:
 Context:    default
 Debug Mode: false

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 20.10.7
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: d71fcd7d8303cbf684402823e425e9dd2e99285d
 runc version: 84113eef6fc27af1b01b3181f31bbaf708715301
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 5.10.96-90.460.amzn2.x86_64
 Operating System: Amazon Linux 2
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 965.5MiB
 Name: ip-172-31-3-185.ap-northeast-1.compute.internal
 ID: IAB4:MFHG:IPME:JLJ7:2IS6:A2QM:XSWY:TLAY:YZJX:2LMC:GAAK:UP5B
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

docker hub に登録する(未登録の方)

以下ページから docker hub に登録します。プランは free で問題ないです。(1 リポジトリのみ利用可能)
https://hub.docker.com/

EC2 から docker hub にログインする

shell
docker login

UserNamePasswordを聞かれますので、Docker Hub に登録したものを入力します。

以下の表示が出れば OK です。

shell
Login Succeeded

ローカル環境で docker hub にログインする

shell
docker login

UserNamePasswordを聞かれますので、Docker Hub に登録したものを入力します。

以下の表示が出れば OK です。

shell
Login Succeeded

ローカルで Docker 環境を作る

次のような内容で、Docker の簡単な環境を作ります。

フォルダ構成
.
├ src
│ └ index.html
└ Dockerfile
shell(フォルダ作成)
mkdir src
shell(Dockerfile作成)
vi Dockerfile
Dockerfileファイル内容
FROM 'nginx:latest'
RUN service nginx start
shell(index.html作成)
vi src/index.html
index.htmlファイル内容
<h1>Hello World!</h1>

Docker ビルドを行う

shell
docker build -t dockerdemo ./

作成された docker image を確認する

shell
docker image ls
実行結果
REPOSITORY                                        TAG       IMAGE ID       CREATED       SIZE
dockerdemo                                        latest    41668656b704   5 days ago    170MB

Docker コンテナを実行する

shell
docker run --name dockerdemo -d -e name="test" -v $(pwd)/src:/usr/share/nginx/html -p 80:80 dockerdemo:latest

-vコマンドでホスト側のディレクトリ:コンテナ側のディレクトリを指定してボリュームマウントしています。
-pコマンドで、ホスト側のポート:コンテナ側のポートを指定して、開放するポートの紐づけを行っています。

ブラウザでアクセスを確認する

以下 URL にアクセスします。
http://localhost/

Hello World!と表示されれば OK です。

docker hub にリポジトリを作る

docker hub を操作して、リポジトリを作成します。

  1. docker hubにアクセスします。
  2. Create Repositoryを押下してリポジトリを作成します。
    1. name:任意のリポジトリ名を設定します。(例:dockerrepo
    2. Createを押下します。

docker hub に image をプッシュする

docker hub に対してコンテナのイメージをプッシュしていきます。

イメージ ID の確認

shell
docker image ls

docker image に対してリポジトリ名と合わせたタグ付けを行う

shell
docker tag [イメージID] [docker hubアカウント名]/[リポジトリ名]

例)docker tag 0285035879f8 testaccount/testrepo

タグ付けされたことの確認

shell
docker image ls

プッシュを行う

shell
docker image push [docker hubアカウント名]/[リポジトリ名]

公開用ファイルを作成しておく

ローカル環境ではローカル環境のボリュームをマウントして、ローカルのファイルを公開しましたので、サーバ側でも公開用のファイルを用意しておきます。

shell
cd ~
mkdir src
vi src/index.html
index.htmlファイル内容
<h1>Hello World!</h1>

EC2 側で PULL を行い登録したイメージを取得する

shell
docker pull [docker hubアカウント名]/[リポジトリ名]

イメージ ID の確認

shell
docker image ls

Docker コンテナを実行する

shell
docker run --name dockerdemo -d -e name="test" -v $(pwd)/src:/usr/share/nginx/html -p 80:80 [docker hubアカウント名]/[リポジトリ名]:latest

動作確認する

次の URL でアクセスします。

http://[AWSのEC2インスタンスのパブリックIPアドレス]/

Hello World!が表示されれば OK です。
ただの文字列を表示しているだけなので、あまり面白くないですが、コンテナ化したイメージ(この例では、Nginx の Web サーバ)が持ち運べて利用できることのイメージがつくかと思います。

株式会社トッカシステムズ

Discussion