やること
最近よくDocker について見かけるので、自分でも試してみました。
インストールからDocker image の作成、リポジトリへのアップロードまでを行っています。
以下は全てCentOS 7.2 で行っています。
インストール
公式ページ に以下の記述があります。
Docker requires a 64-bit installation regardless of your CentOS version. Also, your kernel must be 3.10 at minimum, which CentOS 7 runs.
どうやらCentOS の場合64 ビットの7 以上でカーネルのバージョンは3.1 以上でないといけないようです。
% uname -r
3.10.0-327.el7.x86_64
インストールですが、公式ページで紹介されている方法(https://get.docker.com/ からcurl やsudo yum install docker-engine
) だとdependency が云々でインストールできなかったので、以下のコマンドで行いました。
% sudo yum install docker
バージョン確認。
% docker -v
Docker version 1.10.3, build d381c64-unsupported
起動してみます。
% sudo systemctl start docker
docker イメージのダウンロード
次に、docker イメージをダウンロードします。
イメージのダウンロードはdocker pull
コマンドで行います。
Official Repositry からダウンロードするイメージを探します。
ここはGit でいうGithub のようなものみたいです。後で試していますが、サインインすることで自分のリポジトリも作れます。
CentOS のところを見ると、5 から7.2 まであるみたいです。
CentOS 7 をダウンロードします。
docker pull <イメージ名>:<タグ名>
で、指定したタグのものをpull できます。
% sudo docker pull centos:7
Trying to pull repository docker.io/library/centos ...
7: Pulling from docker.io/library/cento%
8d30e94188e7: Pull complete
Digest: sha256:2ae0d2c881c7123870114fb9cc7afabd1e31f9888dac8286884f6cf59373ed9b
Status: Downloaded newer image for docker.io/centos:7
ちなみにroot でないユーザーでsudo を付けてないとCannot connect to the Docker daemon. Is the docker daemon running on this host?
って言われてしまいます。sudo なしで実行する方法もあるようですが、ここではとりあえずsudo を付けて行っています。
ダウンロードしてきたイメージの確認はdocker image
コマンドで行います。
% sudo docker image
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos 7 980e0e4c79ec 34 hours ago 196.7 MB
CentOS 7 があることがわかります。
docker イメージの起動
ダウンロードしてきたCentOS 7 を実行してみます。実行はdocker run
コマンドでできます。
Docker docks のrun reference のページ に
For interactive processes (like a shell), you must use -i -t together in order to allocate a tty for the container process.
とあります。
シェルのようなインタラクティブプロセスでは、-i と-t オプションを付けなさいということなので、bash を実行し起動を以下のコマンドで行います。
% sudo docker run -it centos:7 /bin/bash
[root@fdb376b21eaf /]#
プロンプトが切り替わりました。
OS のバージョンを確認してみます。
[root@fdb376b21eaf /]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
CentOS 7.2 が動いているようです(自分の使ってるマシンと全く同じでした)。
いくつかコマンドを試してみましたが、ほとんどのコマンドは入っていないようです。docker イメージは最小限の構成のみ、あとはユーザー側でいろいろやってねということなのでしょう。
このシェルを抜ける場合、exit
やCtrl-d
でコンテナを終了しつつ抜け、Ctrl-p Ctrl-q
だと実行したまま抜けることができるそうです。
[root@fdb376b21eaf /]# exit
exit
docker コンテナの一覧を確認するコマンドに、docker ps
があります。このコマンドのオプションに-a
を渡すことで、停止しているコンテナを含め全て確認することができます。
% sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fdb376b21eaf centos:7 "/bin/bash" 6 minutes ago Exited (0) 4 seconds ago distracted_lamarr
exit
したため、ステータスがExited となっています。
停止しているコンテナを起動するには、docker start
コマンドを指定します。コンテナID を指定することで、指定したコンテナを起動できます。
起動したコンテナへは、docker attach
コマンドでアタッチできます。
% sudo docker start fdb376b21eaf
fdb376b21eaf
% sudo docker attach fdb376b21eaf
[root@fdb376b21eaf /]#
コンテナID はフルで指定しなくても、先頭3文字(上の例だとfdb
) くらいでコンテナを一意に決めることができれは大丈夫みたいです。
コンテナを触ってみる
とりあえず、zsh でも入れてみます。
[root@fdb376b21eaf /]# yum install zsh
(略)
Complete!
[root@fdb376b21eaf /]#zsh
[root@fdb376b21eaf]/#
プロンプトがほぼ同じなのでわかりにくいですが、きちんとインストールされています。
[root@5d83fad2e905]/# set | grep -ai version
ZSH_VERSION=5.0.2
[root@5d83fad2e905 /]# set | grep -ai version
BASH_VERSION='4.2.46(1)-release'
紛らわしいのでプロンプトを黄色くしておきます。bash っぽくカレントディレクトリを表示するようにもします。
autoload -Uz colors
colors
PROMPT="%{${fg[yellow]}%}[%n@%m %1~]%# %{${reset_color}%}"
docker image の作成
先ほど作ったコンテナからイメージファイルを作ってみます。
docker commit
コマンドを使います。
% sudo docker commit fdb376b21eaf zsh-installed
sha256:18247f8cdbc4762a611b080342347d19c8b84fe0773b70ba88021876a97d51c5
% sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zsh-installed latest 18247f8cdbc4 8 seconds ago 297.9 MB
docker.io/centos 7 980e0e4c79ec 2 days ago 196.7 MB
コンテナID fdb376b21eaf
にzsh-installed
という名前を付けてイメージを作りました。
このイメージからコンテナを起動することで、先ほど作成したコンテナと同じものを起動できるようです。
[ytakahashi ~]% sudo docker run -it zsh-installed:latest "/bin/zsh"
[root@819faf2dbbd3 /]#
上記のようにzsh を指定して起動できます(先ほど変更したようにプロンプトも黄色くなっています)。
[ytakahashi ~]% sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
819faf2dbbd3 zsh-installed:latest "/bin/zsh" 3 minutes ago Up 3 minutes determined_spence
fdb376b21eaf centos:7 "/bin/bash" About an hour ago Up 45 minutes distracted_lamarr
docker hub にpush してみる
作成したイメージは、クラウドにあるリポジトリへとアップロードできます。
上の方でイメージをpull するために使ったdocker hub にアカウントを登録することで、自分のリポジトリを作ることができます。
ログインしてみます。
![docker hub](http://i.imgur.com/ZVFPPEF.png =20x)
ここにリポジトリを作れますが、無料ユーザーの場合、プライベートリポジトリは1つしか作れないようです。
今回はパブリックリポジトリで試してみます。
パブリックリポジトリの場合、上記ページから作らなくてもCUI からpush すれば作成されるようです。
リポジトリへpush するために、docker でログインします。
% sudo docker login
Username: umimi
Password:
Email: XXXXXX@XXXXXXX
WARNING: login credentials saved in /root/.docker/config.json
Login Succeeded
ユーザー名、パスワード、メールアドレスを入力し、ログインに成功しました。
次に、push したいイメージに、docker tag
コマンドで<アカウント名><リポジトリ名>:<タグ名>
というタグを付加します。
docker commit
コマンドで作成したイメージID 18247f8cdbc4
のイメージにタグを付けます。
イメージの最新版にはlatest というタグをつけることが慣習となっているそうなので、タグ名はlatest としています。
% sudo docker tag 18247f8cdbc4 umimi/zsh-installed:latest
% sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
umimi/zsh-installed latest 18247f8cdbc4 About an hour ago 297.9 MB
zsh-installed latest 18247f8cdbc4 About an hour ago 297.9 MB
タグ付けしたものがzsh-installed
と同じIDでDocker Image としてできていることが確認できます。
これをリモートリポジトリへとpush するには、docker push
コマンドを使います。
% sudo docker push umimi/zsh-installed:latest
The push refers to a repository [docker.io/umimi/zsh-installed]
e8f7f665745a: Mounted from umimi/test-repository
0aeb287b1ba9: Mounted from library/centos
latest: digest: sha256:ba75f871c950782e48466cb66dd7d1ab90f67bb906e72150c0ec12f285e05f95 size: 719
できました。
docker hub を見てみると、リポジトリが作成されていることがわかります。
探してみる
docker hub のパブリックリポジトリに置かれているイメージはdocker search
コマンドで検索することができます。
試しに、zsh
で検索してみると以下のような結果になりました。
% sudo docker search zsh
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/bwithem/oh-my-zsh-tmux 1 [OK]
docker.io docker.io/everhopingandwaiting/rpi-zsh jyaosuse/rpi-zsh:v1.0 1
docker.io docker.io/hoshinotsuyoshi/zsh-on-coreos 1 [OK]
docker.io docker.io/j0n17/zsh-ubuntu Ubuntu container packaged with Zsh / Oh-my... 1
docker.io docker.io/jess/zsh 1 [OK]
docker.io docker.io/omegabit/docker-zsh docker-zsh 1 [OK]
docker.io docker.io/alphanso/zsh 0
docker.io docker.io/bketelsen/zsh 0
docker.io docker.io/doomhammer/alpine-zsh Minimal zsh image based on Alpine Linux. 0 [OK]
docker.io docker.io/dvc94ch/zsh 0
docker.io docker.io/imwithye/zsh Docker Container for ZSH 0 [OK]
docker.io docker.io/jcmuller/zsh 0
docker.io docker.io/jiatower/oh-my-zsh-tmuxinator-ssh 0 [OK]
docker.io docker.io/jmervine/zshrc 0 [OK]
docker.io docker.io/k0ner/alpine-zsh zsh and oh my zsh over jare/vim-bundle 0 [OK]
docker.io docker.io/kalz/zsh_tty Javascript based Terminal/Console which yo... 0 [OK]
docker.io docker.io/katelibbey/zsh 0
docker.io docker.io/luttig/sg-zsh Docker container to test zsh + Go environment 0
docker.io docker.io/mhlavac/docker-ubuntu-zsh Ubuntu, ZSH with antigen. 0 [OK]
docker.io docker.io/mhoush/zsh An alpine:3.3 with zsh 0 [OK]
docker.io docker.io/moacirosa/zsh Just a small an experimental container for... 0
docker.io docker.io/pktangyue/oh-my-zsh-and-configured-vim docker based on centos7 with oh-my-zsh and... 0 [OK]
docker.io docker.io/stayfi/zsh-php Docker container for PHP Development with ... 0 [OK]
docker.io docker.io/twcoral/zsh zsh with oh-my-zsh 0
docker.io docker.io/umimi/zsh-installed CentOS 7.2 with zsh 0
一番下に先ほど作ったリポジトリがありました。
これで誰でもdocker pull umimi/zsh-installed
だけで今回作ったDockerImage が使えるようになりました。
ほぼデフォルトのCentOS 7 と変わりませんが、よかったら試してみてね!
終わりに
こんな感じでDocker のインストールから実行、Image ファイルの作成〜リモートリポジトリへのアップロードまで試してみました。
CentOS で試しているので、次はMac で試してみようと思います。
リポジトリからpull、編集したものをcommit、リポジトリにpush という流れはGit ユーザーにとっては理解しやすいのではないでしょうか。
今回は軽く使い方を調べた程度なので、これをどう使っていくかは今後調べたいところです。