Memo/Docker

https://dexlab.net:443/pukiwiki/index.php?Memo/Docker
 

Docker

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

Java


For windows


イメージの容量削減


イメージ生成のベストプラクティス


コンテナ内からのメール送信


ストレージ使用量の確認

  • system毎の使用率表示
    sudo docker system df
  • 詳細: コンテナ毎の使用率表示
    sudo docker system df -v

便利な使い方


systemd経由で、docker-composeを自動起動

  • exampleサービス用のsystemdファイル。volumeは消さない。
    • --abort-on-container-exit: コンテナが1つでも停止したら全てのコンテナを停止
    • /etc/systemd/system/example.service
      [Unit]
      Description=docker-compose example service
      Requires=docker.service
      
      [Service]
      User=vagrant
      Type=simple
      
      EnvironmentFile=-/etc/sysconfig/compose.d/example
      Environment=COMPOSE_FILE=/home/vagrant/docker-compose.yml
      
      ExecStartPre=-/usr/local/bin/docker-compose -f ${COMPOSE_FILE} kill
      ExecStart=/usr/local/bin/docker-compose -f ${COMPOSE_FILE} up --abort-on-container-exit
      
      ExecStop=/usr/local/bin/docker-compose -f ${COMPOSE_FILE} stop
      
      Restart=always
      RestartSec=180s
      
      [Install]
      WantedBy=multi-user.target
    • 登録と実行
      sudo systemctl daemon-reload
      # 自動実行
      sudo systemctl enable example
      sudo service example start
      sudo service example stop

docker-compose: 複数のdockerコンテナをyamlで記述

  • volumes: データの永続化をする場合。ホストの固定パスにデータを置ける。
    • 省略した場合、rm, down等でデータが消える。
  • 例: mysql
  • docker-compose.yml
    version: '3'
    services:
      mysql:
        container_name: mysqld
        image: mysql:5.7
        volumes:
          # 初期データ投入用dir: 01_create.sql 等を置く
          - ./mysql/init:/docker-entrypoint-initdb.d
          # 永続化用
          - ./mysql/data:/var/lib/mysql
        ports:
          - "3306:3306"
        environment:
          MYSQL_DATABASE: db01
          MYSQL_USER: user01
          MYSQL_PASSWORD: eZfqol7ql7drIkyr
          MYSQL_ROOT_PASSWORD: NE0byoxdlbo6pefs
  • mysqlへ接続。「--protocol tcp」が無いとunix socketを使おうとしてエラーが出る。
    mysql -u root -p -h localhost --protocol tcp
  • mysqlのrootパスワードを変える場合。
    • docker-compose.ymlを変えて、stop/upしても変わらない。mysqlのファイルは、dockerのファイルシステムに書いてあるので、rmが必要。rmするとデータも消える。
      sudo docker-compose stop mysql
      sudo docker-compose rm mysql
      sudo docker-compose up -d mysql

コード整形


Javaアプリ関連


脆弱性検査


セキュリティ


BuildKit


NIC

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

CentOS7で There are no more loopback devices available.

sudo yum install docker device-mapper -y

sudo systemctl start docker
Job for docker.service failed. See 'systemctl status docker.service' and 'journalctl -xn' for details.

sudo systemctl status docker.service -l
...
 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."

# /dev/loop[1:6]を作成
for i in {0..6}; do sudo mknod -m0660 /dev/loop$i b 7 $i;done

# 開始
sudo systemctl start docker
systemctl enable docker

インストール

  • macOS
    brew install docker
    brew cask install docker

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-11-18 (月) 22:02:32 (1d)