250
@Esfahan

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 docker 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

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

コンテナのIPアドレスの確認方法

$ sudo docker inspect --format '{{ .NetworkSettings.Networks.renewal_default.IPAddress }}' \
    {コンテナIDorコンテナの名前}

See full command of running/stopped container in Docker

--no-truncをつければ全部見れる

$ sudo docker ps -a --no-trunc

or

See full command of running/stopped container in Docker

$ sudo docker inspect -f "{{.Name}} {{.Config.Cmd}}" $(sudo docker ps -a -q)

dockerのlog

ホストOS上の以下の場所にある。

/var/lib/docker/containers/(コンテナID)/(コンテナID)-json.log

コンテナIDが36b5e0da6c72の場合

$ sudo ls -l /var/lib/docker/containers/ | grep 36b5e0da6c72
drwx------ 4 root root 237 Jun 26 13:08 36b5e0da6c72d3e5597dbececd566725967f895ef790e00a51f7df9aaa9bfccb
$ sudo ls -l /var/lib/docker/containers/36b5e0da6c72d3e5597dbececd566725967f895ef790e00a51f7df9aaa9bfccb
total 24
-rw-r----- 1 root root    0 Jun 26 13:08 36b5e0da6c72d3e5597dbececd566725967f895ef790e00a51f7df9aaa9bfccb-json.log
drwx------ 2 root root    6 Jun 26 13:08 checkpoints
-rw------- 1 root root 2682 Jun 26 13:08 config.v2.json
-rw-r--r-- 1 root root 1421 Jun 26 13:08 hostconfig.json
-rw-r--r-- 1 root root   13 Jun 26 13:08 hostname
-rw-r--r-- 1 root root  177 Jun 26 13:08 hosts
drwx------ 3 root root   17 Jun 26 13:08 mounts
-rw-r--r-- 1 root root   85 Jun 26 13:08 resolv.conf
-rw-r--r-- 1 root root   71 Jun 26 13:08 resolv.conf.hash

php-apacheコンテナの起動

$ docker run -itd \
        -p 7777:80 \
        -v $(pwd)/code:/var/www/html \
        --name php70-apache php:7.0-apache

nginxのコンテナを作るとき

Dockerはプロセスがフォアグラウンドで実行されていないとコンテナがExitされる。
Nginxはデフォルトでデーモン実行、つまりバックグラウンド実行なのでコンテナが立ち上がらない。

以下のいずれかの方法で、nginxをフォアグラウンド実行にすることができる。

nginx.confに書き込む

RUN apt-get update && \
    apt-get install -y nginx && \
    echo "daemon off;" >> /etc/nginx/nginx.conf

起動コマンドにオプションを渡す

CMD ["/usr/sbin/nginx", "-g", "daemon off;"]

CentOS7

FROM centos:7

RUN yum -y update
RUN yum install -y http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
RUN yum install -y --enablerepo=nginx nginx

RUN echo "This is a sample page." > /usr/share/nginx/html/index.html

EXPOSE 80
ENTRYPOINT /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf

起動

$ docker run --rm -p 8080:80 --name nginx-test -itd nginx-test /bin/bash

HostOSで実行。

$ curl localhost:8080
This is a sample page.

Dockerfileでaliasを設定する

Dockerfile
From centos:7

RUN echo 'alias ll="ls -l"' >> ~/.bashrc

参考:Docker nginxのコンテナすぐに終了してしまう現象

Dockerのbridge IPアドレス固定

Dockerの既定ブリッジであるdocker0が、既存のIPアドレスと被ってしまったときの対応方法。
/etc/docker/daemon.jsonを作り、default-address-poolsに割り当てたいIPアドレスを指定する。

/etc/docker/daemon.json
{
    "default-address-pools":[
        {
            "base":"192.168.0.1/16",
            "size":24
        }
    ]
}
$ sudo systemctl restart docker

docker0の確認

$ ip addr show dev docker0

bridgeの確認

$ sudo docker network inspect bridge

コンテナのリソース監視

$ sudo docker stats $(sudo docker inspect -f {{.NAME}} $(sudo docker ps -q))

CONTAINER ID   NAME                        CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O     PIDS
b14226d5a45a   process-exporter            0.00%     13.92MiB / 31.42GiB   0.04%     268kB / 3MB       0B / 0B       16
135c999028f1   redis-exporter              0.91%     15.11MiB / 31.42GiB   0.05%     5.41MB / 3.47MB   0B / 0B       17
5c4a92da9161   exporter_proxy              0.08%     7.93MiB / 31.42GiB    0.02%     22.2MB / 22.2MB   0B / 0B       21
34cd1b4f9d11   nginx-prometheus-exporter   0.00%     10.3MiB / 31.42GiB    0.03%     458kB / 493kB     0B / 0B       14
29ab382040ba   mtail                       0.00%     5.555MiB / 31.42GiB   0.02%     233kB / 519kB     0B / 6.14kB   27
8e23c7b07b3f   node-exporter               0.00%     15.27MiB / 31.42GiB   0.05%     343kB / 7.33MB    0B / 0B       20
b0b2de460757   postgres-exporter           0.00%     13.43MiB / 31.42GiB   0.04%     16.2MB / 8.31MB   0B / 0B       17

関連

参考

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
Esfahan
WEB系出身。現在はビッグデータの基盤構築などがメイン。 / YouTubeでゲームチャンネルやってます → https://www.youtube.com/channel/UCeqPhExV09EF5o8lZLO15Eg
この記事は以下の記事からリンクされています
EsfahanKubernetesハンズオン目次からリンク
過去の5件を表示する

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
ユーザー登録
すでにアカウントを持っている方はログイン
記事投稿イベント開催中
SORACOMを使ったIoTにチャレンジしよう!
~
自社サービスの技術スタック公開
~