Dockerで使うサーバサイドソフトウェア(エンジニア編)

Linuxコンテナを使った仮想化ソフトウェアDocker。興味はありつつも、実際の運用の中で活かす機会は意外と多くないのではないでしょうか。さらに1.0となったとは言え、実運用のサーバの中で活用していくというのは勇気が出ないかも知れません。

そこで今回はあくまでも開発の部署内だけでDockerを使っていくという方法を提案したいと思います。Dockerのメリットの一つ、外部の人たちが作ってくれているコンテナを使ってサービスを立ち上げてみましょう。今回は特にエンジニアがよく使いそうなソフトウェアにフォーカスを当てています。

必要なもの

さくらのクラウドのアカウント

さくらのクラウドトップページ
さくらのクラウドトップページ

アカウントはさくらのクラウドトップページから作成できます。

クラウドサーバを追加する

サーバ追加画面
サーバ追加画面

管理画面に入りましたら、サーバの追加を選択します。追加画面では、サーバの名前、メモリ数、ディスクプランなどを決めていきます。大事なのはアーカイブ選択の中にある CoreOS 367.1.o0 (stable) を選択することです(バージョン番号は2014年08月現在です)。

CoreOSを選択!
CoreOSを選択!

後はパスワードや公開鍵の入力などを行ってください。この状態で起動してみます。

サーバに接続する

Webベースのコンソールもありますが、今回はターミナルからつないでみます。公開鍵認証が優先なので先ほど設定していれば、

$ ssh core@server_ip_address

で接続できます(server_ip_addressは各自読み替えてください)。IPアドレスはサーバ一覧のインタフェースで確認してもらえます。

さくらのクラウドでIPアドレスを確認
さくらのクラウドで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番ポートアクセスをそのままゲストコンテナに流しています。

Docker経由で立てたRedmineの画面
Docker経由で立てたRedmineの画面

起動したら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

こちらの方法で安全に運用できるでしょう。

sameersbn/docker-redmine

Jenkinsをインストールしよう!

継続的インテグレーションができる環境を構築する上でJenkinsは欠かせません。Dockerを使えばJenkins環境も簡単に構築できます。

Jenkinsについては公式イメージが用意されていますのでさらに安心して利用できるでしょう。

Docker Hubに登録されています
Docker Hubに登録されています
$ 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が普通にできます。
リポジトリ。push/pullが普通にできます。

これで実際にpushしたり、pullしたりとGitリポジトリが使えるようになります。Gitlabをセットアップしようと思うとそれなりに苦労が伴うものですが、Dockerを使えばわずか数分で(しかもそのほとんどはダウンロードです!)設置が完了してしまいます。

sameersbn/gitlab Repository | Docker Hub Registry - Repositories of Docker Images


いかがでしたか。

Dockerをサーバエンジニアとしてばりばり使っていくのは理想的ですが、まだまだ現実的に難しかったり、運用しているサーバの台数はそこまで多くないという方もいるかと思います。しかしサーバサイドのソフトウェアをインストール、立ち上げるのに使うのであれば用途は多いのではないでしょうか。

他にも社内開発用途で使いそうなソフトウェアは多いと思います。Docker Hubではそういったソフトウェアが多数登録されていますので、ぜひ探してください。そして試される際にはさくらのクラウドのCoreOSを使ってみてくださいね!

おしらせ

banner_cloud