Dockerで使うサーバサイドソフトウェア(エンジニア編)
Linuxコンテナを使った仮想化ソフトウェアDocker。興味はありつつも、実際の運用の中で活かす機会は意外と多くないのではないでしょうか。さらに1.0となったとは言え、実運用のサーバの中で活用していくというのは勇気が出ないかも知れません。
そこで今回はあくまでも開発の部署内だけでDockerを使っていくという方法を提案したいと思います。Dockerのメリットの一つ、外部の人たちが作ってくれているコンテナを使ってサービスを立ち上げてみましょう。今回は特にエンジニアがよく使いそうなソフトウェアにフォーカスを当てています。
必要なもの
さくらのクラウドのアカウント
アカウントはさくらのクラウドトップページから作成できます。
クラウドサーバを追加する
管理画面に入りましたら、サーバの追加を選択します。追加画面では、サーバの名前、メモリ数、ディスクプランなどを決めていきます。大事なのはアーカイブ選択の中にある CoreOS 367.1.o0 (stable) を選択することです(バージョン番号は2014年08月現在です)。
後はパスワードや公開鍵の入力などを行ってください。この状態で起動してみます。
サーバに接続する
Webベースのコンソールもありますが、今回はターミナルからつないでみます。公開鍵認証が優先なので先ほど設定していれば、
$ ssh core@server_ip_address
で接続できます(server_ip_addressは各自読み替えてください)。IPアドレスはサーバ一覧のインタフェースで確認してもらえます。
実行
ログインできたら、
$ docker run ubuntu /bin/echo hello world
と打ってみます。回線の速度も速いので、30秒もあれば初回のイメージダウンロード&実行が行われるのではないでしょうか。その後の実行については待たされるようなことありません。
では下準備は完了したのでさっそく行ってみましょう!
Redmineをインストールしよう!
では早速一つ目、Redmineをインストールしてみましょう。コマンドは1行です。
$ docker run --name redmine -d -p 80:80 sameersbn/redmine
コンテナの名前をredmineとしています。-dはバックグラウンドで実行するためのオプションです。-pはゲストOSのポート番号をフォワードしています。今回はホストへの80番ポートアクセスをそのままゲストコンテナに流しています。
起動したらadmin/adminでログインできます。
データの永続化
コンテナは仮想化されたデータなので、落とすと消えてしまいます(コミットすれば保存されますが)。そこでホストOS側のディレクトリを共有化するようにします。
$ sudo mkdir -p /opt/redmine/files
としてフォルダを作成した上でコンテナ起動時に指定するようにします。
$ docker run --name redmine -d -p 80:80 \ -v /opt/redmine/files:/redmine/files sameersbn/redmine
外部のデータベースに接続する
さらにデータベースもコンテナ内部のものではなく外部のものを使うようにすればデータが維持されるようになります。そのためにはまずMySQL側でRedmineのデータベースを作成します。
$ mysql -uroot -p > CREATE USER 'redmine'@'%.%.%.%' IDENTIFIED BY 'password'; > CREATE DATABASE IF NOT EXISTS `redmine_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`; > GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `redmine_production`.* TO 'redmine'@'%.%.%.%';
その上でコンテナ起動時にデータベースの接続先を指定します。
$ docker run --name redmine -it --rm \ -e "DB_HOST=192.168.1.100" -e "DB_NAME=redmine_production" \ -e "DB_USER=redmine" -e "DB_PASS=password" \ -v /opt/redmine/files:/redmine/files sameersbn/redmine app:db:migrate
なおこれは初回起動時で、次回からは次のように指定します。
$ docker run --name redmine -d \ -e "DB_HOST=192.168.1.100" -e "DB_NAME=redmine_production" \ -e "DB_USER=redmine" -e "DB_PASS=password" \ -v /opt/redmine/files:/redmine/files sameersbn/redmine
さらに同様の操作で別途MySQLのDockerコンテナを用意して、そちらとリンクさせる方法もあります。
$ docker run --name redmine -it --rm --link mysql:mysql \ -e "DB_USER=redmine" -e "DB_PASS=password" \ -e "DB_NAME=redmine_production" \ -v /opt/redmine/files:/redmine/files \ sameersbn/redmine app:db:migrate
こちらの方法で安全に運用できるでしょう。
Jenkinsをインストールしよう!
継続的インテグレーションができる環境を構築する上でJenkinsは欠かせません。Dockerを使えばJenkins環境も簡単に構築できます。
Jenkinsについては公式イメージが用意されていますのでさらに安心して利用できるでしょう。
$ docker run -p 8080:8080 jenkins
さらにデータの永続化を考えるならば、
$ sudo mkdir -p /opt/jenkins_home $ docker run -p 8080:8080 -d -v /opt/jenkins_home:/var/jenkins_home jenkins
といった形で起動します。この場合、ホストの /opt/jenkins_home にデータが保存されます。
jenkins Repository | Docker Hub Registry - Repositories of Docker Images
Gitlabをインストールしよう!
最後にGitlabをインストールしてみます。Gitlabを使えば開発時のソースコード管理がとても楽になりますし、GitHubなどの外部リポジトリサービスが使えない環境でも容易にGitリポジトリサーバが立てられるようになります。
$ docker run --name='gitlab' -it --rm \ -p 10022:22 -p 10080:80 \ -e 'GITLAB_PORT=10080' -e 'GITLAB_SSH_PORT=10022'\ sameersbn/gitlab:latest
起動したら http://localhost:10080 へアクセスします。
ログインは root/5iveL!fe となっています。
データの永続化
Gitlabの場合もデータの永続化が大事です(リポジトリになりますので特にそうですね)。そこで次のようにします。
$ sudo mkdir -p /opt/gitlab/data
これで /opt/gitlab/data を共有して起動すればOKです。
$ docker run --name='gitlab' -it --rm \ -p 10022:22 -p 10080:80 \ -v /opt/gitlab/data:/home/git/data \ -e 'GITLAB_PORT=10080' -e 'GITLAB_SSH_PORT=10022'\ sameersbn/gitlab:latest
同様にMySQLについても永続化しなければなりません。データだけであれば、
$ sudo mkdir -p /opt/gitlab/mysql $ docker run --name='gitlab' -it --rm \ -p 10022:22 -p 10080:80 \ -v /opt/gitlab/data:/home/git/data \ -v /opt/gitlab/mysql:/var/lib/mysql \ -e 'GITLAB_PORT=10080' -e 'GITLAB_SSH_PORT=10022'\ sameersbn/gitlab:latest
でOKです。
初期IDとパスワードは root/5iveL!fe です。初回ログイン時に変更します。
SSHは10022になっていますので、例えばリポジトリへのアクセスは次のようになります。
$ git remote add origin ssh://git@153.120.83.76:10022/root/testproject.git
これで実際にpushしたり、pullしたりとGitリポジトリが使えるようになります。Gitlabをセットアップしようと思うとそれなりに苦労が伴うものですが、Dockerを使えばわずか数分で(しかもそのほとんどはダウンロードです!)設置が完了してしまいます。
sameersbn/gitlab Repository | Docker Hub Registry - Repositories of Docker Images
いかがでしたか。
Dockerをサーバエンジニアとしてばりばり使っていくのは理想的ですが、まだまだ現実的に難しかったり、運用しているサーバの台数はそこまで多くないという方もいるかと思います。しかしサーバサイドのソフトウェアをインストール、立ち上げるのに使うのであれば用途は多いのではないでしょうか。
他にも社内開発用途で使いそうなソフトウェアは多いと思います。Docker Hubではそういったソフトウェアが多数登録されていますので、ぜひ探してください。そして試される際にはさくらのクラウドのCoreOSを使ってみてくださいね!