nakatievent / my_baby_diary_app

0 stars 0 forks source link

Docker・CircleCIについて #13

Open nakatievent opened 3 years ago

nakatievent commented 3 years ago

今回ポートフォリオを作成するにあたってAWS、Docker、Laravelを使用することになった。

Laravelに関してはRailsを使った経験があればすぐに慣れると想定しているが、他の2つについては正直全然知識がない状態である。

そこで、色々と検索したりYoutube動画とかを見ていたところ山浦清人さんのYoutube動画が分かりやすそうだったのでこの動画を中心に勉強することにした。

「習うより慣れろ」

この精神でやっていくしかない!

nakatievent commented 3 years ago

【Docker超入門】Dockerって何?何が良いの?

Dockerとは

nakatievent commented 3 years ago

【Docker超入門】環境構築 for Mac

必要なアプリケーション

nakatievent commented 3 years ago

【Docker超入門 #3】Linuxの基本コマンド

コマンド一覧

  1. ls(ディレクトリの中のファイルを表示)
  2. pwd(現在いるディレクトリを表示)
  3. cd(移動)
  4. mkdir(ディレクトリを作る)
  5. touch(ファイルを作る)
  6. echo(ファイルに書き込む)
  7. cat(ファイルの中身を表示する)
  8. less(ファイルの中身を表示する)
  9. mv(ファイルの位置を変えたり、ファイルの名前を変えたりする)
  10. rm(ファイルを削除する)
nakatievent commented 3 years ago

【Docker超入門】Dockerを使ってみよう

nakatievent commented 3 years ago

【Docker超入門 #5】アプリを作成・実行しよう

①コンテナのライフサイクル

コンテナのサイクルには、作成→起動→停止→削除 という一連の流れがあり、それを元に実行していく。

*コントロール+Cで停止する

②コンテナの操作でよく使う操作として、①ログ、②コマンド実行、③お掃除がある

  1. docker container logs 〇〇 →ログを確認する
  2. docker container exec webrick ruby -v →〇〇というコマンドを実行
  3. docker system prune -a →使わないイメージやコンテナを一気に消す
nakatievent commented 3 years ago

【Docker超入門 #6】Dockerfileを作成しよう

nakatievent commented 3 years ago

【Docker超入門 #7】Docker ComposeでRailsを構築しよう

docker-compose.yml →複数アプリケーション(複数コンテナを一括で管理)をまとめて操作する。

基本操作

・イメージのビルド docker-compose build ・コンテナの作成と起動 docker-compose up -d ・コンテナを停止・削除 docker-compose down ・コンテナの一覧を表示 docker-compose ps ・ログを表示 docker-compose logs ・コンテナを作成してコマンド実行 docker-compose run <サービス> <コマンド> ・起動中のコンテナにコマンド実行 docker-compose exec <サービス> <コマンド>

全体の流れ

  1. Docker関連のファイルを用意
  2. 初期設定
  3. 起動
  4. 追加操作
version: '3'
services:
 db:
   image: mysql:8.0
   command: --default-authentication-plugin=mysql_native_password
   volumes:
     - ./src/db/mysql_data:/var/lib/mysql
   environment:
     MYSQL_ROOT_PASSWORD: password
 web:
   build: .
  ↑今のディレクトリと同じディレクトリのrubyのDockerfileを使うという設定
   command: bundle exec rails s -p 3000 -b '0.0.0.0'
   ↑rails serverを起動している
   volumes:
     - ./src:/app
  src以下をDockerコンテナ内のappに共有する。ローカルのファイルを更新したら自動的にdockerに更新される
   ports:
     - "3000:3000"
   environment:
     RAILS_ENV: development
   depends_on:
     - db
nakatievent commented 3 years ago

【Docker超入門】本番環境に公開しよう

[全体の流れ]

①事前準備GitHub・Herokuの登録、Heroku Cliのインストール

②herokuにログイン

③herokuアプリを作成 

④DBを追加・設定 

環境変数を登録↓

・heroku config -a rails-docker-haruki →環境変数の確認

⑤Dockerfileを本番環境用に修正 heroku config:add RAILS_SERVE_STATIC_FILES=’true’ -a rails-docker-haruki→アセットプリコンファイルが本番で起動する

⑥Dockerイメージをビルド・リリース

⑦機能追加

nakatievent commented 3 years ago

エラー発生

heroku container:push web -a rails-docker-harukiコマンドを実行してDockerイメージをビルドしてコンテナレジストリにプッシュしようとしたら下記のようなエラーが出た。

Error: trust data missing for remote repository registry.heroku.com/rails-docker-haruki/web or remote repository not found: timestamp key trust data unavailable.  Has a notary repository been initialized?
 ▸    Error: docker push exited with Error: 1

試したこと①

Dockerイメージをビルドしてないからエラーが出るのかと思いdocker-compose buildした後にコンテナの作成・起動をdocker-compose up -dでやって再度heroku container:push web -a rails-docker-harukiコマンドを実行したが変わらず上記のエラーメッセージが出る。。。

試したこと②

export DOCKER_CONTENT_TRUST_SERVER=https://notaryserver:4443をターミナルに入力して上記コマンドを実行したところエラーメッセージが変わった。

Error: error contacting notary server: dial tcp: lookup notaryserver: no such host
 ▸    Error: docker push exited with Error: 1

翻訳すると

エラー:公証人サーバーへの接続エラー:ダイヤルtcp:ルックアップ公証人サーバー:そのようなホストはありません
  ▸エラー:docker pushがエラーで終了しました:1

もう訳わからん。。。

nakatievent commented 3 years ago

↑解決

恐らく、Docker Content Trust(DCT)が有効になっていて、イメージを利用する際(push時とか)に「発行者」と「イメージが改ざんされていないこと」を検証する機能が働いたと推測。

なので、解決策としてはopen /.zshrcコマンドでファイルを開き、export DOCKER_CONTENT_TRUST=1を消去すると無事heroku container:push web -a rails-docker-harukiコマンドを実行することができた。

なぜこうなったかというと、過去にDockerの勉強をしようと下記の記事を進めた際にDCTを設定していたからである。 最強のLaravel開発環境をDockerを使って構築する

DCTを有効にしたい方にとっては「じゃあどのコマンドを実行すればエラー解決するの?」という話になりそうですが、今回はこれで進めていく。

nakatievent commented 3 years ago

【Docker超入門 #9】CI/CDを構築しよう

CI

「全体の流れ」

①テストコード記載

②CircleCIに登録 登録する際にGithubと連携させたいので「Githubで登録」を選択する。 プクロジェトの直下に.circleci/config.ymlを作り、config.yml上にCircle CIの設定を書くとCircle CIが動作する。

③プロジェクトを登録

④configを設定 APP_DATABASE_HOST: "127.0.0.1" →自分のコンピューターという意味

⑤環境変数を設定 master.keyの追加 heroku config:add RAILS_MASTER_KEY='f2f6e61f4fb485d1aba29bd18f34bfc0' -a rails-docker-haruki

⑥GitHubにプッシュ git switch -c ci git add . git commit -m “CircleCIが動くようにconfigファイルを設定” git push origin ci

⑦テストを修正 docker-compose exec web bundle exec rake test

git pull origin main

CircleCIめっちゃ便利やん!

CD

「全体の流れ」 ①configを修正 git checkout -b cd git branch -d ci

②環境変数を設定 circle_ciにログインし、projectからproject_settings→Environment Variableで環境変数を設定する HEROKU_API_KEY

③Viewファイルを修正 docker-compose buildしてdocker-compose up -dしてlocalhost:3000してもページに飛ばない場合はrm src/tmp/pids/server.pidしてみる。

④GitHubにプッシュ

⑤マージ、デプロイ

まとめ

nakatievent commented 3 years ago

米国AI開発者がゼロから教えるDocker講座

echo $SHELLで使っているシェルの種類が見れる Docker imageDockerのコンテナを作る元となる物(コンテナはDocker imageから作られる) Docker imageDockerfileから作られる