EC2にDockerをインストールしDocker Hub経由でコンテナを配置して動かしてみる
概要
Docker を EC2 にインストールし、ローカルで作成したコンテナイメージを DockerHub 経由で EC2 に配置して、動かしてみます。
実際には ECS 等を使用すると思いますので、手順や動きを理解するため、EC2 を使ってみます。
手順
EC2 の準備
- AWS コンソールにて、
EC2
-インスタンス
から、インスタンスの起動
を選択し EC2 インスタンスを作成します。 - セキュリティグループに設定で、HTTP(80)のアクセスを
0.0.0.0/0
で許可しておくようにします。(後ほど接続確認するため)それ以外の設定は基本的にデフォルトで問題ありません。
EC2 に接続する
ssh -i key.pem ec2-user@[IPアドレス]
Docker をインストールする
sudo yum update -y
sudo amazon-linux-extras install docker
Docker を起動する
sudo service docker start
ec2-user が docker グループに所属するように変更する
sudo usermod -a -G docker ec2-user
いったんログアウトして EC2 に入りなおす
exit
ssh -i key.pem ec2-user@[IPアドレス]
Docker がインストールできているかを確認する。
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 リポジトリのみ利用可能)
EC2 から docker hub にログインする
docker login
UserName
とPassword
を聞かれますので、Docker Hub に登録したものを入力します。
以下の表示が出れば OK です。
Login Succeeded
ローカル環境で docker hub にログインする
docker login
UserName
とPassword
を聞かれますので、Docker Hub に登録したものを入力します。
以下の表示が出れば OK です。
Login Succeeded
ローカルで Docker 環境を作る
次のような内容で、Docker の簡単な環境を作ります。
.
├ src
│ └ index.html
└ Dockerfile
mkdir src
vi Dockerfile
FROM 'nginx:latest'
RUN service nginx start
vi src/index.html
<h1>Hello World!</h1>
Docker ビルドを行う
docker build -t dockerdemo ./
作成された docker image を確認する
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
dockerdemo latest 41668656b704 5 days ago 170MB
Docker コンテナを実行する
docker run --name dockerdemo -d -e name="test" -v $(pwd)/src:/usr/share/nginx/html -p 80:80 dockerdemo:latest
※-v
コマンドでホスト側のディレクトリ:コンテナ側のディレクトリ
を指定してボリュームマウントしています。
※-p
コマンドで、ホスト側のポート:コンテナ側のポート
を指定して、開放するポートの紐づけを行っています。
ブラウザでアクセスを確認する
以下 URL にアクセスします。
Hello World!
と表示されれば OK です。
docker hub にリポジトリを作る
docker hub を操作して、リポジトリを作成します。
- docker hubにアクセスします。
-
Create Repository
を押下してリポジトリを作成します。-
name
:任意のリポジトリ名を設定します。(例:dockerrepo
) -
Create
を押下します。
-
docker hub に image をプッシュする
docker hub に対してコンテナのイメージをプッシュしていきます。
イメージ ID の確認
docker image ls
docker image に対してリポジトリ名と合わせたタグ付けを行う
docker tag [イメージID] [docker hubアカウント名]/[リポジトリ名]
例)docker tag 0285035879f8 testaccount/testrepo
タグ付けされたことの確認
docker image ls
プッシュを行う
docker image push [docker hubアカウント名]/[リポジトリ名]
公開用ファイルを作成しておく
ローカル環境ではローカル環境のボリュームをマウントして、ローカルのファイルを公開しましたので、サーバ側でも公開用のファイルを用意しておきます。
cd ~
mkdir src
vi src/index.html
<h1>Hello World!</h1>
EC2 側で PULL を行い登録したイメージを取得する
docker pull [docker hubアカウント名]/[リポジトリ名]
イメージ ID の確認
docker image ls
Docker コンテナを実行する
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