Docker超入門⑦〜よく使うDockerfileコマンド一覧〜【初心者向け】

AI開発者・データサイエンティストを目指す人向け
おすすめUdemy講座一覧

こんにちは,米国データサイエンティストのかめ(@usdatascientist)です.

Docker超入門も第7回まできました...この連載もあと少しです.

今回は第5回の記事で使ってみたDockerfileをもっと使いこなせるようにしようと思います.

Docker超入門⑤〜Dockerfileを使う〜【初心者向け】

第5回の記事では以下のDockerfileを作ってビルドしました.

  • FROM ubuntu:latest  ベースになるDocker image
  • RUN touch test ubuntu:latest の上に $ touch test を実行したimage layerを作成

実業務ではもっと複雑なDockerfileを作れる必要があるので,今日は FROMRUN に加えてよく使うコマンドを一覧にして紹介したいと思います

Dockerfileのビルド時の動作をちゃんと理解する

まず,第5回同様, dockerフォルダを作成し,その中にDockerfileというファイルを作ります.既に作ってある人はそのDockerfileを上書けばOK

私は ~/Desktop に作りました. $subl コマンドでSublimeでDockerfileを開き,以下のコードをコピーしてください.(どのエディタでも構いませんが,本ブログではSublimeの使用を勧めています.Sublimeについてはこちら)

Dockerfileに上記の内容を記述(コピペでもOK)してビルドしてコンテナに入ってみましょう

DockerfileではRUN cd new_dirしてもtestファイルは /new_dir/ 配下ではなく / 配下に作られていることに注意です.Dockerfileの各コマンドは / 配下で実行されるんですね!

もしnew_dirでファイルを作成したい場合はShellのコマンドと同じように && で連結させましょう.

Dockerfileをビルドする際に,ホスト側のファイルをDocker imageにコピーする二つの方法です
通常,ビルド時にはイメージ側からホスト側のデータにはアクセスできないため,一度ファイルをコピーしてあげる必要があります.

ホストの docker/ 配下に sample_file を作成し,

Dockerfileを以下に書き換えます.COPYコマンドでコピーすることが可能です.

ちゃんとファイルがありますね♪

慣れてきたと思うので,よく使うコマンド一覧を紹介します!

よく使うDockerfile定番コマンド一覧

よく使うコマンド一覧です.覚える必要はないですが,だいたいこの辺のコマンドが必要になってくるので存在を知っておくと便利です.
業務で使っていくうちに理解しましょう!

コマンド(リンクは公式レファレンスやガイド) 説明
FROM イメージのベースとなるものです.なるべくDockerが公式に出しているベースのものを使いましょう.
RUN コンテナ内でコマンドを実行します.なるべくバックスラッシュ \ で繋げて一行して綺麗にしましょう.
 CMD CMD [‘コマンド’, ‘引数1’, ‘引数2’]といった使い方をします.

Dockerをrunした時にコンテナに入るのではなく実行することを目的とした時に使う. 変更可能

ENTRYPOINT ENTRYPOINT [‘コマンド’, ‘引数1’, ‘引数2’]といった使い方をします.

CMDと同様,実行可能コンテナを作る時に使う.変更ができず,「実行必須コマンド」にしたいときに使う.(ただし–entrypointオプションで上書きは可能)

LABEL イメージにメタデータをつける時に使う.例えば作成者の名前とか.
MAINTAINER 非推奨.LABELを使いましょう
EXPOSE コンテナにポートを開ける.コンテナの外からアクセスできるようにするには $ docker run -p {host_port}:{container_port} でコンテナのportをホストのportにマッピングさせる必要があります.
ENV 環境変数をセットする.セット後,コンテナ内で使い回し上書きも可能
ADD or COPY ビルド時にホストのファイルをイメージにコピーする.基本COPY推奨.ADDを使う場合は圧縮ファイルを自動解凍(tar -x)させたい場合くらいしか使わない.
VOLUME ホスト側のファイルシステムをマウントするのに使用
USER デフォルトはrootユーザになるので,それを避けたい場合はUSERコマンドでユーザを切り替える.なお,コンテナとホストはユーザIDとグループIDでのみ紐付かれ,名前ではマッチしない

と,こんな感じでしょうか.

一覧みてもピンと来ないと思うので,「こんなのあるんだなぁ」程度にみて,実務で必要なときに再度ググったり公式レファレンスをみて学ぶといいと思います.

それでは!

ABOUTこの記事をかいた人

かめ@米国データサイエンティスト

アメリカの企業でデータサイエンティストしてます.専門はコンピュータビジョンで,人工知能の製品を開発中. アメリカからデータサイエンス全般をゆるーく配信中