LoginSignup
1
2

More than 3 years have passed since last update.

ほぼゼロから始めたdockerのお勉強の旅メモ

Posted at

前段

dockerって超便利で今どき知らないとか自称ITエンジニアとしてもどうなの?という世界線で、dockerをよくわからずなんとなく使っていたが、ECSとかFargateとかついにDockerから逃れられなくなった青年が、広大なネットを一日さまよって得たDockerの知識をここに記す。

※つまり、ハチャメチャなことを書いている可能性があるということだ。気をつけてね。

とりあえずこれをやればいいと思った件

これすごく良かったような気がします。
いろんなサイト巡ってこれにたどり着いた。
Google翻訳でもたぶん読めるから英語だけど頑張れ!

その上で、今日の気ずきをまとめていく:point_up_2:

COPYとVolumeについて

今日の朝はVolumeでソースコードマウントして作ったイメージをFargateでデプロイしたら503エラーがでた〜とか騒いでいたんですがこれは当たりまえだのクラッカーなお話でした。

基本的にDocker開発をするときはソースコードを何回も何回も何回も何回も変更するので

docker run -v /host/path:/container/path hoge

みたいな感じでホストのディレクトリをコンテナのディレクトリにマウントして開発をします。
こうしないと、コンテナの中でプログラムを書くか、ホストでソースコードを書き換えるたびにdocker buildしなくてはいけなくなるからです。

だかしかし、つまりこれはコンテナのなかにソースコードは入っていないということなのです。
当然イメージにソースコードは含まれていません。

そんなイメージをFargateで展開したってなんも出てこないのは当たり前です。

ということでどこかしらで公開するということになったら、これまでVolumeでマウントしていたファイルたちをイメージの中に内包することが必要になってきます。

その時に使うのがCOPYです。

COPY . /app/src/

みたいにDockerfileに書いて上げればイメージにソースコードが内包されます。

開発環境はVolumeでマウントすればいいのですが、デプロイするってなったらCOPYしなくちゃいけないよ。

とここで、僕は開発と本番でDockerfile2つ書かなくちゃいけないのかよめんどくさーって思いました。
次に繋がります。

検証と本番でかき分けるマルチステージドサービス

検証と本番のDockerfile分けるのめんどくせーって思っていたし、どうやら2016年とかは分けるしかなかったみたいなんだけど、今は「マルチステージドサービス」というものがあって、分けなくていいんだとさ。

FROM node:10.16.3 AS developmentFROM node:10.16.3-slim AS production

このFROM ・ AS hogeってのがポイント。
このhogeってところを指定することで開発用とか本番用とか分けられるんだって。

指定はtargetでやればいいらしいよ。

docker-compose.yaml
version: '3.7'

services:
  chat:
    build:
      context: .
      target: development
    command: npx nodemon index.js
    ports:
      - '3000:3000'
    volumes:
      - .:/srv/chat
      - chat_node_modules:/srv/chat/node_modules

上にtargetって書いてありますが、そこをASの後ろのワードにすればOK。

で多分これの本当の良さはここではないんだが、ぶっちゃけまだ良くわかってないのでなんとなく書くんだけれど

COPY --from=development --chown=root:root /srv/chat/node_modules ./node_modules

こういうことができるのですよ。

つまり、別のステージのビルド結果をコピーできるってことですね。

Dockerガリガリつかってないからなんとも言えないので詳しくはこのあたりを読むといいと思う。
https://qiita.com/minamijoyo/items/711704e85b45ff5d6405

以上

まとめるとたいしたことないな。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2