はじめに
ようやくDockerを学び始めたので自分の理解をまとめておく。
前回 => https://qiita.com/theFirstPenguin/items/b5f6ed253bed95fbec5a
次回 => https://qiita.com/theFirstPenguin/items/01d0eff8bba7ca7c2d8e
やったこと
- 前回の続き
- githubを介して、EC2にローカルPCのコードをアップロード
- そして
docker-compose up
!
Githubを介して、EC2にローカルPCのコードをアップロード
####まずはEC2インスタンスにログイン
ローカルPCの~/.ssh
にキーペアがあるとして、
cd ~/.ssh
ssh -i "ec2-key.pem" ec2-user@<public-ip>
####EC2インスタンス上で鍵を作る
ssh-keygen -t rsa
パスフレーズを聞かれるので、必要に応じてパスフレーズを入力する。
正しく鍵が作成されていると ~/.ssh
以下に、id_rsa
と id_rsa.pub
に2つのファイルができる。
id_rsa.pub
のほうが公開鍵なので、この中身を github の Deploy Key に登録することになる。
この公開鍵をコピーしておく。
cat ~/.ssh/id_rsa.pub
####コピーした公開鍵をGithubに登録する
SSHキー登録ページで登録できる。
Titleはキーの内容がわかる文面を記入し、Keyに先ほどコピーした公開鍵を貼り付ける。
####登録できたかをEC2から確認
ssh -T git@github.com
####EC2からgithubのレポジトリをクローンして終わり!
git clone git@github.com:yourname/yourrepo.git
そしてdocker-compose up
!
その前に、一応おまじない。
sudo service docker start
そして
docker-compose up
あれ、なぜかエラー。。。
Error: Cannot find module 'express'
ってなんで? ちゃんとpackage.json
に書いてあるじゃないですか。。。
Creating express-app ... done
Creating nginx-web ... done
Attaching to express-app, nginx-web
express-app | node:internal/modules/cjs/loader:903
express-app | throw err;
express-app | ^
express-app |
express-app | Error: Cannot find module 'express'
express-app | Require stack:
express-app | - /usr/src/app/index.js
express-app | at Function.Module._resolveFilename (node:internal/modules/cjs/loader:900:15)
express-app | at Function.Module._load (node:internal/modules/cjs/loader:745:27)
express-app | at Module.require (node:internal/modules/cjs/loader:972:19)
express-app | at require (node:internal/modules/cjs/helpers:88:18)
express-app | at Object.<anonymous> (/usr/src/app/index.js:1:17)
express-app | at Module._compile (node:internal/modules/cjs/loader:1083:30)
express-app | at Object.Module._extensions..js (node:internal/modules/cjs/loader:1112:10)
express-app | at Module.load (node:internal/modules/cjs/loader:948:32)
express-app | at Function.Module._load (node:internal/modules/cjs/loader:789:14)
express-app | at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:72:12) {
express-app | code: 'MODULE_NOT_FOUND',
express-app | requireStack: [ '/usr/src/app/index.js' ]
express-app | }
nginx-web | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
nginx-web | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
nginx-web | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
nginx-web | 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
express-app exited with code 1
nginx-web | 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
nginx-web | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
nginx-web | /docker-entrypoint.sh: Configuration complete; ready for start up
nginx-web | 2020/10/24 02:42:13 [emerg] 1#1: host not found in upstream "app" in /etc/nginx/nginx.conf:18
nginx-web | nginx: [emerg] host not found in upstream "app" in /etc/nginx/nginx.conf:18
nginx-web exited with code 1
アドバイスに従い、docker-compose.yml
を修正。
volumes:
- './app:/usr/src/app'
- usr/src/app/node_modules #追記
これでなんとかなりました!