はじめに
今年の4月にdocker meetup #2で、LTをさせて頂きました。
Docker地雷n本勝負
※「docker 地雷」で検索すると一番上に出てきます笑
そこでもお話したのですが、自分の環境ではdockerのデフォルト設定ですと、ディスク容量などで何かと問題がありましたので、その解決策を書いておきます。
以下はdockerインストール後、自分が行う設定です。
環境
- OS: ubuntu14.04
- docker version: 1.4.1
設定
# Docker Upstart and SysVinit configuration file
# Customize location of Docker binary (especially for development testing).
#DOCKER="/usr/local/bin/docker"
# Use DOCKER_OPTS to modify the daemon startup options.
#DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
DOCKER_OPTS="-g /mnt/docker -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock --insecure-registry [DOCKER_PRIVATE_REGISTRY]:5000"
# If you need Docker to use an HTTP proxy, it can also be specified here.
#export http_proxy="http://127.0.0.1:3128/"
# This is also a handy place to tweak where Docker's temporary files go.
#export TMPDIR="/mnt/bigdrive/docker-tmp"
export TMPDIR="/mnt/docker-tmp"
デフォルト設定から変更しているのは下記の点です。
※[DOCKER_PRIVATE_REGISTRY]の箇所は適宜変更して下さい。
- DOCKER_OPTS
- -g /mnt/docker
- -H tcp://0.0.0.0:4243
- -H unix:///var/run/docker.sock
- --insecure-registry [DOCKER_PRIVATE_REGISTRY]:5000
- export TMPDIR="/mnt/docker-tmp"
説明
DOCKER_OPTS="-g /mnt/docker"
dockerのrootディレクトリである /var/lib/docker の位置を変更するオプションです。
自分はrootパーティションが少ないのもあって、容量に余裕のある /mnt/docker にしています。
DOCKER_OPTS="-H tcp://0.0.0.0:4243"
これはtcpにてdocker APIを叩けるようにする設定です。
DOCKER_OPTS="-H unix:///var/run/docker.sock"
docker APIだけならば、上記の設定で良いのですが、それだけだとローカルでdockerコマンドを打つときに下記のようにする必要があります。
$ sudo docker -H=tcp://localhost:4243 version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): linux/amd64
Server version: 1.4.1
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 5bc2ff8
毎回このコマンドを書くのは億劫ですので、docker.sockも設定しておきます。
設定すると、通常通りのdockerコマンドが使用できます。
$ sudo docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): linux/amd64
Server version: 1.4.1
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 5bc2ff8
DOCKER_OPTS="--insecure-registry [DOCKER_PRIVATE_REGISTRY]:5000"
これは private docker registry を未使用の方は書かなくても良いものです。
最近(?)になって、docker private registry がセキュアになったようで、以前までの使用方法(docker run -p 5000:5000 registry)だとイメージpush時にエラーが出力されます。
そのエラーを回避するために、普通は証明書を発行した方が良いのですが、とりあえず使いたい場合などはこの設定を使うと有効です。
export TMPDIR="/mnt/docker-tmp"
これは地雷の頃の名残です…。dockerはイメージ生成の際に /tmp で作業を行います。rootディレクトリがかつかつな場合は、イメージ生成中、ディスクフルになりかねないため、余裕のある場所にしています。
※docker-tmpは予め作成しておき、適切なパーミッションの設定を行って下さい。
設定の反映と確認
$ ls /mnt
docker-tmp
$ sudo service docker restart
$ ls /mnt
docker docker-tmp
おわりに
以前と違って、dockerのインストールが随分簡単になりましたね。ubuntu14.04の場合、下記のコマンドでインストールができてしまいます。
$ curl -sSL https://get.docker.com/ubuntu/ | sudo sh
追記
[2015/08/31] centos7イメージ での yum update エラーに関して
- 環境
- Ubuntu 14.04 LTS
- docker 1.8.1
$ sudo docker pull centos:centos7
上記で取得したイメージにて、yum updateを行ったところ、docker build時にエラーが発生した。解決策は下記のようになる。(参考:cap_set_file not permitted on aufs storage driver only #6980)
sudo service docker stop
sudo vim /etc/default/docker
DOCKER_OPTS="-s devicemapper"
sudo service docker start
**注意点としては、devicemapperに切り替わるためか、これまでのdocker imageなどが削除されてしまう点。**前もって、バックアップを取ることを忘れないように。