361
374

More than 1 year has passed since last update.

Dockerコマンド よく使うやつ

Last updated at Posted at 2018-05-07
  • Kubernetesハンズオン目次
  • 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
    コンテナを起動する
    
    $ 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
    

    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
    Dockerが利用しているdisk容量の調査
    全体の使用量
    

    Register as a new user and use Qiita more conveniently

    1. You get articles that match your needs
    2. You can efficiently read back useful information
    What you can do with signing up
    Sign up Login
    361
    374