Memo/Docker

http://dexlab.net/pukiwiki/index.php?Memo%2FDocker
 

Docker

  • https://www.docker.io/
    • 仮想化ではなく、LXC(Linux Container)技術を用い、ホストOSの上に独立した環境を構築する。そのため環境を仮想化より早く作れる。ホストOSからプロセスは見える
    • 仮想化(VMware, VirtualBox?, VirtualPC等)はハードウェアをエミュレートしている。
    • 2017-04-21 現在、実験環境では動作するが、本番環境では安定して運用するには向かない。各社(AWS, Google, 他)多大な労力を裂いて検証している

Registry

Docker Imageを保存しておく場所


オーケストレーションツール


rootでも削除できないファイルが出来た

  • IMMUTABLE属性が付いているとrootユーザでも削除できない。正確には削除後、以下のように「??????????」になる。
  • docker コンテナ内で削除しようとした
    1. ls -la /usr/lib/python2.7/site-packages/chardet/ | head -n 5
    2. ls: cannot access /usr/lib/python2.7/site-packages/chardet/__init__.py: No such file or directory
    3. ...
    4. ?????????? ? ?    ?       ?            ? big5freq.py
  • コンテナにlsattr, chattr のインストール
    1. # CentOS 7
    2. sudo yum install e2fsprogs
  • コンテナ上での表示
    1. lsattr /usr/lib/python2.7/site-packages/chardet/__init__.py
    2. lsattr: No such file or directory while trying to stat /usr/lib/python2.7/site-packages/chardet/__init__.py
  • ホスト上での表示
    1. lsattr: No such file or directory while trying to stat /var/lib/docker/overlay/bd0b625402dd21b4b5ebafed04ad1456c72c0154643205a2170cffcb600458d6/merged/usr/lib/python2.7/site-packages/chardet/__init__.py
    2.  
    3. LANG=C sudo chattr -ias /var/lib/docker/overlay/bd0b625402dd21b4b5ebafed04ad1456c72c0154643205a2170cffcb600458d6/merged/usr/lib/python2.7/site-packages/chardet/
    4. chattr: Inappropriate ioctl for device while reading flags on /var/lib/docker/overlay/bd0b625402dd21b4b5ebafed04ad1456c72c0154643205a2170cffcb600458d6/merged/usr/lib/python2.7/site-packages/chardet/

dockerコンテナの起動/存在チェック

  • コンテナの起動数等表示
    1. sudo docker info
    2. Containers: 5
    3.  Running: 5
    4.  Paused: 0
    5.  Stopped: 0
    6. Images: 5
  • コンテナが起動している場合:0, stop,存在しないコンテナの場合:1
    1. sudo docker top awx_web > /dev/null 2>&1;echo $?
    2. 0
  • コンテナが起動している場合
    1. sudo docker inspect postgres -f '{{.State.Running}}';echo $?
    2. true
    3. 0
  • コンテナが停止している場合
    1. sudo docker inspect postgres -f '{{.State.Running}}';echo $?
    2. false
    3. 0
  • コンテナが存在しない場合
    1. sudo docker inspect dummy -f '{{.State.Running}}';echo $?
    2.  
    3. Error: No such object: dummy
    4. 1

dockerコマンド

  • バージョン
    1. docker --version
    2. Docker version 17.09.0-ce, build afdb6d4
  • ps: コンテナ一覧
    • --filter: 「name=awx」image名にawxを含むものだけ表示。「status=running」等
    • --no-trunc: 省略せずに表示
    • --format: 書式指定「table 」でヘッダが付く。\tでタブ区切り
      1. sudo docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}"
      2. CONTAINER ID        IMAGE                        PORTS
      3. 6679d27d96c0        ansible/awx_task:1.0.5       8052/tcp
      4. a641e866bcae        ansible/awx_web:1.0.5        0.0.0.0:80->8052/tcp
  • コンテナ毎のCPU, Memory, I/O使用率等の表示
    1. sudo docker stats [CONTAINER NAME1] [CONTAINER NAME2] ...
  • コンテナの起動/停止/再起動
    1. docker <start|stop|restart> <CONTAINER NAME>
  • コンテナの一括削除
    1. sudo docker stop $(sudo docker ps -aq)
    2. sudo docker rm $(sudo docker ps -aq)
  • イメージの表示
    1. sudo docker images
  • イメージの削除
    1. sudo docker rmi <image id>
    2.  
    3. # フィルタして削除
    4. FILTER=dummy
    5. sudo docker rmi -f $(sudo docker images | grep $FILTER | awk '{ print $3 }')
  • postgresコンテナのSTDOUT/STDERRの表示
    1. sudo docker logs postgres
  • postgresコンテナにログイン
    1. sudo docker exec -ti postgres bash
    2.  
    3. # 終了
    4. exit
  • 任意コマンドの実行
    1. sudo docker exec postgres bash -c "psql -V"
    2.  
    3. psql (PostgreSQL) 9.6.5
  • コンテナ設定表示
    1. sudo docker inspect postgres
    2.  
    3. # 一部だけ表示
    4. sudo docker inspect -f '{{.Mounts}}' postgres
    5. [{bind  /var/lib/pgdocker /var/lib/postgresql/data  Z true rprivate}]

CentOS7.xへのインストール

  • CentOS7.x: docker, docker-composeインストール
    1. sudo yum-config-manager \
    2.  --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    3. sudo yum-config-manager --disable docker-ce-edge
    4. sudo yum install docker-ce
    5. sudo systemctl start docker
    6. sudo systemctl enable docker
    7. docker --version
    8. Docker version 17.06.0-ce, build 02c1d87
    9.  
    10. # docker-composeのインストール
    11. sudo curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    12. sudo chmod +x /usr/local/bin/docker-compose
    13. docker-compose --version
    14. docker-compose version 1.14.0, build c7bdf9e
  • nginxをポート80で起動
    1. docker run -d -p 80:80 --name webserver nginx
    2.  
    3. # image
    4. docker images
    5. REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    6. nginx               latest              b8efb18f159b        12 days ago         107MB
    7.  
    8. # psで確認。-aで停止しているコンテナも表示
    9. docker ps
    10. CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
    11. 1f7cd1b095ac        nginx               "nginx -g 'daemon ..."   3 seconds ago       Up 2 seconds        0.0.0.0:80->80/tcp   webserver
    12.  
    13. # curlで確認
    14. curl --head http://127.0.0.1/
    15. HTTP/1.1 200 OK
    16. Server: nginx/1.13.3
    17. ...
    18.  
    19. # 停止
    20. docker stop 1f7cd1b095ac
    21. 1f7cd1b095ac

Docker EE


コンテナ毎のログをファイルを分けて出力する

Docker image


NIC

  • CentOS7: docker0という仮想NICが増えるが、/etc/sysconfig/network-scripts/ 以下には存在しない

CentOS7で There are no more loopback devices available.

  1. sudo yum install docker device-mapper -y
  2.  
  3. sudo systemctl start docker
  4. Job for docker.service failed. See 'systemctl status docker.service' and 'journalctl -xn' for details.
  5.  
  6. sudo systemctl status docker.service -l
  7. ...
  8.  9月 07 15:46:04 centos7-server docker-current[2886]: time="2016-09-07T15:46:04.652301456+09:00" level=error msg="There are no more loopback devices available."
  9.  
  10. # /dev/loop[1:6]を作成
  11. for i in {0..6}; do sudo mknod -m0660 /dev/loop$i b 7 $i;done
  12.  
  13. # 開始
  14. sudo systemctl start docker
  15. systemctl enable docker

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-06-19 (火) 18:28:56 (5d)