wiki:linux/docker

Version 13 (modified by yuna, 9 years ago) (diff)

--

Docker

個人的なメモなので、Dockerを勉強したい場合、ここより他のサイトを見ることをお勧めします。

Ubuntuで最新のDockerを使う

ここみる  http://www.ubuntuupdates.org/ppa/docker

最新版のDockerは、Dockerプロジェクトでパッケージを配布している。ここみるとよい  http://blog.docker.com/2015/07/new-apt-and-yum-repos/

設定について

http_proxyやDNSの設定は、/etc/default/dockerでやる。http_proxyは設定しておかないとProxy環境ではdocker search/pullが使えない。 DNSをきちんと設定しておかないと、サーバプロセスが遅くなることがあるので注意

Dockerfile

Dockerイメージを作るファイル

  • COPYは使わずADDを使う。ADDの方がURLを指定したり、アーカイブを自動解凍したり高機能。
  • ENTRYPOINT/CMDは引数無しで実行したときのデフォルトの実行コマンド。CMDは上書き可能でENTRYPOINTは上書きできない?(要確認)
    • 汎用的なイメージを作りたい場合はCMD。アプリケーションコンテナとしてユーザに勝手な操作をさせないならENTRYPOINT

ネットワーク

DockerfileにEXPOSEを記述して、公開するポートを指定。もしくは、--expose <port>でポートを公開。

Dockerのホスト以外からアクセスする場合は、-p <ホストのポート>:<コンテナのポート>オプションでホストのポートを使って公開。例えば、SSHのポートをホストの2022番でアクセスできるようにするには、下記のようになる。

# docker run -it --name foo --expose 22 -p 2022:22 ubuntu /bin/bash

起動済みのDockerのポートの公開

Docker自身には機能はありません。ホスト上でiptablesを利用して直接設定してやります。例えば、上記のコンテナ上の22番をホスト上の2022番に公開するには、次のようにします。

まず、コンテナのIPアドレスを調べます。

# docker inspect コンテナ名  |grep IPAddress
        "IPAddress": "172.17.0.18",

上記で調べたコンテナに対して、直接iptableを設定します。

# iptables -t nat -A DOCKER ! -i docker0 -p tcp -m tcp --dport 2022 -j DNAT --to-destination 172.17.0.18:22
# iptables -t filter -A DOCKER -d 172.17.0.18/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 22 -j ACCEPT

イメージ初期化のChips

Tipsですね。ポテトチップスではありません。

  • expect: コマンドラインでインタラクティブな設定を行う場合利用
  • supervisord: Dockerではsystemdが使えないので、supervisordなどでデーモンを起動するとよい

Dockerでベンチマーク

MariaDBでDockerのベンチマークを取ってみる。

コンテナ取得、起動

# docker pull mariadb
# docker run --name mariadb1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password  -d mariadb

ベンチマークツールインストール

# apt-get install sysbench mariadb-client

ベンチマーク準備

# mysqladmin -h 192.168.1.5 -u root --password=password create sbtest
# sysbench --test=oltp --oltp-table-size=200000 --max-time=300 --max-requests=0
  --mysql-host=192.168.1.5 --mysql-port=3306 --mysql-table-engine=InnoDB
  --mysql-user=root --mysql-password=password --mysql-engine-trx=yes --num-threads=5
  prepare

ベンチマークをやり直し場合、mysqladmin dropでsbtestを削除してからやり直す。

ベンチマーク実行

# sysbench --test=oltp --oltp-table-size=200000 --max-time=300 --max-requests=0
  --mysql-host=192.168.1.5 --mysql-port=3306 --mysql-table-engine=InnoDB 
  --mysql-user=root --mysql-password=password --mysql-engine-trx=yes --num-threads=5
  run