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