- 投稿日:2020-09-11T22:55:50+09:00
Docker Hubで配布されているDocker ImageをGoogle Container Registry に push してそのImageを元にVMを起動する
注意
本記事は自分用のメモの為、体裁が整っていません。ご了承ください。
記事を書く動機
以下のようなケースに対処する必要があり、手順などをアウトプットするため。
- Digdag, Embulk サーバー構築用の Docker Image を(Docker Hubで)共有してもらい、
- それを用いてGCPのVMを立ててサーバー構築する
参考ページ
- Container Registry のクイックスタート
- このドキュメントは 「Container Registry にローカルで用意したDocker Imageをpushする方法」と逆に「Container Registry からDocker Imageをpullする方法」が書かれている
- 本記事では、前者の箇所を参考にした
- Google Cloud での Container Registry の使用
- Cloud-Config 経由で Docker コンテナを開始する
- インスタンスの作成と構成
始める前に
- Cloud Console のプロジェクト セレクタページで、Cloud プロジェクトを選択または作成します。
- Google Cloud プロジェクトに対して課金が有効になっていることを確認します。(参考)
- Container Registry API を有効にします。
- Cloud SDK をインストールして初期化します。
- Docker をインストールします。
- Ubuntu, debianなどの場合は、
sudo usermod -a -G docker ${USER}
+再起動により、sudo
なしでdocker
コマンドを実行できるようにしましょう手順一覧
- Docker Imageを Docker Hub から pullする
- (pullした)Docker Image を Container Registry にpushする
- Container Registry に push したDocker Imageを元にVMを起動する
- 課金されないようにクリーンアップ
1. Docker Imageを Docker Hub から pullする
今回は例として、busyboxを使います。
docker pull busybox:latest # check image docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 6d5fcfe5ff17 8 months ago 1.22MB2. (pullした)Docker Image を Container Registry にpushする
2.1. gcloud コマンドライン ツールを認証ヘルパーとして使用するように docker を構成する
以下、参考ページより引用
イメージを push または pull するには、gcloud コマンドライン ツールを使用して Container Registry へのリクエストを認証するように Docker を構成する必要があります。これを行うには、次のコマンドを実行します(実行する必要があるのは一度だけです)。
gcloud auth configure-docker2.2. イメージにレジストリ名をタグ付けする
docker push
は通常だとDocker Hubにpushします。特定の場所にpushしたい場合は、レジストリ名のタグを書き換えることで制御するようです。参考ページより引用
Docker イメージを Container Registry に push する前に、そのイメージにレジストリ名をタグ付けする必要があります。Docker イメージにレジストリ名をタグ付けすると、イメージを特定の場所に push するように docker push コマンドが構成されます。このクイックスタートでは、ホストの場所は gcr.io です。Docker イメージにタグを付けるには、次のコマンドを実行します。
docker tag busybox gcr.io/[PROJECT-ID]/busybox:v1 # check img REPOSITORY TAG IMAGE ID CREATED SIZE gcr.io/[PROJECT-ID]/busybox v1 6d5fcfe5ff17 8 months ago 1.22MB
2.3. イメージを Container Registry に push する
docker push gcr.io/[PROJECT-ID]/busybox:v13. Container Registry に push したDocker Imageを元にVMを起動する
※一旦GUIでVM起動するケースを考える
GCPのダッシュボード画面から
ComputeEngine->VMインスタンス
という流れでVMインスタンス起動画面に移行する。VM起動画面において、コンテナイメージからインスタンス生成する旨を入力する(下図)
コンテナイメージ
には、例に記載されたように事前にpushしたコンテナイメージのパスを記載する。
ContainerRagistryに保存しているコンテナイメージを指定する際は、gcr.io/...
というパスになる。※本VMと同一プロジェクト内のGCRに保存されているイメージに対してはデフォルトでpullする権限が与えられているのでアクセス権限周りは調整する必要はない。そうでない場合は、イメージをpullしようとするサービスアカウントに対して、コンテナイメージを格納しているGCSバケットに対して適切なアクセス権限を付与する必要がある。
(参考)あとはVMインスタンス作成ボタンを押すだけ。
4. 課金されないようにクリーンアップ
4.1. ContainerRegistryのクリーンアップ
Google Cloud での Container Registry の使用によれば、
gcloud container images delete gcr.io/[PROJECT-ID]/busybox:v1 --force-delete-tags
で実行できるとのことだが、以下のエラーにより
gcloud
コマンドからのDocker Image 削除ができなかった。ERROR: (gcloud.container.images.delete) [gcr.io/[PROJECT-ID]/busybox:v1] is not a valid name. Expected tag in the form "base:tag" or "tag" or digest in the form "sha256:<digest>"(現在調査中……)
今回は、Google Cloud ConsoleよりGCRの該当イメージを削除する。
つもりが、見当たらない。。。。(?)
4.2. ComputeEngineのクリーンアップ
Google Cloud Console でVMインスタンスを削除します。
- 投稿日:2020-09-11T22:14:11+09:00
《コロナに負けず!!》29歳で営業職からジョブチェンジ。未経験で受託開発企業から内定を頂けました。
はじめに
昨年「エンジニアになるぞ!」と決意をし、
今年の3月に前職を退職(最終出社)、
3月下旬からプログラミングスクールに通いました。現在、29歳(今年で30歳!)です。
新卒からずっと営業職で、プログラミングは未経験。そんな自分でも、webエンジニアのスタートラインに
立つ事が出来ました。自分なりに戦略を立てて行った就活でもありましたので、
就職活動中の方の参考にして頂ければ幸いです。目次
・工夫して就活を行おうとした背景
・就活の結果
・学習開始〜内定までの流れ
・今回の転職活動でのポイント
・ポートフォリオについてのポイント
・学習方法について(おまけ)
・最後に工夫して就活を行おうとした背景
(興味ない方は読み飛ばして下さい!笑)
スクールに入った時点の私は転職に関しての認識が甘く、
「高い金額のスクールで基礎をしっかり学べば、転職はできるはず!」
「スクールからも紹介があるし!」
などと、このくらいの認識でした。ですが、この認識は間違いです!!!
少なくとも、20代前半の若い方でない限りは
エージェントからの紹介案件はごく少数になります。
※SESならいっぱいあります!企業側としてはエージェントを通して採用をすると、
その人の年収の30%程を支払う必要があります。つまり年収350万円の人材なら105万円もお金がかかります。
それならば、エージェント経由ではより若く優秀な人材だけを
選びたいですよね?そのため、エージェントから紹介される案件は
応募者の年齢や経験などが非常に大事になります。そのため、年齢が高くなるほど
そもそも紹介される案件の数は絞られます。そこに、今回はコロナによる経済打撃もあり
自分がスクールでの学習を終えた2020年6月、
「未経験」でのスクール経由の募集案件は3件のみでした。しかし、3社とも書類選考が通らず、、、涙
そこでやっと、このままでは「やばいぞ!!」と
気付かされました。。。そこで、ここから必死に情報の収集と
採用までの戦略を立てることにしました。就活結果について
《内定》
・2社(受託開発)《応募》
・企業HPからの直接応募:20社
・スクールのエージェント経由での応募:3社
・求人サイトでの応募:10社ほど
・DODAのエージェント経由での応募:20社ほど学習開始〜内定までの流れ
◇学習期間
2020年3月末月〜7月末(4ヶ月間)◇転職活動期間
2020年8月(1ヶ月間)《3月末〜5月末まで》
プログラミングスクールにて学習、卒業《6月》
1ヶ月かけて初めての自主制作アプリを作成!ですが、他の方のポートフォリオのレベルの高さを見て絶望し、
2つ目のポートフォリの作成を決意しました!《7月》
2週間程で2つ目のポートフォリを作成!
そこから2週間はインフラの環境構築やCI/CDに
挑戦していました。《8月》
企業HPからのweb応募を開始しました!
8月末に内定を獲得!今回の転職活動でのポイント
しっかり作り込んだポートフォリオを用意した
→スクール卒業後、すぐに転職活動を開始せずにポートフォリオの強化に努めました応募は企業のHPから送ることを徹底した
→書類選考の突破が重要です上記の2点が今回の就活でのポイントになります。
ポートフォリオについてのポイント
自主制作アプリ:「BestYourTitle」
このアプリは、求人広告のライター初心者や採用担当者が、
求人広告を書く際に「応募したい!」と思ってもらえるような
キャッチコピーを書けるよう、練習出来るサイトです。▼URL
https://www.bestyourtitle.com/
※かんたんログイン機能で、ゲストとしてログイン出来ます。▼GitHub
https://github.com/y-kiku1111/docker_byt
※ポートフォリオに関しての詳細は、上記Githubに記載しています内定頂いた2社とも、ポートフォリオについて
非常に高評価を頂けました。特にDocker、AWSのFargateは
印象が良かったです。ただ、実際に見て頂くと
サイト自体はレベルの高いものではないので、・モダンな技術に挑戦し、その企業で活用している技術とマッチした
・サイトデザインやインフラ構成図など、目に見える差別化を行うこの2点に尽きるのかなと思います。
また、ポートフォリオに関しましては
youtuberの勝又さんの動画やオンラインサロンで
「高評価されるポートフォリオ」がどの程度のレベルなのかを
知ることが出来、とても参考にさせて頂きました!スクールではポートフォリオに関してのアドバイスは
一切ありませんでしたので、実際に採用された初学者のポートフォリオが
数多く見れるのは、非常に有り難かったです。就職活動についてのポイント
・求人サイトを使って応募したい企業のリストアップ
・エージェントサービスを利用しての面接練習や情報の入手(応募もしましょう)
・上記を行った上でHPからの直接応募これが自分の中では、最も効率的かと思います。
リストアップに利用した求人サイト
・wantedly
・Green
・Find job!特にFindjobは、業務未経験OKの企業で絞ることが出来て
重宝しました。基本的には上記のサイトから応募するのではなく、
サイトからリストアップをして直接応募をします。なぜ直接、採用HPから応募をするかと言うと、
求人サイトによっては、エージェントと同じく
掲載は無料だが、採用すると企業にお金がかかるサイトもあるため
企業HPからの応募が、企業側にメリットが大きいためです。採用課金型でなければ、
求人サイトからの応募も一緒にした方が
良いかと思います。例えば、1日10社を目標に各企業のHPから
応募をし続けると良いと思います。
(自分は1日5社と決めていました)書類選考さえ突破すれば、あとはエージェントさんと
練習した面接だけです。しっかりと自分がエンジニアになりたい理由、
また作り込んだポートフォリについて熱弁できれば問題無いはずです!学習方法について(おまけ)
個人的には、強制的に勉強に集中し基礎を学べるスクールは
重宝しましたので、やるかやらないかなら、お勧めです。ただ、スクールはあくまで基礎を学ぶための環境にお金を出すようなイメージです。
そのため、スクール費用が高すぎると割に合わない可能性もあります!スクールを卒業するだけでは、レベルとしては確実に低いと思いますので、
例えばメンターさんを雇いながらポートフォリオのレベルを高めるなど、
基礎を身につけてからの自己学習を強く推奨します。自分はMENTAというサービスを利用していました。
(https://menta.work/about)最後に
ここまで長文を読んで頂き、
本当にありがとうございました!長くなりましたが、上記が自分の転職活動で
意識したことや、実践したことになります。少しでも、お役に立てましたら幸いです。
また、今回やっとエンジニアのひよっことして
スタートラインに立てたのは、自分の転職活動を支えて下さった
周りの方々のお陰です。無職になったのにも関わらず応援してくれた同居人や、
期待を込めて送り出して頂いた前職の上司や同僚、
心配しながらも応援して下さった両親、本当にありがとうございました!!!
就職した企業は、ひよっこではなく
成果を出す人材を期待して頂いているかと思いますので、
その期待を超えられるよう、頑張って行きます!改めまして、最後までお読み頂きありがとうございました!
- 投稿日:2020-09-11T17:42:29+09:00
Dockerで使い捨てPHP
環境
- Windows 10
- Docker Toolbox
目的
使い捨てのPHP環境を構築するため
手順
ディレクトリ構成
[d] ┗ [docker] ┗ [php73] ┣ Dockerfile ┗ [src] ┗ index.phpDockerfile作成
ベースイメージはあらかじめ dockerhub で検索しておく。
DockerfileFROM php:7.3.22-apache-stretch COPY src/ /var/www/html RUN apt-get updateDockerfileからイメージをビルドする
$ cd /d/docker/php73 $ docker build --tag=hellophp .イメージの一覧を表示してビルドがあるか確認
$ docker image lsイメージからコンテナを起動する
$ docker run -p 5000:80 --name myphp -d hellophpDockerマシンのIPアドレスを確認する
Docker-Toolbox は localhost ではない。
DockerマシンのIPアドレスを確認する必要がある。$ docker-machine ls動作確認
確認したIPアドレスとコンテナ起動時のホスト側のポート番号の組み合わせでアクセスできる。
http://{IPアドレス}:5000あと片付け
コンテナのIDを確認して停止させる。
$ docker ps $ docker stop {CONTAINER ID}その他
使わなくなったコンテナは削除もできる。
$ docker ps -a $ docker rm {CONTAINER ID}
- 投稿日:2020-09-11T14:39:43+09:00
Dockerのコンテナ内のmysqlの日本語設定
はじめに
Rails初学者ですが、docker+mysqlで開発したい!と思いdockerでrailsのプログラミングをしています。
イロイロ試行錯誤しながら、dockerコンテナを作っては消し、作っては消しを繰り返ししています。
(めちゃくちゃ面倒)
その都度、dockerコンテナの日本語設定をしているので、改めてまとめてみました。*この設定を行わないと、日本語が正しく表示されず????になります。
*多分都度都度でやらなくてもイロイロ方法があるんだと思う・・・ご教示いただければ幸いです。*以下のqiitaを全面的に参考にさせていただいております。ありがとうございます。
https://qiita.com/maejima_f/items/4d5432aa471a9deaea7fDockerコンテナに入る
$ docker exec -it コンテナ名 bashコンテナ内でlocaleの設定を確認する
root@XXXX :/# locale LANG= LANGUAGE= LC_CTYPE="POSIX" LC_NUMERIC="POSIX" LC_TIME="POSIX" LC_COLLATE="POSIX" LC_MONETARY="POSIX" LC_MESSAGES="POSIX" LC_PAPER="POSIX" LC_NAME="POSIX" LC_ADDRESS="POSIX" LC_TELEPHONE="POSIX" LC_MEASUREMENT="POSIX" LC_IDENTIFICATION="POSIX" LC_ALL=このlocaleの情報を日本かつUTF-8に変更するところからスタートです。
その前にコンテナ内をアップデートしたり、vimを入れ準備します。root@XXXX :/# apt-get update root@XXXX :/# apt-get install vim*どちらも途中でインストールしますか?がでてきますのでyを入力し、コンテニューさせます。
2つを行ったあと、以下の設定を行います。
1.言語設定
*何度かenterを押しているとLocales to be generated:が出てくるので
日本語の285. ja_JP.UTF-8 UTF-8 を入力しenterを押す(285は変わる可能性があります)root@XXXX :/# dpkg-reconfigure locales ------------------- Locales are a framework to switch between multiple languages and allow users to use their language, country, characters, collation order, etc. Please choose which locales to generate. UTF-8 locales should be chosen by default, particularly for new installations. Other character sets may be useful for backwards compatibility with older systems and software. 1. All locales 125. el_GR ISO-8859-7 249. gl_ES ISO-8859-1 373. pl_PL ISO-8859-2 2. aa_DJ ISO-8859-1 126. el_GR.UTF-8 UTF-8 250. gl_ES.UTF-8 UTF-8 374. pl_PL.UTF-8 UTF-8 3. aa_DJ.UTF-8 UTF-8 127. el_GR@euro ISO-8859-7 251. gl_ES@euro ISO-8859-15 375. ps_AF UTF-8 4. aa_ER UTF-8 128. en_AG UTF-8 252. gu_IN UTF-8 376. pt_BR ISO-8859-1 5. aa_ER@saaho UTF-8 129. en_AU ISO-8859-1 253. gv_GB ISO-8859-1 377. pt_BR.UTF-8 UTF-8 6. aa_ET UTF-8 130. en_AU.UTF-8 UTF-8 254. gv_GB.UTF-8 UTF-8 378. pt_PT ISO-8859-1 7. af_ZA ISO-8859-1 131. en_BW ISO-8859-1 255. ha_NG UTF-8 379. pt_PT.UTF-8 UTF-8 8. af_ZA.UTF-8 UTF-8 132. en_BW.UTF-8 UTF-8 256. hak_TW UTF-8 380. pt_PT@euro ISO-8859-15 9. agr_PE UTF-8 133. en_CA ISO-8859-1 257. he_IL ISO-8859-8 381. quz_PE UTF-8 10. ak_GH UTF-8 134. en_CA.UTF-8 UTF-8 258. he_IL.UTF-8 UTF-8 382. raj_IN UTF-8 11. am_ET UTF-8 135. en_DK ISO-8859-1 259. hi_IN UTF-8 383. ro_RO ISO-8859-2 12. an_ES ISO-8859-15 136. en_DK.ISO-8859-15 ISO-8859-15 260. hif_FJ UTF-8 384. ro_RO.UTF-8 UTF-8 13. an_ES.UTF-8 UTF-8 137. en_DK.UTF-8 UTF-8 261. hne_IN UTF-8 385. ru_RU ISO-8859-5 [More] (略) (Enter the items you want to select, separated by spaces.) Locales to be generated: 285 #これは現在の日本語 UTF-8の設定番号です。2.タイムゾーン設定
*まずは地域選択で、6のアジアを選択し、
*タイムゾーン選択で 79のTokyoを選択するroot@XXXX :/# dpkg-reconfigure tzdata ------------------ Please select the geographic area in which you live. Subsequent configuration questions will narrow this down by presenting a list of cities, representing the time zones in which they are located. 1. Africa 3. Antarctica 5. Arctic 7. Atlantic 9. Indian 11. SystemV 13. Etc 2. America 4. Australia 6. Asia 8. Europe 10. Pacific 12. US Geographic area: 6 #アジアを選択 Please select the city or region corresponding to your time zone. 1. Aden 14. Beirut 27. Gaza 40. Karachi 53. Muscat 66. Riyadh 79. Tokyo 2. Almaty 15. Bishkek 28. Harbin 41. Kashgar 54. Nicosia 67. Sakhalin 80. Tomsk 3. Amman 16. Brunei 29. Hebron 42. Kathmandu 55. Novokuznetsk 68. Samarkand 81. Ujung_Pandang 4. Anadyr 17. Chita 30. Ho_Chi_Minh 43. Khandyga 56. Novosibirsk 69. Seoul 82. Ulaanbaatar 5. Aqtau 18. Choibalsan 31. Hong_Kong 44. Kolkata 57. Omsk 70. Shanghai 83. Urumqi 6. Aqtobe 19. Chongqing 32. Hovd 45. Krasnoyarsk 58. Oral 71. Singapore 84. Ust-Nera 7. Ashgabat 20. Colombo 33. Irkutsk 46. Kuala_Lumpur 59. Phnom_Penh 72. Srednekolymsk 85. Vientiane 8. Atyrau 21. Damascus 34. Istanbul 47. Kuching 60. Pontianak 73. Taipei 86. Vladivostok 9. Baghdad 22. Dhaka 35. Jakarta 48. Kuwait 61. Pyongyang 74. Tashkent 87. Yakutsk 10. Bahrain 23. Dili 36. Jayapura 49. Macau 62. Qatar 75. Tbilisi 88. Yangon 11. Baku 24. Dubai 37. Jerusalem 50. Magadan 63. Qostanay 76. Tehran 89. Yekaterinburg 12. Bangkok 25. Dushanbe 38. Kabul 51. Makassar 64. Qyzylorda 77. Tel_Aviv 90. Yerevan 13. Barnaul 26. Famagusta 39. Kamchatka 52. Manila 65. Rangoon 78. Thimphu Time zone: 79 #Tokyoを選択環境変数LANGへ設定をする
先ほどインストールしたvimで、.bashrcを編集し、
export...を追加する。<vimでの編集方法>
vim ~/.bashrcで、vimが起動。
十字キーでファイルの一番下に移動して、「i」を押して入力モードへ
export〜を追記し、escを押してコマンドモードに戻る
「:wq」と入力して変更を保存するroot@XXXX :/# export LANG=ja_JP.UTF-8 root@XXXX :/# vim ~/.bashrcもう一度 localeを見て見ると
root@XXXX :/# locale LANG=ja_JP.UTF-8 LANGUAGE= LC_CTYPE="ja_JP.UTF-8" LC_NUMERIC="ja_JP.UTF-8" LC_TIME="ja_JP.UTF-8" LC_COLLATE="ja_JP.UTF-8" LC_MONETARY="ja_JP.UTF-8" LC_MESSAGES="ja_JP.UTF-8" LC_PAPER="ja_JP.UTF-8" LC_NAME="ja_JP.UTF-8" LC_ADDRESS="ja_JP.UTF-8" LC_TELEPHONE="ja_JP.UTF-8" LC_MEASUREMENT="ja_JP.UTF-8" LC_IDENTIFICATION="ja_JP.UTF-8" LC_ALL=変更されてる!
プラスで、.inputrcというファイルを作成し、内容を追加しましょう。
root@XXXX :/# vim ~/.inputrc #以下の3行を.inputrcに追加する set convert-meta off set meta-flag on set output-meta on #適用 root@XXXX :/# source ~/.inputrc以下のようにすると、mysql内の設定も変わっているかと思います。
以上です。
- 投稿日:2020-09-11T14:31:56+09:00
ECRへの手動push方法メモ
動機
CircleCIで設定されてたのでECRへの手動pushは必要なかったけど、
CircleCIがイカれてしまったので、手動pushすることにした。ログイン認証
$ aws ecr get-login-password --region [リージョン] | docker login --username AWS --password-stdin [AWSアカウントID].dkr.ecr.[リージョン].amazonaws.comビルド
docker build -t [ECRのリポジトリ名] .イメージにタグ付け
docker tag [ECRのリポジトリ名]:latest [AWSアカウントID].dkr.ecr.[リージョン].amazonaws.com/[ECRのリポジトリ名]:latestECRへpush
docker push [AWSアカウントID].dkr.ecr.[リージョン].amazonaws.com/[ECRのリポジトリ名]:latestECSのタスク定義を更新する必要がある
新しいリビジョンの作成でリビジョンが1つ上がることだけ確認して、その他の設定はいじる必要なしあとは古いタスクとかサービスとか消せば完成。
- 投稿日:2020-09-11T14:28:52+09:00
Docker Desktop for Mac で Kubernetesが起動しないとき
状況
以前までは起動していたんですが、ある日突然起動しなくなり、
ずっとKubernetes is starting...
でスタックしてしまっている状況。
再起動しても状況は変わらず。
しかも、この状態でpreferenceも固まっていて、開くことができない。環境: Docker Desktop for Mac
対処法
issueに上がっていた中で対処法がありました。
https://github.com/docker/for-mac/issues/2990#issuecomment-544754304注意:Kubernetesのcontextとか諸々は消えます
1. pkiと.kubeの中身を削除
以下のコマンドを叩き、該当のものを消します。
rm -rf ~/Library/Group\ Containers/group.com.docker/pki/ rm -rf ~/.kube2. Reset Kubernetes cluster
Troubleshoot
->Reset Kubernetes cluster
をクリック
3. Restart
Docker Desktop for Macを再起動したら起動した。
補足
.kube
の方を消すのは嫌だったので、pki
だけ消してみてやってみたけどだめだった。。。- preferenceを開こうにも固まっていて開けない
- Docker Desktop for Macを再起動すると十秒程度preferenceを動かせるタイミングがあるので、そこで気合で開く
何か他にもっといい方法があるよって方はご教授いただけると嬉しいです。
- 投稿日:2020-09-11T13:04:07+09:00
GitHub ActionsのHadolint Actionを使って安全なDockerfileを運用する
GitHub Actions と hadolint を組み合わせて Dockerfile の静的解析を自動化しよう! - kakakakakku blog を読んで、自身のGHAにも組み込んでみた。
hadolint (Haskell Dockerfile Linter)
hadolintとは、DockerfileをDockerfile Best Practicesに沿って解析してくれるツールだそうな。
詳しくは本家へ↓↓
Created by https://ghlinkcard.com/さっそくGHAに組み込む
めちゃくちゃ簡単!
以下の感じでbrpaz/hadolint-action@master
を使うだけでGitHub ActionsでDockerfileを解析してくれる!.github/workflows/workflow.ymlname: Workflow on: push jobs: build: name: Hadolint runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 - name: Hadolint uses: brpaz/hadolint-action@master結果
GHAの実行結果として、
Dockerfile:23 DL3006 Always tag the version of an image explicitly
と返ってきた。その時のDockerfileが以下
./Dockerfile| ... L23 | FROM gcr.io/distroless/base-debian10 | ...ベースイメージのタグを明示的に付けて〜的なやつの警告です。
対応としては、base-debian10:latest
とかbase-debian10:v1.0.0
とかにするのだが、このdistroless
とやらは バージョンタグがなくlatest
かハッシュ値しか使えない。さらに、今回の対応でlatest
を指定しても、hadolintで別の警告(DL3007 Using latest is prone to errors if the image will ever update. Pin the version explicitly to a release tag
)が出される。警告(
DL3006
)における対応hadolint公式にHow to useやConfigureという項目があり、起動オプションやyamlファイルで設定できるよ〜と書いたあった
ただ、
DL3006
の警告をすべて無視するとDockerfileのマルチステージビルド時に別の箇所(今回で言うL23以外)で同様の警告が出た際も無視され、本来やりたかったベストプラクティスに沿った安全な運用ができなくなってしまう。悩んでいると同僚にhadolintにはDockerfileに直接警告を無視するコメントを付与できる、Inline ignoresというのがあることを教えてもらった(感謝!
確かに公式を見てみるとちゃんと書いてあった(公式をちゃんと読もうと再認識した
よって、以下のように1行コメント(Inline ignores)を入れて、再度git pushすると無事にGHAが走りhadolintの警告がなくなった。
./Dockerfile| ... L23 | # hadolint ignore=DL3006 L24 | FROM gcr.io/distroless/base-debian10 | ...まとめ
- hadolintをGHAに簡単に組み込むことができた
- ベストプラクティスに沿った安全なDockerfileを運用できた
- Exh: 公式サイトはちゃんと読もう
- 投稿日:2020-09-11T10:13:54+09:00
メモ:Exment on Lightsail + Docker(nginx)環境で、CORSするためのnginx.conf設定
先日、Lightsail + Dockerという組み合わせで、ExmentというOSS WebDBシステムを構築したという話を書きました。
んで、その後にもExmentとMFクラウド請求書をAPIで組み合わせる記事も書きました。
で、両者の記事で大事なことを書き忘れていたんですね。
ExmentのAPIが通らない
Postmanでは通るんだけど、Node.jsで通らない。なぜだ… そうか、CORSか…
ということで、Exmentを運用しているDocker-composeはこちらなのですが、Webサーバーはnginxで動いています。
というわけで、nginx用のCORS設定を追記しました。
nginx.confserver { listen 8080; server_name _; root /var/www/exment/public; index index.php index.html; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { if ($request_method = 'OPTIONS') { add_header Access-Control-Allow-Origin '*'; add_header Access-Control-Allow-Methods 'GET, POST, PUT, DELETE'; add_header Access-Control-Allow-Headers 'Origin, Authorization, Accept, Content-Type'; add_header Access-Control-Max-Age 3600; add_header Content-Type 'text/plain charset=UTF-8'; add_header Content-Length 0; return 204; } try_files $uri /index.php?$query_string; } location ~ \.php$ { add_header Access-Control-Allow-Origin '*' always; fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
- 投稿日:2020-09-11T02:56:53+09:00
HerokuでDocker環境Rails MySQLなものを動かす。deviseかつtwitter APIを隠しながら
人に見せる用に書いていません。
自作記事のお父上、Rails+MySQL+Nginx+Unicorn+Docker+CircieCIな開発環境を作りたいえ〜の記事の続き。
上で作った環境に[Rails] deviseの使い方(rails5版)を追加し、かつTwitterAPIを
gem 'dotenv-rails'
で隠しながら、本番環境のherokuにアップロードした。①docker-compose.ymlのコマンドを変更する
docker-compose.ymlcommand: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"② gem 'dotenv-rails'を導入する
目的:TwitterAPIキーをGitHubのローカルに入れたくない
envファイルはGitの管理に入れたくないので、.gitignoreファイルに以下を追記しておきましょう。
.gitignore
に.env
を追加する。これで.envはGitの管理下から外れます。
https://pikawaka.com/rails/dotenv-rails
http://vdeep.net/rubyonrails-dotenv③ APIキーをdotenv-railsの.envで隠しながら導入する
[Rails] deviseの使い方(rails5版)の記事のtwitterAPIを追加する場所をENV[]に書き換える
config/initializer/devise.rbconfig.omniauth :twitter, ENV['TWITTER_API_KEY'], ENV['DATABASE_URL']④ Herokuの環境変数を変更する
多分、DATABASE_URLとTWIITER_API_KEY,DATABASE_URLはマスト。
herokuのGUIのSettingのConfig VarsかHerokuアプリの環境変数設定(CUIで設定)で設定する
Herokuアプリの環境変数設定
- ClearDBのURL確認
以下のコマンドで、ClearDBのURLが確認できる。$ heroku config === <アプリの名前> Config Vars CLEARDB_DATABASE_URL: mysql://<ユーザー名>:<パスワード>@<ホスト名>/<データベース名>?reconnect=true
- 環境変数の設定
上記コマンドで表示されたそれぞれの値を変数に設定する。$ heroku config:add DB_NAME='<データベース名>' $ heroku config:add DB_USERNAME='<ユーザー名>' $ heroku config:add DB_PASSWORD='<パスワード>' $ heroku config:add DB_HOSTNAME='<ホスト名>' $ heroku config:add DB_PORT='3306' $ heroku config:add DATABASE_URL='mysql2://<ユーザー名>:<パスワード>@<ホスト名>/<データベース名>?reconnect=true'※ RailsのGemfileで'mysql2'を使用しているので、
DATABASE_URL
はmysql2://
で始める必要がある。
設定内容を確認すると、以下のように表示される。$ heroku config === <アプリの名前> Config Vars CLEARDB_DATABASE_URL: mysql://<ユーザー名>:<パスワード>@<ホスト名>/<データベース名>?reconnect=true DATABASE_URL: mysql2://<ユーザー名>:<パスワード>@<ホスト名>/<データベース名>?reconnect=true DB_HOSTNAME: <ホスト名> DB_NAME: <データベース名> DB_PASSWORD: <パスワード> DB_PORT: 3306 DB_USERNAME: <ユーザー名>Herokuへデプロイ
Railsプロジェクトに必要な準備
config/environments/production.rb
に以下を追記
(この辺りの設定に関しては、後々修正します。)config.assets.compile = true config.assets.initialize_on_precompile=falseこれプラス、
gem 'dotenv-rails'
の.env
で作ったTwitterAPIをheroku側に設定する。参考
https://qiita.com/ymstshinichiro/items/d6ea229f6eb4778006c2
https://golikyua.hatenablog.com/entry/2020/01/09/135254
https://www.sejuku.net/blog/tutorial/111347