👋

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