docker

Dockerコマンド よく使うやつ

imageの作成

pullでイメージを取得する場合

python2系のイメージをpullする

$ sudo docker pull python:2

build系

Dockerfileを元にイメージを作成する

Dockerfileを作成

python2系をインストールするだけのDockerfileを作成

FROM python:2

Dockerfileからimageをbuildする

$ sudo docker build [ -t {イメージ名} [ :{タグ名} ] ] {Dockerfileのあるディレクトリ}

e.g.)

$ sudo docker build -t sample-project/python:1.0 ./sample-app

run系

コンテナを起動する

$ sudo docker run --name {コンテナ名} -it {image名} /bin/bash

e.g.)

$ sudo docker run --name python-sample -it sample-project/python:1.0 /bin/bash

コンテナを起動、exitと同時にコンテナを削除する

$ sudo docker run --rm --name python-sample -it sample-project/python:1.0 /bin/bash

バックグラウンドで実行する

$ sudo docker run --name python-sample -it -d sample-project/python:1.0 /bin/bash

ホストOSの領域をマウントする

$ sudo docker run --name python-sample \
        -v /home/user/sample-app:/opt/sample-app \
        -it -d sample-project/python:1.0 /bin/bash

ホストOSのssh keyをfowardingして、コンテナ内で使う方法

コンテナを起動する時に、$SSH_AUTH_SOCKをマウントする

$ sudo docker run --name python-sample \
        -v ${SSH_AUTH_SOCK}:/ssh-agent \
        -e SSH_AUTH_SOCK=/ssh-agent \
        -v /home/user/sample-app:/opt/sample-app \
        -it -d sample-project/python:1.0 /bin/bash

実行中のコンテナを確認する

$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
f689dd43a0d3        sample-project/python:1.0    "/bin/bash"         4 seconds ago       Up 4 seconds                            python-sample

コンテナに入る

$ sudo docker exec -it f689dd43a0d3 bash
root@f689dd43a0d3:/#

コンテナを指定してホストOS上でコマンドを実行する

$ docker exec -it f689dd43a0d3 python --version
Python 2.7.15
$ docker exec -it f689dd43a0d3 which pip
/usr/local/bin/pip

コンテナを削除する

$ sudo docker rm -f f689dd43a0d3

image一覧

$ sudo dokcer images

imageを削除する

$ sudo docker rmi d69bc9d9b016

コンテナ名からコンテナIDを取得

$ docker ps -aqf "name=container_name"

コンテナ名からコンテナIDを取得してコンテナに入る

$ sudo docker exec -it $(docker ps -aqf "name=container_name") /bin/bash

コンテナが起動しない場合のdebug方法

下記コマンドでコンテナのログを確認する。

$ sudo docker logs {コンテナID}

それでも原因がわからない場合はexitedしたコンテナに入って調べる

docker commitでexitedしたコンテナからイメージを作成する

$ sudo docker commit {exitedしたコンテナID} {コンテナ名を適当に付ける}
sha256:b951eaf534244788b79aba5fbe4186c8bc72ab1550a7fc700b950521761d8a6e

コンテナを起動する

$ sudo docker run --rm -it {適当につけたコンテナ名} sh

もしくは

$ sudo docker run --rm -it b951eaf534244788b79aba5fbe4186c8bc72ab1550a7fc700b950521761d8a6e sh

これでコンテナに入れるので、中で調査する

参考