IT

DockerFileについてまとめる

2021年12月5日

イメージの作成方法

1 : 作成方法はGCEでGUIで作成したサーバのスナップショット(現時点での設定情報)からイメージを作成する。
2 : dockerファイルから、イメージを作成する
これによりイメージを作成する。
GCPにdockerイメージを作成する場合は、
GCPの1ソリューションである「Google Container Registry」に置くことになる。
Containerってまさにdockerイメージを基盤としてその上のミドルウェア、アプリケーションまでをまとめてコンテナというので、まさにその意味
https://qiita.com/t-yotsu/items/c99775f942f9bb23bd6c

DockerとVMの違いについて

左はWMWareを入れている場合。
要はwindowsの中にvmwareを入れて、その中にさまざまなOS例えばlinux環境やmacOS環境などを入れ、
それぞれの環境の中にそのOSにあったアプリケーションを開発する。デプロイする。
でもdocker engineを使うことで、それぞれのアプリケーションはOSを気にしてデプロイしていたわけだが、どんなアプリケーションもOSに依存せず、Docker Engineの上で動かすことができる。

Google Container Registry

Google Container RegistryはGoogleが提供するPrivateなDockerのリポジトリ。
アップロードしたイメージはGCSに保存されるようで、コストは容量課金となる。(GCSとして課金)。
イメージはGCSにアップロードされる。

DockerFileの例

# AWSのlambda用のイメージがあるのでそれを使用する(https://hub.docker.com/r/amazon/aws-lambda-nodejs)
FROM amazon/aws-lambda-nodejs:12

# runはFROMで指定したイメージ上で、シェル形式のコマンドを実行します。
# COPYはhttps://fantasiabaetica.hatenablog.com/entry/2019/12/20/094516。
#COPY package*.json ./
RUN npm install
COPY . .

# index.jsのhandlerを実行する
CMD ["index.handler"]

dockerfileについて
dockerfileとはさまざまなOSやコマンドなど一連のコードを記載したファイルのこと。
このdockerfileからイメージというものを作成する。そうしてサーバを構築する際にそのイメージを読み込ませるだけで、
全ての設定を完了させることができる。
なのでdockerfileなどで作成しておくことで、複数のサーバを一括で作成できたり、
1つイメージを作成しておけば、開発と本番環境用のサーバそれぞれに同じイメージを適用すれば差異がなくなるなどメリットもある。

コンテナとイメージ(用語の確認)

FROM

fromはOSを指定する。
ubuntuやwindows、linuxなどさまざまある。
lambdaへデプロイする場合は、lambda用のosがあったりもするので、そこは臨機応変に。

FROM amazon/aws-lambda-nodejs:12
AWSのlambdaはサーバサイドだが、OSはwindowsでもmacでもlinuxでもない。独自OSなので、aws-lambdaというdockerfileで指定できるのでそれを使う。
さらにnodejsの関数なら、nodejsを入れる必要があるので、nodejsが入ったものとして、
上記のようなFROM句を指定する

RUN

runはイメージ作成先での ※ runの指定方法は2種類ある。

RUN npm install           # shell型
RUN ["npm", "install"]    # exec型

shell型はよく見るunixとかでのコマンドで、
execはそのshellで実行するコマンドをスペース区切りでダブルクォーテーションで配列化するというもの。
この違いで何かあるのか?

CMD

※ CMDについても指定方法は2種類あって、RUNと同じ2種類
【RUN】
イメージ作成時(=docker build時)に指定したコマンドが実行されます。

【CMD/ENTRYPOINT】
コンテナ開始時(=docker start時)/作成時(=docker run時)に実行されます。

ENTRYPOINT

COPYとADD

COPY <1> <2>
ADD <1> <2>

1から2へコピーするという意味で、普通のターミナルのcpコマンドと同じ。
基本的には、

1 : 現在Dockerfileを実行しているローカル環境のフォルダ構成に準じて指定
2 : イメージ作成というかデプロイ時のフォルダ構成
ADDは、tar.gzファイルを解凍して2に置いてくれる。
つまりCOPYとADDの違いは、解凍してコピーするか、解凍しないでコピーするかの違い。

COPY . .
をよく見るが、
これは、ローカルの今Dockerfileを実行しているディレクトリ配下全てのファイルを、
デプロイ環境のルートディレクトリにコピーするということ。

普通のPCやサーバでも、
macやwindowsでもフォルダの構成は同じ。
なので、ローカルの構成をそのままDockerイメージ内の構成にするためには、
ローカルのディレクトリ構成、作成するDockerイメージのディレクトリ構成をそのままコピー

WORKDIR

▼ わかりやすいURL https://www.tohoho-web.com/docker/dockerfile.html

-IT

© 2024 Yosshi Labo. Powered by AFFINGER5