Microsoft Azure でDockerはじめちゃいますか?
じゅんくどうです。
本投稿は「Azure Advent Calender 2014」12月7日分の投稿になります。Azure Advent Calender 2014は各人が12月25日まで思い思いにAzureについて投稿するイベントです。今回は、(たぶん)Microsoftも注目しているDockerについて書きます。
MicrosoftとDocker
最近、Microsoft界隈の方も「Docker」という言葉を頻繁に耳にすると思います。そう、10月15日にDocker社と提携したという発表があったためです。また、スコットガスリー氏のブログで、次期Windows ServerでDockerをサポートするとともに、Docker Hubとの統合も行えるようにすると書かれています。これによってWindows でもDockerが動くということになり、Windows、Linuxという壁を越えてDockerを扱えるようになります(なるはずです)。
現状、WindowsがサポートしているのはDocker Clientです。Docker ClientはAPI、コマンドラインによる操作が可能となります。
AzureでDockerを使ってみる
AzureでDockerを使う方法として2つ。
– Linuxインスタンスを立ち上げてDockerをインストールする。
– 用意されたCoreOSイメージを利用する。
前者はapt-getやyumでインストールして利用しようって感じです。
後者は仮想マシンで用意されているCoreOS利用する方法です。
前者については真新しいものでもないので、今回は後者の方法を見ていきたいと思います。
では、最初にAzureポータルから仮想マシンを作成。CoreOSイメージを選択しましょう。
おっと、2つイメージが表示されます。何が違うのか確認してみましょう。
DockerとCoreOSのバージョンを調べてみました(2014/12/03時点)
①CoreOS Alpha
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
CoreOS (alpha) azureuser@docker-alpha ~ $ sudo docker -v Docker version 1.3.2, build 50b8feb azureuser@docker-alpha ~ $ cat /etc/os-release NAME=CoreOS ID=coreos VERSION=509.1.0 VERSION_ID=509.1.0 BUILD_ID= PRETTY_NAME="CoreOS 509.1.0" ANSI_COLOR="1;32" HOME_URL="https://coreos.com/" BUG_REPORT_URL="https://github.com/coreos/bugs/issues" |
②CoreOS Beta
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
CoreOS (beta) azureuser@docker-beta ~ $ sudo docker -v Docker version 1.3.2, build 50b8feb azureuser@docker-beta ~ $ cat /etc/os-release NAME=CoreOS ID=coreos VERSION=494.1.0 VERSION_ID=494.1.0 BUILD_ID= PRETTY_NAME="CoreOS 494.1.0" ANSI_COLOR="1;32" HOME_URL="https://coreos.com/" BUG_REPORT_URL="https://github.com/coreos/bugs/issues" |
Dockerのバージョンは、1.3.2と同じものになります。
CoreOSのバージョンがAlpha版は509.1.0
、Beta版は494.1.0
となります。
Alphaの方が最新版になるくことに注意しましょう。
さて、実際にイメージを選択しインストールしていきます。
Alpha版をインストールします。
仮想マシンの作成方法は変わりませんので、適当に入力/選択します。
ここも一緒です。
拡張機能は使えないのでそのまま進めましょう。
将来的に、Deep Security Agentが使えるといいなぁ(願望)
はいこれで完了です。
簡単ですねーーー。
ではログインしてみましょう。
・・・・それでは、面白くないのでDocker CLI for Windows Clientsを使ってみます。
Docker CLI for Windows Clientsは「Connect();」でもデモ公開されました。
Docker CLI for Windows Clientsを利用するには、githubで公開されているソースから、Windowsでコンパイルして利用する方法があります。コンパイル方法については「How to compile Docker on Windows」で公開されています。
上記のサイトを参考(超超超訳)で進めていきます。
事前準備としてAzure上にWindows Server 2012 R2を立ち上げましょう。
Dockerと通信が行える場所に配置しましょう。
Step1:Goをインストールします。
Goのインストーラをgolang.orgよりダウンロードます。インストールするとコマンドプロンプトで利用できるようになります。
バージョン確認
1 2 3 |
PS C:Usersazureuser> go version go version go1.3.3 windows/386 |
Step2:コードをチェックアウトします。
Gitをインストールします。
次にdocker/cockerレポジトリよりCloneします。
1 2 |
git clone https://github.com/docker/docker.git c:gopathsrcgithub.comdockerdocker |
実行結果
1 2 3 4 5 6 7 8 9 10 |
C:Usersazureuser>git clone https://github.com/docker/docker.git c:gopathsrcgithub.comdockerdocker Cloning into 'c:gopathsrcgithub.comdockerdocker'... remote: Counting objects: 64814, done. remote: Compressing objects: 100% (31/31), done. Receiving objects: 100% (64814/64814), 35.91 MiB | Resolving deltas: 100% (42532/42532), done. Checking connectivity... done. Checking out files: 100% (1581/1581), done. |
Step3:コンパイル!
簡単です。コマンドプロンプトより次のコマンドを実行します。
1 2 3 4 5 |
set GOPATH=c:gopath;c:gopathsrcgithub.comdockerdockervendor set DOCKER_CLIENTONLY=1 cd c:gopathsrcgithub.comdockerdockerdocker go build -v |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
C:Usersazureuser>set GOPATH=c:gopath;c:gopathsrcgithub.comdockerdockervendor C:Usersazureuser>set DOCKER_CLIENTONLY=1 C:Usersazureuser>cd c:gopathsrcgithub.comdockerdockerdocker c:gopathsrcgithub.comdockerdockerdocker>go build -v github.com/Sirupsen/logrus github.com/docker/docker/pkg/ioutils github.com/docker/docker/dockerversion github.com/docker/docker/pkg/fileutils github.com/docker/docker/pkg/pools github.com/docker/docker/pkg/promise github.com/docker/docker/pkg/system github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar github.com/docker/docker/pkg/archive github.com/docker/docker/pkg/term github.com/docker/docker/pkg/timeutils github.com/docker/docker/pkg/units github.com/docker/docker/utils github.com/docker/docker/engine github.com/docker/docker/pkg/parsers github.com/docker/docker/pkg/version github.com/docker/docker/vendor/src/github.com/docker/libtrust github.com/docker/docker/api github.com/docker/docker/daemon/graphdriver github.com/docker/docker/pkg/tarsum github.com/docker/docker/nat github.com/docker/docker/pkg/mflag github.com/docker/docker/opts github.com/docker/docker/runconfig github.com/docker/docker/image github.com/docker/docker/pkg/parsers/filters github.com/tchap/go-patricia/patricia github.com/docker/docker/pkg/truncindex github.com/docker/docker/pkg/httputils github.com/docker/docker/pkg/parsers/kernel github.com/gorilla/context github.com/gorilla/mux github.com/docker/docker/registry github.com/docker/libtrust github.com/docker/docker/graph github.com/docker/docker/pkg/signal github.com/docker/docker/pkg/stdcopy github.com/docker/docker/pkg/urlutil github.com/docker/docker/api/client github.com/docker/docker/pkg/reexec github.com/docker/docker/docker |
全て完了したら、愛しのdocker.exeがディレクトリにできています♡
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
c:gopathsrcgithub.comdockerdockerdocker>docker.exe Usage: docker [OPTIONS] COMMAND [arg...] A self-sufficient runtime for linux containers. Options: --api-enable-cors=falseEnable CORS headers in the remote API -D, --debug=false Enable debug mode -d, --daemon=false Enable daemon mode -G, --group="docker" Group to assign the unix socket specified by -H when running in daemon mode use '' (the empty string) to disable setting of a group -H, --host=[] The socket(s) to bind to in daemon mode or connect to in client mode, specified using one or more tcp://host:port, unix:///path/to/socket, fd://* or fd://socketfd. -l, --log-level="info" Set the logging level --tls=falseUse TLS; implied by --tlsverify flag --tlscacert="C:\Users\azureuser\.docker\ca.pem"Trust only remotes providing a certificate signed by the CA given here --tlscert="C:\Users\azureuser\.docker\cert.pem"Path to TLS certificate file --tlskey="C:\Users\azureuser\.docker\key.pem" Path to TLS key file --tlsverify=false Use TLS and verify the remote (daemon: verify client, client: verify daemon) -v, --version=falsePrint version information and quit Commands: attachAttach to a running container build Build an image from a Dockerfile commitCreate a new image from a container's changes cpCopy files/folders from a container's filesystem to the host path createCreate a new container diff Inspect changes on a container's filesystem eventsGet real time events from the server exec Run a command in a running container exportStream the contents of a container as a tar archive history Show the history of an image imagesList images importCreate a new filesystem image from the contents of a tarball info Display system-wide information inspect Return low-level information on a container kill Kill a running container load Load an image from a tar archive login Register or log in to a Docker registry server logoutLog out from a Docker registry server logs Fetch the logs of a container port Lookup the public-facing port that is NAT-ed to PRIVATE_PORT pause Pause all processes within a container psList containers pull Pull an image or a repository from a Docker registry server push Push an image or a repository to a Docker registry server restart Restart a running container rmRemove one or more containers rmi Remove one or more images run Run a command in a new container save Save an image to a tar archive searchSearch for an image on the Docker Hub start Start a stopped container stop Stop a running container tag Tag an image into a repository top Lookup the running processes of a container unpause Unpause a paused container version Show the Docker version information wait Block until a container stops, then print its exit code Run 'docker COMMAND --help' for more information on a command. |
バージョンの確認
1 2 3 4 5 6 7 8 9 |
c:gopathsrcgithub.comdockerdockerdocker>docker.exe -v Docker version , build c:gopathsrcgithub.comdockerdockerdocker>docker.exe version Client API version: 1.16 Go version (client): go1.3.3 OS/Arch (client): windows/386 ←[31mFATA←[0m[0000] Get http:///var/run/docker.sock/v1.16/version: dial unix /var/run/docker.sock: An address incompatib le with the requested protocol was used.. Are you trying to connect to a TLS-enabled daemon without TLS? |
Dockerをリモートで操作する方法としてRemote APIを使います。
そのためにCoreOS側でSocketを作成する必要があります。
CoreOS側にログインしてsocketを作成します。
docker-alpha ~ # vi /etc/systemd/system/docker-tcp.socket
ポート2375で待ち受けするようにSocketを作成します。
1 2 3 4 5 6 7 8 9 10 11 |
[Unit] Description=Docker Socket for the API [Socket] ListenStream=2375 BindIPv6Only=both Service=docker.service [Install] WantedBy=sockets.target |
Dockerを再起動します。
1 2 3 4 5 6 7 8 |
docker-alpha ~ # systemctl enable docker-tcp.socket Created symlink from /etc/systemd/system/sockets.target.wants/docker-tcp.socket to /etc/systemd/system/docker-tcp.socket. docker-alpha ~ # systemctl stop docker Warning: Stopping docker.service, but it can still be activated by: docker.socket docker-alpha ~ # systemctl start docker-tcp.socket docker-alpha ~ # systemctl start docker |
ポート2375で動作しているか確認します。
1 2 3 |
docker-alpha ~ # docker -H tcp://127.0.0.1:2375 ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
問題ないようです。
ではWindows側で確認してみましょう。
1 2 3 4 5 6 |
c:gopathsrcgithub.comdockerdockerdocker>docker.exe -H tcp://100.72.32.96:2375 version Client API version: 1.16 Go version (client): go1.3.3 OS/Arch (client): windows/386 ←[31mFATA←[0m[0000] Error response from daemon: client and server don't have same version (client : 1.16, server: 1.15) |
…ウップ
APIのバージョン違うぞって怒られた。
あれ?CoreOS + Docker CLI for Windows Clients on Azureは・・・ムリポ?
今回は時間がないのでここまで!まぁ通信できているからいいか(w
Dockerからブランチ指定してCloneしたらBuildできないorz
CoreOSではなくUbuntuとかにインストールすればDockerも1.16つかえるので大丈夫です。
CoreOS・・・・・
おまけ
それでもWinodwsで夢をみる
じゃWindowsでDocker使いたいよって人の為には!
boot2dockerを利用するのが簡単かな?
では早速、Azure でWindows7を起動させて・・・ちょっとまって!boot2dockerは、AzureやHyper-vで起動しません。
なぜかって?
boot2dockerはVirual Box上で起動する仕組みになっています。そして64bit対応である必要があります。
Virual BoxがAzure上やHyper-v上で64bitで動作しないのでムリポ。(ここら辺、詰めて検証していないのであとでやってみます。)
では、boot2dockerを動作させるためにはどうしたら良いか?実機を使いましょう(w
boot2dockerはこちらのサイトよりダウンロードできます。
ドキュメントはこちら。
ダウンロードしてきたdocker-install.exeを走らせインストールを開始します。
インストールが完了したらデスクトップ上に「Boot2Docker Start」というショートカットができます。
起動しましょう。
バックグラウンドでは、Virual Boxにマシンイメージが作成され起動されます。
そして自動的に、sshで接続されます。
これで使えますね。
さー確認してみましょう
APIのバージョンが一緒なので大丈夫!
確認ができましたね。
以上で今回のdocker特集は終了。
でわでわ