DockerfileスクリプトをDockerで使用するための基本ガイド
Dockerfileは、ベースイメージに適用され、最終的に新しいイメージを作成するためのコマンドとパラメータのセットです。DockerfileはFROMコマンドで始まり、様々なメソッド、コマンド、パラメータが続きます。出力は、コンテナを作成するために使用できる新しいイメージです。
Dockerfileの構文
Dockerfileに飛び込む前に、Dockerfilesの構文とその意味について簡単に説明します。
シンタックスとは何ですか?
ごく簡単に言うと、プログラミングにおいて、文法とは、アプリケーションにプログラムを実行させるためにコマンドを呼び出したり、パラメータを入力する文法的な構造を意味します。これらの文法は、明示的または暗黙的にルールで縛られている。プログラマーは文法仕様に従ってコンピュータと対話する。Dockerfileは、シンプルで明確かつクリーンな構文構造を採用しており、非常に使いやすくなっています。このシンタックスは自明であり、コメントもサポートしています。
Dockerfileの構文例
Dockerfileの構文は、コメントとコマンド+引数の2つの部分から構成されています。
簡単な例です。
# Print "Hello docker!"
RUN echo "Hello docker!"
Dockerfileのコマンド
Dockerfileには、イメージを構築するためのコマンドが12種類用意されており、以下に簡単に説明します。
FROMコマンド
FROM <image>
または
FROM <image>:<tag>
これは、後続のコマンドで使用する基本イメージを設定するものなので、Dockerfile の最初のコマンドとして使用する必要があります。
例えば
FROM ubuntu
tagが指定されない場合、デフォルトのタグがlatestとなり、どちらも指定されない場合はエラーとなる。
RUNコマンド
RUNコマンドは、上記のFROMで指定されたイメージの中で任意のコマンドを実行し、その結果をコミットするもので、コミットされたイメージは後で使用されることになります。
フォーマットは2種類。
RUN <command> (the command is run in a shell - `/bin/sh -c`)
または:
RUN ["executable", "param1", "param2" ... ] (exec form)
RUNコマンドは、:
docker run image command
docker commit container_id
備考
コメントとして#を使用
のように。
# Memcached
# Memcached
# VERSION 1.0</p> <p># use the ubuntu base image provided by dotCloud
FROM ubuntu</p> <p># make sure the package repository is up to date
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
RUN apt-get update</p> <p># install memcached
RUN apt-get install -y memcached
MAINTAINERコマンド
MAINTAINER <name>
MAINTAINER コマンドは、メンテナの名前と連絡先を指定するために使用します。
など。
ENTRYPOINTコマンド
構文形式は2種類あり、1つは上記(シェル形式)です。
ENTRYPOINT cmd param1 param2 ...
2つ目は、exec形式です。
ENTRYPOINT ["cmd", "param1", "param2"...]
として。
ENTRYPOINT ["echo", "Whale you be my container"]
ENTRYPOINT コマンドは、コンテナの起動時に実行されるコマンドを設定します。
root@tankywoo-docker:~# cat Dockerfile
FROM ubuntu
ENTRYPOINT echo "Welcome!"</p> <p>root@tankywoo-docker:~# docker run 62fda5e450d5
Welcome!
USERコマンド
例えば、memcachedが動作しているユーザーを指定するには、上記のENTRYPOINTを使用します。
ENTRYPOINT ["memcached", "-u", "daemon"]
もっといい方法があるはずです。
ENTRYPOINT ["memcached"]
USER daemon
EXPOSEコマンド
EXPOSE コマンドは、実行中のイメージで公開するポートを設定します。
EXPOSE <port> [<port>...]
例えば、memcachedはポート11211を使用していますが、これを公開することで、コンテナの外から見たり通信したりすることができるようになります。
EXPOSE 11211
完全な例です。
# Memcached
# Memcached
# VERSION 2.2</p> <p># use the ubuntu base image provided by dotCloud
FROM ubuntu</p> <p>MAINTAINER Victor Coisne [email protected]</p> <p># make sure the package repository is up to date
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
RUN apt-get update</p> <p># install memcached
RUN apt-get install -y memcached</p> <p># Launch memcached when launching the container
ENTRYPOINT ["memcached"]</p> <p># run memcached as the daemon user
USER daemon</p> <p># expose memcached port
EXPOSE 11211
上記は公式の例です、国内は163か搜狐のソースに切り替えることをお勧めします、そうでない場合は遅すぎます。
root@tankywoo-docker:~# docker build -t tankywoo - < dck [38/480]
Uploading context 2.56 kB
Uploading context
Step 0 : FROM ubuntu
---> 99ec81b80c55
Step 1 : MAINTAINER Victor Coisne [email protected]
---> Using cache
---> 2b58110877f6
Step 2 : RUN echo "deb http://mirrors.163.com/ubuntu/ precise main restricted universe multiverse" > /etc/apt/sources.list
---> Running in f55a4a8bb069
---> d48c6a965398
Step 3 : RUN apt-get update
---> Running in da091a1dd6e7
Ign http://mirrors.163.com precise InRelease
Get:1 http://mirrors.163.com precise Release.gpg [198 B]</p> <p>.... </p> <p>Processing triggers for libc-bin (2.19-0ubuntu6) ...
Processing triggers for ureadahead (0.100.0-16) ...
---> 2886671b5b86
Step 5 : ENTRYPOINT ["memcached"]
---> Running in e8aeeab92cb6
---> 7148293a4053
Step 6 : USER daemon
---> Running in 288766b19606
---> 235e7f630ffa
Step 7 : EXPOSE 11211
---> Running in c6f881b9d51f
---> 666c5d65f396
Successfully built 666c5d65f396
Removing intermediate container f55a4a8bb069
Removing intermediate container da091a1dd6e7
Removing intermediate container f23631d3d45a
Removing intermediate container e8aeeab92cb6
Removing intermediate container 288766b19606
Removing intermediate container c6f881b9d51f
ENVコマンド
環境変数の設定に使用します
ENV <key> <value>
一度設定すると、それ以降のRUNコマンドは使用可能です。
この dockerfile で生成したイメージを使って新しいコンテナを作成すると、 docker inspect でこの環境変数を確認することができます。
root@tankywoo-docker:~# docker inspect 49bfc7a9817f
...
"Env": [
"name=tanky",
"HOME=/",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
...
中のname=tankyが設定されているものです。
また、docker実行時に環境変数を設定することで、環境変数を設定・変更することができます。
docker run -i -t --env name="tanky" ubuntu:newtest /bin/bash
ADDコマンド
src からコンテナの dest パスにファイルをコピーします。
ADD <src> <dest>
<src> は、ビルドされるソースディレクトリへの相対パスで、ファイルまたはディレクトリのパス、あるいはリモートファイルのURLです。
<dest> は、コンテナ内の絶対パスです。
VOLUMEコマンド
VOLUME ["<mountpoint>"]
として。
VOLUME ["/data"]
共有ディレクトリのマウントポイントを作成する
WORKDIRコマンド
WORKDIR /path/to/workdir
RUN、CMD、ENTRYPOINTコマンドで、現在の作業パスを設定する。
複数回設定可能、相対パスの場合は直前のWORKDIRコマンドからの相対パスとなる
例えば
WORKDIR /a WORKDIR b WORKDIR c RUN pwd
実際には/a/b/cの下でpwdを実行します。
CMDコマンド
3つのフォーマットがあります。
CMD ["executable","param1","param2"] (like an exec, preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (as a shell)
Dockerfileに含まれるCMDは1つだけで、複数ある場合は最後の1つだけが有効になります。
関連
-
Unison UOS、Androidアプリに対応 パソコンを携帯電話のように使える
-
Raspberry Pi 64-bit システムのインストールで libjasper-dev がパッケージが見つからないと表示される問題
-
UOS App Storeが動作しない場合はどうすればよいですか?UOS App Storeが動作しない場合の解決方法
-
UOSの試用期間を有効にするには?UOSの試用期間を有効にするには?
-
Windowsシステムは、ファイルを削除することはできませんどのようにwin7/8/10プロンプトは、この操作の解決策を実行するために必要なアクセス許可を行うには
-
Kali LinuxでWindowsエクスプロイトをコンパイルする方法
-
最新のXFCEデスクトップをインストールするためのチュートリアル
-
macbookair dual systemは良いのか?Windowsにデュアルシステムを導入するメリットとデメリット
-
UOSのシステムアップデートの方法は?グラフィックチュートリアルとUOSシステムを更新する方法
-
UOSシステムで開発者モードに入るには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
どのようにコンピュータのブートソフトウェアの自動起動win7/win10を迅速にオフにするには、ブートセルフスタートソフトウェアをオフにする
-
コンテナのメモリ使用量のシステムキャッシュの紹介
-
Unisys UOSのウィンドウエフェクトを無効にする方法は?Unisysのウィンドウエフェクトを無効にする方法のヒント
-
ハッカーが好んで使う12のOSを紹介します。
-
ユーザーが追加したフォントを Unison UOS にエクスポートするには?UOS フォントエクスポートのヒント
-
VMware仮想マシンがUSBデバイスを見つけられない場合、どうすればよいですか?
-
vmware仮想マシンが開かない、ポリシーが古すぎる場合はどうすればよいですか?
-
VMware仮想マシンのLinuxシステムに固定IPを設定する方法
-
MeeGo と Windows 7 のデュアル システムをインストールするには?
-
KVM仮想マシンの共通コマンド