Monors Note

Pythonとそれ以外いろいろ

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によるアプリケーション開発環境構築ガイド」を読んで内容を自分なりにまとめたものです。

Amazon CAPTCHA