こんにちは。まゆみです。
Dockerについての記事をシリーズで書いています
前回の記事では、AWSのEC2インスタンスにDockerをインストールするところまで解説しました。
今回の記事では、ローカルで作ったImageをリモートにpullしてrun する方法を書いていこうと思います。
そうする事によって、IPアドレスを使って世界中からあなたのアプリにアクセスできるようになります\(^o^)/
ではさっそく始めていきますね。
LocalでImageを作ってRemoteからPullする
リモートでImageからContainerを作るためには、『ローカルで』Imageを作り、『Docker hubを経由して』リモートからpull します
ではまず、Docker hub にリポジトリ―を作るところからはじめて行きましょう
docker hub にリポジトリーを作る
docker hubにログインした後、『Create Repository』をクリックします
Repositoryに好きな名前を付けましょう(のちにImageをpushする時に必要になります)
そのあと、『Create』ボタンをクリックしましょう
Repository ができました。
これで、ImageをここにPushすることができます
.dockerignoreファイルを作る
.dockerignoreファイルを作って、
node_modules
Dockerfile
*.pem
とファイルに書き、Imageをbuildする時に無視するファイルを指定します
(*.pem は『.pem拡張子のついたファイルは全て』を意味します
ローカルでImageをbuildする
今あなたがプロジェクトフォルダーにいることを確かめ、Imageをbuildします。
-tオプションを付けて、Imageに名前を付けて実行しましょう
docker build -t <Image名> .
これでローカルにImageが作られました。
docker hub にpush する
ローカルで作ったImageをdocker hubのリポジトリ―にpushしたいのですが、
リポジトリ―名 = Image名
でないと、pushできません。
tag を使って、Imageの名前を変える
docker tag <Image名> <リポジトリ―名>
先ほど、ローカルでImageをbuild する時に-t を付けてImageに名前を付けました。
そのImage名と、docker hubで作ったリポジトリ―名を使ってImageの名前を変更します
docker images
で作ったImageのリストを出すと、変更した名前のImageができているのが分かります
Imageをdocker hub にpushする
docker push <リポジトリ―名>
でImageをpushします
では次にいよいよリモートからImageを引っ張ってrun していきます
EC2インスタンスの中に入る
リモートからdocker hubのImageを引っ張ってきてrun するので、まずEC2インスタンスの中に入りましょう
(EC2インスタンスの中に入る方法が分からない方はこちらの記事を参考にどうぞ)
docker のコマンドrun を使う
予めEC2にdockerをインストールしているので、dockerのコマンドが使えます(EC2にdockerをインストールしていない方はこちらの記事を参考にどうぞ)
docker run ....では、『Got permission denied...』とエラーが出たので、sudo をつけて改めてrunしてみます
結果は下のスクショのようになります
docker hub からイメージをpullしてきて、リモート上にContainerを立ち上げることができました。
Containerが実行中になったので、このままこのインスタンスに付与されたIPアドレスにアクセスしたら良いのでしょうか。。。?
実行中のインスタンスのパブリックIPアドレスにアクセスを試みましたが、アクセスできません。
これは、バグではなく、
EC2インスタンスのディフォルト値では、セキュリティグループのインバウンドルールによって、インスタンスの中に入ってくるリクエストは全て拒否されるからです。
引用元:awsドキュメント
AWSでのインバウンドルールをどのように更新したら良いのかを記事を改めて書いていきますね。
まとめ
とりあえず、EC2インスタンスでContainerをrun することには成功しましたので、次回AWSのセキュリティの方をいじって世界中からアプリにアクセスできるようにしていこうと思います。