プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Docker
  • 【Docker】Dockerfileについて(よく使うインタラクション:命令等)
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Docker】Dockerfileについて(よく使うインタラクション:命令等)

12.15

  • miyabisan2
  • コメントを書く

この記事は3分で読めます

Dockerfileとは?

アプリの実行に必要なコンテナの情報をコードで管理することができます。このファイルや実行するアプリケーションからDockerコンテナの元となるイメージ(Dockerイメージ)を作ることができます。(Dockerイメージのビルド)

作成したDockerImageはDockerHub等のレジストリに登録して全世界の人に使ってもらうことも可能ですし、非公開とすることも可能ですし、ローカルのみで使うことも可能です。(普通の企業で開発する場合は非公開でリポジトリに登録することが多いでしょう。)

Dockerコンテナとは?

Dockerイメージを元に作成されます。具現化されたアプリやファイルシステムが実行されている状態です。

Dockerイメージとは?

コンテナの実行に必要なファイル群(プログラム本体/ライブラリ/ミドルウェア/OS/ネットワーク設定等)を格納したディレクトリのことでコンテナ作成時のテンプレートになります。なお、一つのDockerイメージから複数のDockerコンテナを作成することができます。詳しくは下記の記事でも解説しています。

【GitLab】Dockerイメージ、Docker Hubについて

用途

Railsでの開発

一般的なRuby on Railsを利用したアプリケーションの開発とかではAPサーバ(Ruby、Railsや各種アプリ専用のミドルウェアが入っているサーバ)の構築のみDockerfileで自作のイメージを使用してコンテナを作り、それ以外のサーバ(DB、S3、セッション管理サーバ、メールサーバ等)は既にあるイメージをそのまま使って作ることが多いでしょう。

なお、Dockerfile自体もDockerHubにあるイメージをベース(rubyイメージ等)として作りますし、複数のイメージ(ruby、node等)をインポートして作成することも多いです。あくまで実務ではDockerfileはベースイメージを各案件むけにカスタマイズするために使うものと見た方が良いと思います。

Dockerfileの書き方

Docker独自のDSL(ドメイン固有言語)を使って記述します。FROMやCOPY等の様々なインストラクション(命令)が用意されています。

FROM [Dockerイメージ名] [タグ(イメージのバージョン)]

ベースとなるDockerイメージ(OS)はここに定義します。Dockerfileでイメージをビルドする際はまずFROMで指定されたイメージをダウンロードして実行します。

FROMの参照先

最初にDockerイメージを「Docker Hub」というレジストリを検索します。

タグ

Dockerイメージ自体はハッシュを持っていて一意に識別することはできますが、ハッシュを指定して取得するのは困難なので任意のバージョンを指定してDockerイメージのバージョンを指定します。言語のイメージであれば言語バージョンとかがDockerイメージのバージョンになったりします。

COPY

Dockerを動作させているホストOS上のファイルやディレクトリをDockerコンテナ内にコピーするコマンドです。

ADD

COPYと似ていますが少し用途が異なります。COPYとは下記の点で異なります。通常ADD命令は名前からは動作を想像しにくいのでベストプラクティスとしてCOPY命令を使います。ADD命令に備わった機能が必要な場合のみADD命令を使用するようにします。

  • tarで展開されたファイルをコピー時に自動で展開する。
  • コピー元にURLを指定した場合はURLからダウンロードしてコピー先に転送します。

RUN

Dockerコンテナ内で任意のコマンドを実行できる仕組みです。(例えば、chmodでシェルスクリプトの実行権限を与える等)、アプリケーションの設定の更新や配置をするイメージでアプリ自体は実行させません。

CMD

出来上がったイメージをDockerコンテナとして実行する前に、コンテナ内で実行するプロセスを定義する。コンテナ起動時に一回だけ実行され、RUNと違いアプリケーション自体を実行させるイメージです。

ENTRYPOINT

CMDと同じくコンテナ内で実行するプロセスを指定するインタラクションです。CMDと違いコンテナで実行するデフォルトのプロセスを指定できます。CMDの引数はENTRYPOINTで指定する引数となります。

用途

Dockerイメージの作成者側でコンテナの用途をある程度制限したい場合に使えるコマンドです。

LABEL

Dockerイメージの作成者の記名に使います。

ENV

Dockerfileを元に作成したDockerコンテナ内で使える環境変数を指定します。

OSに持たせた方が良いもの(Dockerfile外でも使用するもの)を指定します。(例えば、タイムゾーン、ロケール、HOMEなど)

ARG

ビルド時に情報を埋め込むために使用します。イメージビルドの時だけ使用できる特殊な環境変数です。

OSに持たせる必要がないもの(Dockerfile内でしか使用しないもの)は、ENVではなくARGを使うようにします。(例えばインストールするパッケージの情報など)

WORKDIR

Dokerfile内で指定した命令(RUN、ADDなど)を実行する作業ディレクトリです。

EXPOSE ポート番号

ポートを開けることができます。

コマンド

Dockerfileを作成した後に実行するコマンド等に関しては下記で解説しております。

【Docker】コマンドまとめ(CLI)

基本的には「docker image build」でDockerイメージを作成して、「docker container run」で作成したコンテナを実行します。

スポンサーリンク
  • 2019 12.15
  • miyabisan2
  • コメントを書く
  • Docker
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2019 12.15

    【Docker】コマンドまとめ(CLI)

  2. 2019 12.15

    【Docker】「docker container run 」や「ポートフォワーディング」、「リンク機能」

  3. 2019 12.15

    【Kubernetes】「Kubernetes(クバネティス)」の概要

  4. 2020 01.18

    【Docker】MySQLのコンテナに接続して基本操作する手順(Railsの場合)

  5. 2019 12.31

    【Docker】コンテナに接続する方法

  6. 2019 12.23

    【Docker】Ruby on Railsのコンテナを作成して起動するまで。

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Kubernetes】「Kubernetes(クバネ…

【Docker】コマンドまとめ(CLI)

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー