Dockerコマンドまとめ
コンテナ起動・終了
普通に起動
# docker run -i -t docker.io/centos /bin/bash
-i:コンテナーの標準入力を開く。/bin/bashなどでコンテナーを操作する際に指定
-t:tty(端末デバイス)を確保する。/bin/bashなどでコンテナーを操作する際に指定
名前を付けて起動
# docker run --name isoittech01 -i -t docker.io/centos /bin/bash
終了と同時にコンテナ破棄する
# docker run --rm --name isoittech01 -i -t docker.io/centos /bin/bash
コンテナをバックグラウンドで起動する
# docker run --name isoittech01 -i -t -d docker.io/centos /bin/bash
※BG起動時は「--rm」オプションは指定できない(Conflictする)
BGで起動したコンテナへのアタッチ
# docker ps -a
でCONTAINER IDを確認する
# docker attach 3437f04ffc49
のようにCONTAINER IDを指定してコマンド実行する
※CONTAINER IDではなく、IMAGE NAMEでも可。
(ENTER)を押してアタッチする
BG起動コンテナへアタッチからのログアウト
dockerコンテナ内でCtrl + pキーとCtrl + qキーの順に押下
BGで起動したコンテナの停止
# docker ps -a
でCONTAINER IDを確認する
# docker stop 3437f04ffc49
のようにCONTAINER IDを指定してコマンド実行し、停止する
※CONTAINER IDではなく、IMAGE NAMEでも可。
ポートフォワードして起動
docker run -i -t -p 50050:80 centos:centos6/httpd /bin/bash
他の(データストレージ用の)コンテナをVolume指定して起動
docker run -h localmysql -p 3306:3306 --name mysql -d --volumes-from=storage centos7/mysql
※-h localmysql
では任意のホスト名を指定
再起動
docker restart <コンテナ名>
コンテナ保存
保存
# docker ps -a
でCONTAINER IDを確認する
# # docker commit c731793b5526 docker.io/centos:latest
で保存
コンテナ一覧
全て表示
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 738d5df288a8 docker.io/centos:latest "/bin/bash" 10 minutes ago Exited (0) 9 minutes ago isoittech01 7aaf20cac495 docker.io/centos:latest "/bin/bash" 14 minutes ago Exited (0) 11 minutes ago jovial_elion
イメージ・コンテナ管理
イメージ取得
# docker pull centos
タグ名変更
# docker images
でIMAGE IDを確認する
# docker tag <IMAGE ID> <TAG>
(例)
# docker tag centos7/mysql:latest centos7/mysql:20150815
# docker rmi <古いイメージのID>
イメージ削除
# docker rmi docker.io/centos:centos7
Untagged: docker.io/centos:centos7
コンテナ削除
# docker ps -a
でCONTAINER IDを確認。
# docker rm 738d5df288a8 7aaf20cac495
でコンテナ削除(複数可能)。
※CONTAINER IDではなく、IMAGE NAMEでも可。
-f
付けるとstopやってから削除してくれる。
イメージ作成
# docker commit <CONTAINER ID> <REPOSITORY:TAG>
イメージ作成(Dockerfile利用)
# docker build [ -t <イメージ名< [ : <タグ名> ] ] <Dockerfileのあるディレクトリ>
例:docker build -t centos7/httpd:latest .
イメージの系譜確認
# docker images --tree
Docker Registry
起動
# docker run -d -p 5000:5000 -v /var/docker/registry:/var/docker/registry registry:2.0
今後、Docker Registry自体を別サーバへ移行する際、上記/var/docker/registry
を圧縮して
同様に起動する(※それが正規手法・効率的なのかは未確認)
push
- まず、push対象イメージにタグを付ける
# docker tag <イメージ名> <レジストリホスト>[:<レジストリポート>]/<イメージ名>
例:docker tag docker.io/centos xxxxxx.com:5000/my_centos
例:docker tag docker.io/centos localhost:5000/my_centos
※docker images
でREPOSITORY
に表示されるdocker.io/centos
のdocker.io
は、要はタグ=レポジトリホスト名という理解でOK。
- そしてpush
# docker push <レジストリホスト>[:<レジストリポート>]/<イメージ名>
コンテナ起動中のテクニック
コンテナ内のコマンドをコンテナ外から実行する
docker exec -d コンテナ名 <コマンド> <引数1> <引数2>...<引数Z>
→-d
を付けるとバックグラウンド
コンテナ内のファイルをホストOSにコピーする
docker cp <コンテナID>:/etc/some.txt some.txt
コンテナへファイルを送信する
docker cp <コピー元ファイル> <コンテナID>:<コピー先ファイルフルパス>
例:docker cp some.txt httpdocker:/etc/some.txt
Docker 1.7以前は下記:
docker exec -i <コンテナ名> bash -c 'cat > <コピー先ファイル>' < <コピー元ファイル> ex)docker exec -i httpdocker /bin/bash -c 'cat > /path/to/file' < /path/from/file
- docker exec でコンテナ内でコマンドを実行
- その際 -i オプションによりホスト側の標準入力がコンテナ内の標準入力に接続される
- ホスト側ではコピー元ファイルを標準入力に流し込む
- コンテナ内では cat が標準入力の内容をコピー先ファイルに書き出す
コンテナのIPアドレスを調べる
docker inspect --format '{{ .NetworkSettings.IPAddress }}' <コンテナ名>
トラブルシューティング
dockerコマンド何してもアカン
FATA[0000] Get http:///var/run/docker.sock/v1.18/images/json: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?
が出る場合は、service docker restart
する。
未分類メモ
ストレージコンテナ
stopしただけじゃデータは無くならない。
- ストレージコンテナとして/optをVOLUME指定でimageを作成。
- 上記イメージからコンテナstorageを作成。
- storageをストレージとして、mysqlコンテナを起動
- mysqlコンテナ上でテストとしてDB,テーブルを作成。
- mysql, storage両コンテナをstopで落とす。
- 再度コンテナ起動して作成したテーブルの存在を確認を試みる。結果は存在。
- →
docker rm
しないとやっぱり無くならないのね。