前から気になっていたDockerをCentOS 7.xの環境でいじってみた。今月号(2017/2)のSoftwareDesignの特集にもなっていたのでやる気になって良かったかも。
1.Dockerのインストールと初期設定
yumでリポジトリから落とせるのでインストールは簡単。立ち上げて起動時にスタートするように設定した。
# yum install docker # systemctl start docker # systemctl enable docker
2.Dockerコマンドで操作
dockerのイメージ一覧
これが個人的には一番使う気がする。
# docker images
dockerリポジトリからイメージを落としてくる
末尾の:7をつけないとlatestで落としてくる。
# docker pull centos:7
dockerを起動してシェルに入る
オプション-pは[ホストマシンのポート]:[コンテナのポート]の形で指定するとポートマッピングすることができる。-iは標準入力の有効化(たとえアタッチしてなくても)。-tは擬似ターミナルを割り当てる。詳しいことはdocker run –helpで調べられる。
# docker run -i -t -p 8080:80 docker.io/centos /bin/bash
[エラーに遭遇]
調べてみると同様の症状が発生しているものの解決策がイマイチ見つからない。公式のGithubリポジトリでも議論されているものを見る限りメモリ不足に起因するバグのように思われる。
# docker run -i -t -p=8080:80 docker.io/centos /bin/bash /usr/bin/docker-current: Error response from daemon: driver failed programming external connectivity on endpoint tiny_blackwell (d5c7b82b511b7aa6c0c0b2e350831c7f82a34d4ff173315fd94a1757fedaeb72): iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8080 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name. (exit status 1).
[解決策]
freeコマンドでメモリをチェックしてみるが特に問題ない。仕方ないのでdockerプロセスをホストから再起動した。
# systemctl restart docker
無事にシェルに入れた。
net-toolsをインストールしてみる。(事前にインストール済みだった…)
コンテナを起動したままホストに戻る場合は[Ctrl] + P →[Ctrl] + Qの順で押下する。
起動中のコンテナ一覧を表示
最初に建てたコンテナが表示される。
# docker ps
ホストから起動中のコンテナに戻る
docker execでも戻れるので違いを調べてみるとdocker attachだとPID1に戻るらしい。
docker attach b46b79feb70f
[Ctrl] + P→[Ctrl] + Qでホストに戻る。
コンテナのコミット
個人的には、スナップショットを取るイメージがある。これが非常に便利な仕組みだと思う。間違えて環境を壊した時も大丈夫。
# docker commit -m "Installed net-tools" b46b79feb70f docker.io/centos
コンテナの履歴
# docker history docker.io/centos
コンテナの停止
停止後にdocker psで停止しているか確認。
docker stop b46b79feb70f
その他
dockerのポートマッピングの実態はiptablesのdnatを使った転送だったのが意外だった。docker0の配下にコンテナが配置されてそれぞれにIPが振られるのが実際に分かった。
ひとまず基本的な操作な一部は勉強できた。これからもうすこし勉強したい。
コメントを残す