Dockerによるアプリケーション開発環境構築ガイド
Dcokerによる基本的なコマンド
Dockerコマンドのシーン毎の利用例
1. Dockerイメーシを取得しRunする。
- docker imageをpullする。 docker pull
- imageからconteinerをrunする。 docker run -d //demon化 -it //擬似TTY --name hoge ubuntu:16.04 bash
2.ターミナルからphpをインストールして、新しいイメージを作成する。
- 1で起動したコンテナに入る。docker exec -it //擬似TTYで接続します。(Docker内でコマンドの実行のみをしたい場合は不要?) hoge bash
- 起動したコンテナで色々作業をする。
- 上記の操作を反映したコンテナのイメージをcommitで作成する。docker commit hoge
- 作成したdocker imageにtagをつける。docker tag [作成されたID] smpledokcer1234/ubuntu_with_php:1_0
<疑問>
docker run -it
<-it
ってなんで必要なの? <答え> 作成したDcokerの標準入出力を中継してくれる擬似的なTTYというものを作成する。 これを指定しないと、docker exec -it hoge bash
などしてもthe input device is not a TTY
と言われて怒られる。
3.作成したイメージをファイルに出力して、一度手元から消した後にファイルを読み込んで復元
- imageをファイルに保存する。docker save -o /tmp/ubuntu_with_1_0 sampbledocker1234/ubuntu_with_php:1_0
- imageを一旦消す。 docker irm sampledocker1234/ubuntu_with_php:1_0
- loadコナンをを用いてファイルの読み込みを行う。docker load < /tmp/ubuntu_with_php_1_0
4.ローカルファイルをコンテナにコピー、逆にコンテナのファイルをローカルにコピーする
- ローカルマシーンのファイルをDockerにコピーする。touch samplefile | docker cp samplefile [dockerID]
- Dockerコンテナのファイルをローカルにコピーします。docker cp [dockerID]:samplefile /temp/
DockerfileでオリジナルのDcokerを作成する。
Docker CommitではOriginalのDocker Imageを元に任意の処理を行ったのちに、Imageを作成する事ができました。
しかし、この方法ではどのImageを使用してどの様な操作を行ったのかを後から確認するには大変です。
どのため、Dockerにはdocker build
というDcokerfileというファイルで定義した一連の手続きをコンテナイメージを作成する仕組みです。
Dockerfileとは
Dcokerfile
には下記を指定する事が可能です。
- Dcokerイメージの指定
- 必要なパッケージのインストール
- ファイルやディレクトリのコンテナ内のコピー
- ユーザアカウントの作成や任意のコマンドの実行
Dockerfileで使用できるコマンド
Dockerfileを記述するのに最低限必要なコマンドは下記の通りです。
コマンド | 意味 |
---|---|
FROM | ベースとなるDockerイメージを指定するコマンド |
ENV | 環境変数を設定するためのコマンド |
ARG | buildをする際に利用する引数を定義するコマンド。 デフォルト値を持つ事もできる。 buildコマンドからは --build-ages オプションにより利用する。 |
LABEL | Dockerイメージにメタデータを付与するためのコマンド |
RUM | shellの実行を行うためのコマンド |
SHELL | デフォルトのコマンドを設定するためのコマンド |
WORKDIR | 起点となるディレクトリを変更するためのコマンド。 この設定を行うとRUN, CMD, ENTRYPOINT COPY, ADDのコマンドで相対パスが使われた時はそのデフォルトを起点として解釈される。 |
ADD | ファイルやディレクトリおよび指定されたURLリソースをコンテナの指定されたパスに対してコピーするコマンド。 圧縮されている場合は解凍されてコピーされる。 |
COPY | ADDの解凍されずにcopyされる版 |
EXPOSE | コンテナがlistenするポート番号明示するためのコマンド。 あくまでも明示的に宣言するだけで実際に宣言しないとポートが開かない訳は無い。 ただし、実行時には正しく-pオプションにsてdockerホストとのポートを接続する必要はある。 |
ENTRYPOINT | コンテナ起動時に事項するコマンドを指定するコマンド |
CMD | ENTRYPOINTと同じ |
dockerでのポート
Docker内部にアプリをインストールした場合、そのアプリに対して通信を行う必要が出てくる。 この様な場合、docker内部のアプリと通信を可能にするために、ポートを設定する必要がある。
ポートの指定はdocker run -p [hostのIPを指定(ex: localhost)]:[host側のポートを指定]:[Docker側のポートを指定]
を使用すれば可能です。
例えば、ホスト側の80ポートに対してDockerの80ポートをバインドしたい場合は下記の通り設定を行う。
▶︎入力
docker run -d -p 80:80 sample:nginx
▶︎出力
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4fb9e407daa6 sample:nginx "nginx -g 'daemon of…" 7 hours ago Up 7 hours 0.0.0.0:80->80/tcp
(追記予定)
※「Dockerによるアプリケーション開発環境構築ガイド」を読んで内容を自分なりにまとめたものです。