じろう

2019年11月02日に参加

学習履歴詳細

[Docker]メンターさんに教えてもらいながら自力でdocker-compose.ymlを書く練習。 [その他]TechCommitアドベントカレンダー用の記事を書く

今日のYWT

やったこと

執筆

Techpitのアドベントカレンダー用に、今年の学習振り返り記事を書いた

  • YWT Questのアプリ自体や設計を見返した

docker-compose.ymlを自力で書いていく

メンターさんとzoomつなぎながら、dockerについて教えてもらいつつ、docker-compose.ymlを書いてlaradockからの脱却を図る

  • docker-compose.ymlを書く
    • DockerHubで欲しいバージョンのDockerfileを探す
    • Dockerfileをカスタマイズする
    • そのDockerfileを読み込む設定をdocker-compose.ymlに書く
    • docker-compose buildする
    • docker-compose up -dする
    • 勝利

わかったこと

Docker雑記

build=イメージファイルを作る

イメージファイル=コンテナの元になる、核になるものzipみたいな
dockerファイルに書いてあるものを固めて一つのアイテムにしてしまう

up=イメージを使ってコンテナを立ち上げる

dockerfile = イメージのレシピ
docker-compose.yml = イメージからコンテナの立ち上げのレシピ

docker-compose up -d

イメージがないときは、 docker-compose buildが走ってから docker-compose upが走る。

docker-compose.ymlっているの?

コンテナを分けるのがそもそも美味しい
分けたコンテナたちを一つのサーバーとして扱いたい
コンテナ=middlewareをコンテナ化して、付け替え可能=パズルみたいにしてる、ピースを組み合わせて一台のサーバーみたいにしたい

各コンテナ=ネットワーク的にはバラバラ、それぞれ別のIPが振られる
それぞれを一つのネットワーク領域に置きたい
→それをdockerfileでも書けるけど、超絶面倒くさい
これを束ねるために登場したのがdocker-compose

1.18.0-perl ←perlが元になっている
1.18.0-alpine ←alpineが元になってます

alpine = alpine linuxの略
- vimさえ入ってない最小構成
- dokcer imageを軽くしたい
- なんでかっていうと、imageをロードしてコンテナを作る。そこの転送量に関わってくる
- もっというと、今回はEC2でやってるけど、ECSっていうコンテナをそのままロードできるようなサービスを使ってできる

cloud版 docker-composeがECS(Elastic Container Service)

コンテナ=使い捨て
- バグったら殺す
- またイメージロードすればちゃんと立ち上がるはず
- 結局、イメージの大きさをどれだけ小さくするかで戦う
- だからなるべく小さく、余計なものを入れないように
- その中でもalpineは本当になんにも入ってませんっていう状態のやつ

alpineとbusterで数百倍サイズが違う

docker-compose up -dしたけど、ローカルからは見れない状態

    ports:
      - 8080:80

8080=被らなければなんでもよし

EXPOSE 80
80を公開してる

WORKDIR /work
最初のログインした場所がどこかを指定

SHELL ["/bin/ash", "-oeux", "pipefail", "-c"]

デフォルトでつくshellのbashを指定している
Linuxコマンドのオプション、デフォルトでつけるやつ

dockerは行毎に差分管理
流し直して変わって無ければキャッシュしてくれている

Step 1/5 : FROM nginx:1.18-alpine
 ---> ea1819c829a5
Step 2/5 : SHELL ["/bin/ash", "-oeux", "pipefail", "-c"]
 ---> Using cache
 ---> c5fb37b9d3e0
Step 3/5 : RUN apk update
 ---> Using cache
 ---> 0f1434228265
Step 4/5 : COPY ./docker/nginx/default.conf /etc/nginx/conf.d/default.conf
 ---> 2efefefae6c7
Step 5/5 : WORKDIR /work
 ---> Running in bc87086efbea
Removing intermediate container bc87086efbea
 ---> efc7ecf5929c

キャッシュしたいなら左側のコマンドはなるべく少なくして、 &&で書く

phpのdockerfile

  • タイムゾーンの設定が重要になる
  • alpineだとそのへんの設定が大変

次やること

  • dockerでdb入れる
  • 執筆の続き
Docker

2020年12月14日(月)

4.3時間