長いこと逃げてきたdockerですが色々と便利そうな感じになっているみたいなのでまずは触ってみようということでやってみます
インストール
epelリポジトリから取得できます
yum install docker-io -y --enablerepo=epel
$ docker version Client version: 1.7.1 Client API version: 1.19 Go version (client): go1.4.2 Git commit (client): 786b29d/1.7.1 OS/Arch (client): linux/amd64 Server version: 1.7.1 Server API version: 1.19 Go version (server): go1.4.2 Git commit (server): 786b29d/1.7.1 OS/Arch (server): linux/amd64
$ docker -d INFO[0000] Listening for HTTP on unix (/var/run/docker.sock) WARN[0000] You are running linux kernel version 2.6.32-358.el6.x86_64, which might be unstable running docker. Please upgrade your kernel to 3.10.0. docker: relocation error: docker: symbol dm_task_get_info_with_deferred_remove, version Base not defined in file libdevmapper.so.1.02 with link time reference
動かなかった...
ここを参考にしてとりあえずインストールだけ行います
$ sudo yum install device-mapper-event-libs
$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
とりあえず何もイメージはない状態
$ docker pull centos # バージョン指定何も指定しない場合はlatest Centosだと7 docker pull centos:6
- 確認
docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos 6 6e93f19d1d37 10 days ago 228.9 MB centos latest bb3d629a7cbc 10 days ago 196.6 MB
$ docker run centos:6 echo 'test' Error response from daemon: Cannot start container f4a191964aad55436e7777178093f3c7112feff351dff71784c371cd1bed70dd: no such file or directory
おっと...
CentOS6系の記事を見つけたのでやってみます
yum -y upgrade shutdown -r now
これは厳密にはkernelのバージョンだけあげれば良い模様、なので実際はyum -y upgrade kernel
でもOK
upgradeしてしまったことでsambaのバージョンも上げてしまい、update後のセキュリティ系の?機能により開発環境で一時使えなくなってしまった...
$ docker run centos:6 echo 'test' test
無事起動できました
dockerfileでイメージを作成
リポジトリ名 Dockerfileがあるディレクトリ $ docker build -t test/nginx ./
- エラー
Error: Cannot retrieve repository metadata (repomd.xml) for repository: base. Please verify its path and try again
が、色々いじってるうちに通ってしまった...
コンテナの起動
$ docker run -i -t test/git /bin/bash
コンテナ一覧
起動しているコンテナ
$ docker ps
-a をつけることで全てのコンテナを表示してくれる
イメージの削除
$ docker rmi -f image_id
起動中のコンテナを停止して削除する
- 起動中のコンテナIDを取得(-q)
$ docker ps -q 2ee754de991e 6a8cb37bb17e cdf84747b41e
- 起動中のコンテナを全て止める
$ docker ps -q | xargs docker stop 2ee754de991e 6a8cb37bb17e cdf84747b41e
- 起動中のコンテナを全て止めて削除する
$ docker ps -q | xargs docker stop | xargs docker rm 2ee754de991e 6a8cb37bb17e cdf84747b41e
docker stop, rm 共にIDが出力されるのでxargsで使いまわすことが出来る
dockerでの外部への通信 yum
yum でepelをインストールしようとしたらエラーが出た
http://mirror.nus.edu.sg/centos/6.7/extras/x86_64/Packages/epel-release-6-8.noarch.rpm: [Errno 14] PYCURL ERROR 6 - "Couldn't resolve host 'mirror.nus.edu.sg'"
digした結果のSERVER: 10.0.2.3#(10.0.2.3) をdnsとして設定
- /etc/sysconfig/docker
- other_args= + other_args="-dns 10.0.2.3"
として再度実行
無事インストールできた
外部からのアクセス
-p オプションでポートフォワードしてくれます
docker run -d -p 16379:6379 test/redis
試しにredisのコンテナを立てました
下記だとホスト側の受付ポートは16379で通信を受け取り
コンテナのポート6379へプロキシしている
なのでホスト側でクライアントを起動する際に16379ポートを指定すればredisに接続できる
起動中のコンテナへアクセス
# IDでログイン docker exec -it 140c265a2b2b /bin/bash
COPYの罠
COPYがうまくいかない時がありました
.dockerignoreというファイルに設定を追加しないといけないようです
おわり
とりあえず今まで調べたところまで
公式読めばオプションなど詳しく載っているのでメモとして...
コマンドの実行環境をDockerfileにしてdocker run
でコマンドを叩くだけ、といった使い方もできるよう
使ってみたらかなり便利でした
次はdocker-composeなども触ってみたいと思います