基本

注意点

  • Dockerではコンテナを削除するとコンテナ内のファイルシステム内に加えた変更点はすべて破棄されてしまう
    • ボリューム機能やボリュームプラグインを利用する

インストール

# yum install docker
# chkconfig docker on
# service docker start
# systemctl enable docker.service

ネットワーク

  • Docker上のネットワークを確認
    # docker network ls
    NETWORK ID     NAME      DRIVER    SCOPE
    68404cfc20d7   bridge    bridge    local
    8734698e49f4   host      host      local
    73a2d6fc1070   none      null      local
  • ネットワークの詳細を表示
    # docker network inspect bridge
    [
        {
            "Name": "bridge",
            "Id": "68404cfc20d79e6884e578fb1666b065d22c6a5168e8d3e311dc368339bc484d",
            "Created": "2021-05-18T08:39:46.2054623Z",
            "Scope": "local",
            "Driver": "bridge",
            "EnableIPv6": false,
            "IPAM": {
                "Driver": "default",
                "Options": null,
                "Config": [
                    {
                        "Subnet": "172.17.0.0/16",
                        "Gateway": "172.17.0.1"
                    }
                ]
            },
            "Internal": false,
            "Attachable": false,
            "Ingress": false,
            "ConfigFrom": {
                "Network": ""
            },
            "ConfigOnly": false,
            "Containers": {
                "66768b3228e486a9cee4377694961978599529f25906ee61b31ec075d5732d7e": {
                    "Name": "flamboyant_lamarr",
                    "EndpointID": "3a4743a6313199658f0d12e8ba97ee0450441b8c0e864e0ba10838860bf935b4",
                    "MacAddress": "02:42:ac:11:00:02",
                    "IPv4Address": "172.17.0.2/16",
                    "IPv6Address": ""
                }
            },
            "Options": {
                "com.docker.network.bridge.default_bridge": "true",
                "com.docker.network.bridge.enable_icc": "true",
                "com.docker.network.bridge.enable_ip_masquerade": "true",
                "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
                "com.docker.network.bridge.name": "docker0",
                "com.docker.network.driver.mtu": "1500"
            },
            "Labels": {}
        }
    ]

頻出イメージ

centos

  • CentOS
    # docker pull centos
    # docker run -i -t centos /bin/bash

busybox

  • 標準UNIXコマンドの主要コマンドをまとめて1つの実行ファイル化したツール

greyltc/lamp

  • LAMP環境
    # docker pull docker pull greyltc/lamp
    # docker run --name lamp01 -p 80:80 -p 443:443 -d greyltc/lamp

gargron/mastodon

  • Mastodonサーバ

docker-compose

  • docker-composeはDockerのコマンドであり、docker-compose.ymlという設定ファイルに基づき複数のコンテナを用いたサービスを従来よりも簡単に管理できるようにするもの
  • docker-compose.yml と docker-composeコマンドを使うことにより次のようにコンテナ作成を自動化できる
    • コンテナ上のサービスはサーバ内のファイルやリポジトリを元に作成させられる
    • サービス起動に必要な環境変数を外部ファイルから読み込める
    • 再起動時のサービスの振る舞いを設定できる
    • サービス上のデータはデータボリュームを使い保管できる
    • サービス上のポートをホスト側に繋ぐことが出来る
    • サービス同士の依存関係が設定できる

インストール

# curl -L https://github.com/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose

docker-compose.yml 作成

version: '2'
services:
  #
  # nginx-proxy
  #
  proxy:
    container_name: proxy
    image: docker.io/jwilder/nginx-proxy
    ports: 
      - "8080:80"
      - "8443:443"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
  #
  # lamp (foobar.fika.pw)
  #
  lamp01:
    container_name: lamp01
    depends_on:
      - proxy
    image: greyltc/lamp
    ports:
      - "8090-8180:80"
      - "8453-8543:443"
    environment:
      VIRTUAL_HOST: foobar.fika.pw
    volumes:
      - lamp01_html:/srv/http
      - lamp01_mysql:/var/lib/mysql

volumes:
  lamp01_html:
    driver: local
  lamp01_mysql:
    driver: local
  • 注意点
    • YAMLファイルはタブが使えない。スペースを打て!
    • コンテナ名を指定したい場合は container_name を指定
    • バージョン2のファイル では名前を付けたボリュームを使うにはトップ・レベルの volumes キー を指定する必要がある点に注意
  • 疑問点
    • 名前付きデータボリュームXXXの名前が勝手に「docker_XXX」になる

データの永続化

  • データボリュームはそのコンテナ特有のデータを扱う場合に使い、データコンテナは複数のコンテナから参照されるデータを収める場合に使うといいのかも

データボリューム

  • Dockerホストのディレクトリ(一般に「/var/lib/docker/volumes」)で、ここにコンテナの永続データを格納する
  • このディレクトリはコンテナ起動時にマウントポイントとして表示され、管理者がこれを指定する
  • 1つまたは複数のコンテナ内に特別に指定されたディレクトリ(コンテナから見た時)
  • Dockerで1つのオブジェクトとして管理されている
  • コンテナをまたいで共有と再利用可能である
  • データボリュームへ変更した結果はすぐに反映される
  • コンテナ自身が消えてもデータボリュームは消えない
  • コンテナを作成・起動時にデータボリュームも作成
    # docker run -t -i -v testvolume01:/data --name srv01 centos /bin/bash
  • -v [ボリューム名]:[コンテナ側のマウントポイント]
  • データボリュームのみ作成
    # docker volume create --name mysql_data

データボリュームコンテナ

  • データボリューム自体は、外部からアクセスができないため、データボリュームコンテナと呼ばれるコンテナを作成し、そこにデータボリュームをマウントする
  • コンテナをまたいで永続的なデータが共有できる
  • 通常のコンテナと何ら変わらないが、コンテナのイメージはライトなbusyboxなどを使う
# docker create -it -v datavol01:/data --name datavol01 busybox

# docker run -it --volumes-from datavol01 --name cent01 centos /bin/bash ... cent01 から /data が使える

ボリュームプラグイン

  • Dockerホスト以外のストレージをボリュームとして利用できる
  • 独自のプラグインを開発できるよう仕様も公開されている

バックアップツール

Convoy

  • Convoyは数あるボリュームドライバのうちの一つである.
  • Convoyにはデータボリュームをスナップショット・バックアップ/レストアする機能がある.
  • Convoyを使うには,データ自体を記録するストレージと,メタデータを記録するストレージがそれぞれ必要である

インストール

# https://github.com/rancher/convoy/releases/download/v0.5.0/convoy.tar.gz
# tar xvf convoy.tar.gz
# cp convoy/convoy convoy/convoy-pdata_tools /usr/local/bin/
# mkdir -p /etc/docker/plugins/
# bash -c 'echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec'

Convoyが利用するボリュームとメタボリュームの作成と設定

# truncate -s 100G data.vol
# truncate -s 1G metadata.vol
# losetup /dev/loop5 data.vol 
# losetup /dev/loop6 metadata.vol
  • truncate コマンドで Sparse File を作成。Sparse File は見かけ上は指定したサイズのものだが、ディスク消費量は実使用量になる。
  • losetup コマンドで ループデバイス を登録

Convoyのデーモンを起動

# convoy daemon --drivers devicemapper --driver-opts dm.datadev=/dev/loop5 --driver-opts dm.metadatadev=/dev/loop6 &

コンテナオーケストレーションツール

  • クラスタ構成を自動的に維持してくれる

Kubernetes

  • kubernetesが提供する機能
    • 関連するコンテナのグルーピング
    • コンテナに割り振られるIPアドレスの管理
    • コンテナ間のネットワークルーティング管理
    • 複数のコンテナを利用した負荷分散
    • コンテナに割り当てるストレージの管理
    • コンテナの監視

Mesos

Moby

Tips


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-04-05 (水) 09:28:37 (381d)