「Docker」の版間の差分
2行目: | 2行目: | ||
[[en:Docker]] |
[[en:Docker]] |
||
[[ru:Docker]] |
[[ru:Docker]] |
||
+ | [[zh-tw:Docker]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|systemd-nspawn}} |
{{Related|systemd-nspawn}} |
||
12行目: | 13行目: | ||
== インストール == |
== インストール == |
||
− | [[公式リポジトリ]]にある {{Pkg|docker}} パッケージを[[pacman|インストール]]して {{ic|docker.service}} を[[systemd#ユニットを使う| |
+ | [[公式リポジトリ]]にある {{Pkg|docker}} パッケージを[[pacman|インストール]]して {{ic|docker.service}} を[[systemd#ユニットを使う|起動]]してください。i686 アーキテクチャの場合、{{AUR|docker-git}} をインストールしてください。動作検証するために、次を実行: |
# docker info |
# docker info |
||
72行目: | 73行目: | ||
=== Arch Linux === |
=== Arch Linux === |
||
==== x86_64 ==== |
==== x86_64 ==== |
||
− | 次のコマンドは x86_64 イメージを取得します: |
+ | 次のコマンドは [https://hub.docker.com/r/base/archlinux/ base/archlinux] x86_64 イメージを取得します: |
# docker pull base/archlinux |
# docker pull base/archlinux |
||
84行目: | 85行目: | ||
$ cp /etc/pacman.conf ./mkimage-arch-pacman.conf # or get a pacman.conf from somewhere else |
$ cp /etc/pacman.conf ./mkimage-arch-pacman.conf # or get a pacman.conf from somewhere else |
||
$ LC_ALL=C ./mkimage-arch.sh # LC_ALL=C because the script parses the console output |
$ LC_ALL=C ./mkimage-arch.sh # LC_ALL=C because the script parses the console output |
||
− | # docker run -t -i --rm archlinux /bin/bash # try it |
+ | # docker run -t -i --rm base/archlinux /bin/bash # try it |
ネットワーク接続や CPU が遅い場合は、ビルドのタイムアウト時間を伸ばすことができます: |
ネットワーク接続や CPU が遅い場合は、ビルドのタイムアウト時間を伸ばすことができます: |
||
127行目: | 128行目: | ||
詳しくは [https://github.com/docker/docker/issues/6853 GitHub の issue] を見てください。 |
詳しくは [https://github.com/docker/docker/issues/6853 GitHub の issue] を見てください。 |
||
+ | |||
+ | === Btrfs ファイルシステムで Docker イメージを消去 === |
||
+ | |||
+ | [[btrfs]] ファイルシステムで docker イメージを削除すると {{ic|/var/lib/docker/btrfs/subvolumes/}} にサイズが0のイメージが残されてしまいます。これを削除しようとするとパーミッションエラーが表示されます: |
||
+ | # docker rm bab4ff309870 |
||
+ | # rm -Rf /var/lib/docker/btrfs/subvolumes/* |
||
+ | rm: cannot remove '/var/lib/docker/btrfs/subvolumes/85122f1472a76b7519ed0095637d8501f1d456787be1a87f2e9e02792c4200ab': Operation not permitted |
||
+ | |||
+ | このエラーは btrfs が docker イメージのためにサブボリュームを作成したのが原因です。したがって削除するときの正しいコマンドは次のようになります: |
||
+ | # btrfs subvolume delete /var/lib/docker/btrfs/subvolumes/85122f1472a76b7519ed0095637d8501f1d456787be1a87f2e9e02792c4200ab |
||
+ | |||
+ | === docker0 ブリッジが IP を取得できない / コンテナからインターネットにアクセスできない === |
||
+ | |||
+ | Docker は自分で IP フォワーディングを有効にしますが、デフォルトでは systemd によって sysctl の設定が上書きされてしまいます。以下の設定によって上書きされないようにできます (全てのインターフェイスで有効): |
||
+ | |||
+ | {{hc|/etc/systemd/network/ipforward.network|<nowiki> |
||
+ | [Network] |
||
+ | IPForward=kernel |
||
+ | </nowiki>}} |
||
+ | |||
+ | 最後に {{ic|systemd-networkd}} と {{ic|docker}} サービスを[[再起動]]してください。 |
||
== 参照 == |
== 参照 == |
2015年10月11日 (日) 22:52時点における版
Docker は軽量コンテナとしてあらゆるアプリケーションを詰めて運んで実行できるユーティリティです。
目次
インストール
公式リポジトリにある docker パッケージをインストールして docker.service
を起動してください。i686 アーキテクチャの場合、docker-gitAUR をインストールしてください。動作検証するために、次を実行:
# docker info
docker を通常ユーザーで実行できるようにしたい場合は、ユーザーを docker グループに追加してからログインし直してください:
# gpasswd -a user docker
または、セッションが新しいグループを使うようにするには:
$ newgrp docker
設定
プロキシ
プロキシの設定は2つに分けられます。一つは Docker デーモンのホストの設定で、もうひとつはコンテナからプロキシにアクセスできるようにするための設定です。
デーモンのプロキシの設定
/usr/lib/systemd/system/docker.service
を /etc/systemd/system/docker.service
にコピーしてください。そして /etc/systemd/system/docker.service
を以下のように編集してください、http_proxy
はプロキシサーバーに -g <path>
は docker のホームに置き換えて下さい。デフォルトのパスは /var/lib/docker
です。
[Service] Environment="http_proxy=192.168.1.1:3128"
コンテナの設定
docker.service
ファイルの設定はコンテナには換算されません。Dockerfile
で ENV
変数を設定する必要があります:
FROM base/archlinux ENV http_proxy="http://192.168.1.1:3128" ENV https_proxy="https://192.168.1.1:3128"
Docker は Dockerfile で ENV
を使って設定する方法について詳しい情報を提供しています。
デーモンのソケットの設定
docker デーモンはデフォルトで Unix ソケットを使います。特定のポートで待機させるには、/etc/systemd/system/docker.socket
を編集して、ListenStream
を使用したいポートに置き換えてください:
[Socket] ListenStream=0.0.0.0:2375
Docker 0.9.0 -- 1.2.x と LXC
バージョン 0.9.0 から Docker は LXC に依存しないでコンテナを起動できる libcontainer という新しい方法を提供しています。
lxc exec ドライバーや -lxc-conf オプションは将来的には削除される可能性があります [1]。
今後、デフォルトで Docker 0.9.0+ で管理されるコンテナで lxc-attach
を使用する必要がなくなります。Docker デーモンを実行するには引数として -e lxc
が必要です。
/etc/systemd/system/docker.service.d/
下に lxc.conf
という名前のファイルを以下の内容で作成することができます:
[Service] ExecStart= ExecStart=/usr/bin/docker -d -e lxc
イメージ
Arch Linux
x86_64
次のコマンドは base/archlinux x86_64 イメージを取得します:
# docker pull base/archlinux
i686
Docker Registry のデフォルトの Arch Linux イメージは x86_64 だけです。i686 イメージは手動で作成する必要があります。
イメージの作成
代わりに、docker base/archlinux registry をチェックして mkimage-arch.sh
リンクをクリックして mkimage-arch.sh
と mkimage-arch-pacman.conf
を同一のフォルダにダウンロードしてください。そして、スクリプトに実行可能属性を付与して実行してください:
$ chmod +x mkimage-arch.sh $ cp /etc/pacman.conf ./mkimage-arch-pacman.conf # or get a pacman.conf from somewhere else $ LC_ALL=C ./mkimage-arch.sh # LC_ALL=C because the script parses the console output # docker run -t -i --rm base/archlinux /bin/bash # try it
ネットワーク接続や CPU が遅い場合は、ビルドのタイムアウト時間を伸ばすことができます:
$ sed -i 's/timeout 60/timeout 120/' mkimage-arch.sh
Debian
AUR の debootstrapAUR で Debian イメージを作成:
# mkdir wheezy-chroot # debootstrap wheezy ./wheezy-chroot http://http.debian.net/debian/ # cd wheezy-chroot # tar cpf - . | docker import - debian # docker run -t -i --rm debian /bin/bash
Skype
Skype#Docker を参照してください。
ArchLinux イメージとスナップショットリポジトリ
複数のイメージを作成した場合、アップデートによってパッケージのバージョンが食い違ってしまい問題が起こりやすくなります。Docker コンテナのパッケージのバージョンを統一するために、Docker イメージとスナップショットリポジトリ を利用することができます。スナップショットが作成された日に基づいて公式リポジトリから新しいパッケージをインストールすることができるようになります。
$ docker pull pritunl/archlinux:latest $ docker run --rm -t -i pritunl/archlinux:latest /bin/bash
便利なヒント
実行中のコンテナの IP アドレスを取得するには:
$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' <container-name OR id>
172.17.0.37
トラブルシューティング
Docker info でエラーが出力される
docker info
を実行すると以下のようなエラーが表示される場合:
FATA[0000] Get http:///var/run/docker.sock/v1.17/info: read unix /var/run/docker.sock: connection reset by peer. Are you trying to connect to a TLS-enabled daemon without TLS?
おそらく bridge
モジュールがロードされていません。lsmod
を実行することで確認できます。ロードされていない場合は、modprobe
を実行してロードするか、再起動してみてください (カーネルをアップグレードしたときに、bridge が最新のカーネル用にビルドされていた場合、再起動が必要になります)。
詳しくは GitHub の issue を見てください。
Btrfs ファイルシステムで Docker イメージを消去
btrfs ファイルシステムで docker イメージを削除すると /var/lib/docker/btrfs/subvolumes/
にサイズが0のイメージが残されてしまいます。これを削除しようとするとパーミッションエラーが表示されます:
# docker rm bab4ff309870 # rm -Rf /var/lib/docker/btrfs/subvolumes/* rm: cannot remove '/var/lib/docker/btrfs/subvolumes/85122f1472a76b7519ed0095637d8501f1d456787be1a87f2e9e02792c4200ab': Operation not permitted
このエラーは btrfs が docker イメージのためにサブボリュームを作成したのが原因です。したがって削除するときの正しいコマンドは次のようになります:
# btrfs subvolume delete /var/lib/docker/btrfs/subvolumes/85122f1472a76b7519ed0095637d8501f1d456787be1a87f2e9e02792c4200ab
docker0 ブリッジが IP を取得できない / コンテナからインターネットにアクセスできない
Docker は自分で IP フォワーディングを有効にしますが、デフォルトでは systemd によって sysctl の設定が上書きされてしまいます。以下の設定によって上書きされないようにできます (全てのインターフェイスで有効):
/etc/systemd/network/ipforward.network
[Network] IPForward=kernel
最後に systemd-networkd
と docker
サービスを再起動してください。