#mynavi()
#setlinebreak(on);

* 目次 [#wcbec104]
#contents
- 関連
-- [[dockerでサクッとNginx環境構築]]
-- [[Nginx+uwsgi+Flaskをdockerで動かす]]
-- [[LAMP環境のdockerイメージを作る]]
-- [[Dockerコンテナ同士の通信]]

* 各種操作 [#w7f564b8]
#html(<div style="padding-left:10px;">)

** イメージの取得 [#mb294284]
#html(<div style="padding-left:10px;">)
#myterm2(){{
docker pull イメージ名[:タグ|@イメージのハッシュ値]
}}

例)
#myterm2(){{
docker pull centos:centos7
docker pull amazonlinux:2
}}
#html(</div>)

** コンテナの削除 [#m7fdee40]
#html(<div style="padding-left:10px;">)
#myterm2(){{
docker rm コンテナID
}}
#html(</div>)

** イメージのビルド [#o6562a46]
#html(<div style="padding-left:10px;">)
#myterm2(){{
docker build ./ -t イメージ名[:タグ]
}}
#html(</div>)

** イメージの確認 [#y468ceac]
#html(<div style="padding-left:10px;">)
#myterm2(){{
docker images
}}
#html(</div>)

** イメージの削除 [#l0778f0e]
#html(<div style="padding-left:10px;">)
#myterm2(){{
docker rmi イメージID
}}
#html(</div>)

** コンテナの起動 [#t3be01a7]
#html(<div style="padding-left:10px;">)
#myterm2(){{
docker run -it イメージ名[:タグ]
}}
#html(</div>)

** コンテナ名を指定してコンテナを起動 [#t152a9de]
#html(<div style="padding-left:10px;">)
#myterm2(){{
docker run --name コンテナ名  ...
# 例
docker run --name mysql -d mysql:latest
}}
#html(</div>)

** 環境変数を指定してコンテナを起動 [#z90f95e4]
#html(<div style="padding-left:10px;">)
#myterm2(){{
docker run -e 環境変数名=値
# 例
docker run -e MYSQL_ROOT_PASSWORD=root-password -d mysql:latest
}}
#html(</div>)

** コンテナをデーモン起動 [#zb730d40]
#html(<div style="padding-left:10px;">)
#myterm2(){{
docker run -d イメージ名[:タグ]
}}

** コンテナをデーモン起動しつつポートバインド [#j8a16f99]
#html(<div style="padding-left:10px;">)
#myterm2(){{
docker run -p 仮想サーバーのポート:コンテナのポート -d イメージ名[:タグ]
}}

#html(</div>)

** デーモン起動したコンテナに入る [#x98c1b00]
#html(<div style="padding-left:10px;">)
#myterm2(){{
docker exec -it コンテナID /bin/bash
}}
#html(</div>)

** 起動すると同時にコンテナに入る(exitするとコンテナは終了する) [#n00b9e36]
#html(<div style="padding-left:10px;">)
#myterm2(){{
docker run -it --rm イメージID /bin/bash
}}

例)
#myterm2(){{
docker run -it --rm amazonlinux:2 /bin/bash
docker run -it --rm centos:centos7 /bin/bash
}}
#html(</div>)

** ホスト側のディレクトリをマウントして起動 [#o45793e6]
#html(<div style="padding-left:10px;">)
#myterm2(){{
docker run -v ホスト側のPATH:コンテナのPATH イメージ名ID
}}
#html(</div>)

** 動作中のコンテナを確認 [#yc6d6761]
#html(<div style="padding-left:10px;">)
#myterm2(){{
docker ps
}}
#html(</div>)

** 停止しているコンテナを含めて確認 [#e371ca75]
#html(<div style="padding-left:10px;">)
#myterm2(){{
docker ps -a
}}
#html(</div>)

** コンテナの情報を確認 [#lb5791a6]
#html(<div style="padding-left:10px;">)
#myterm2(){{
docker inspect コンテナID
}}
#html(</div>)

** コンテナを停止 [#qe1ad9b1]
#html(<div style="padding-left:10px;">)
#myterm2(){{
docker container stop コンテナID
}}
#html(</div>)

** 起動中のコンテナで任意のコマンドを実行する [#c96f0aa0]
#html(<div style="padding-left:10px;">)
わざわざコンテナに入らなくてもコマンド実行は可能。
#myterm2(){{
docker exec コンテナID コマンド
}}
#html(</div>)

** コンテナからイメージを作成する [#pb643e76]
#html(<div style="padding-left:10px;">)

docker exec -it や docker run -it でコンテナに入って作業した状態をイメージとして残しておきたい場合は、docker commit が使用できる。
※既に停止したコンテナからイメージを作成する事も可能。

#myterm2(){{
docker commit コンテナID イメージ名:タグ
}}
#html(</div>)

** ファイルコピー [#ga708179]
#myterm2(){{
# コンテナからホスト側にコピー
docker cp コンテナID:/path_to/sample.txt sample.txt

# ホスト側からコンテナにコピー
docker cp sample.txt コンテナID:/path_to/sample.txt
}}
#html(</div>)

** コンテナイメージをファイルにエクスポートする [#na1056e3]
#html(<div style="padding-left:10px;">)
#myterm2(){{
docker export コンテナID > ファイル名
}}
※docker のメタ情報まで保存したい場合は docker save を使用する。
#html(</div>)

** ファイルからコンテナイメージを作成する [#v9717be4]
#html(<div style="padding-left:10px;">)
#myterm2(){{
docker import ファイル - イメージ名:タグ
}}
※docker save で保存したファイルの場合は docker load を使用する。
#html(</div>)

** dockerネットワークを作成する [#b33115ea]
#html(<div style="padding-left:10px;">)
#myterm2(){{
docker network create ネットワーク名
}}
#html(</div>)

** dockerネットワークを指定してコンテナを起動 [#k52a8b24]
#html(<div style="padding-left:10px;">)
#myterm2(){{
docker run --network ネットワーク名 ...
}}
#html(</div>)

** dockerネットワークの情報を確認する [#yed03afb]
#html(<div style="padding-left:10px;">)
#myterm2(){{
docker network inspect ネットワーク名
}}
#html(</div>)


** 掃除 [#h9c945e2]
#html(<div style="padding-left:10px;">)

コンテナをきれいにする
#myterm2(){{
docker container prune
}}

イメージををきれいにする
#myterm2(){{
# どのコンテナにも参照されていないイメージを削除
docker system prune
}}
#html(</div>)


#html(</div>)

* イメージをビルドする [#o866cce6]
#html(<div style="padding-left:10px;">)

ここではサンプルとして1秒毎にカウント表示するシェルを起動するコンテナイメージを作成する

** Dockerfile の作成 [#f4f15357]
#html(<div style="padding-left:10px;">)
#mycode2(){{
FROM amazonlinux:2
#FROM centos:centos7

USER root

RUN yum install -y which

# amazonlinux2の時
# psコマンドインストール
RUN yum -y install procps
RUN yum install -y python3

# centos7の時
# ※IUS Community Project のリポジトリを追加する(Python3系はCentOS 7の標準yumリポジトリで提供されていない)
#RUN yum install -y https://centos7.iuscommunity.org/ius-release.rpm
#RUN yum install -y python36

RUN mkdir /myapp
COPY myapp.sh /myapp/
RUN chmod 755 /myapp/*.sh

CMD ["/myapp/myapp.sh"]
}}
#html(</div>)

** アプリケーション(ここでは簡単なシェル)の作成 [#x0ecce04]
#html(<div style="padding-left:10px;">)
myapp.sh
#mycode2(){{
#!/bin/bash

i=0
while [ true ]; do
    i=`expr ${i} + 1`
    echo "i = ${i}"
    sleep 1
done
}}
#html(</div>)

** イメージのビルド [#n0181f8f]
#html(<div style="padding-left:10px;">)
#myterm2(){{
docker build ./ -t myapp:latest
}}
#html(</div>)

** ビルドしたイメージの確認 [#g1fb19e0]
#html(<div style="padding-left:10px;">)
#myterm2(){{
docker images
}}
#html(</div>)

** ビルド中にエラーになったコンテナにログインする [#qed0579c]
#html(<div style="padding-left:10px;">)

ビルド中によく分からない原因でエラーになりイメージが作成できない事がある。
この場合は、エラーになったコンテナをいったんイメージ化する事によりコンテナにログインする事ができる。

対象のコンテナIDを確認 (エラーになったコンテナも残っている)
#myterm2(){{
docker ps -a
}}

対象のコンテナをイメージ化する
#myterm2(){{
docker commit 対象のコンテナID イメージ名:タグ
}}

これで、エラー時点のコンテナにログインできる。
#myterm2(){{
docker run -it イメージ名:タグ /bin/bash
}}

#html(</div>)

#html(</div>)

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS