海の底のブログ

VPS内のLAMP環境をDockerコンテナに移行する

前回、Dockerをインストールしコンテナを作れることを確認したので実際にVPSに入っているLAMP環境をDockerコンテナに移行したいと思います。

Dockerfileの作成

Docker Hubを探せばいろんな人が作ったLAMP環境のイメージがあるんですが、Chefとかと同じで自前で作った方が良いということでDockerfileからイメージを作ることにします。

今回作ったのは下記の通り、

FROM centos:centos6
MAINTAINER syaku
RUN yum install -y initscripts MAKEDEV sudo
RUN yum check
RUN yum update -y
RUN yum install -y openssh-server
RUN useradd -d /home/vagrant -m -s /bin/bash vagrant
RUN echo vagrant:{パスワード}| chpasswd
RUN echo 'vagrant ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config
RUN sed -ri 's/#UsePAM no/UsePAM no/g' /etc/ssh/sshd_config
RUN yum install -y tar gzip
RUN yum install -y gcc make
RUN yum install -y perl perl-CPAN perl-CGI
RUN rpm -Uvh ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/csbuild:/Perl/CentOS_CentOS-6/noarch/perl-Jcode-2.07-1.4.noarch.rpm
RUN yum install -y httpd
RUN yum install -y mysql-server
RUN yum install -y php php-mysql php-mbstring
RUN chkconfig sshd on
RUN chkconfig httpd on
RUN chkconfig mysqld on
RUN /etc/init.d/sshd start
RUN /etc/init.d/mysqld start
RUN /etc/init.d/httpd start
EXPOSE 80
CMD ["/sbin/init"]

通常のLAMP環境に加え、perlのCGIをいくつか動かしていたのでperlを、既存環境のファイルをやりとりするためtarとgzipをインストールしています。

そのほかには、コンテナ管理にVagrantを使うことにしたので、vagrant sshするためにsshをインストールしています。

こうやっておくとvagrant sshした際にパスワードを入力するだけでコンテナにアクセスすることが出来るのでIP調べなくていい分、若干楽です。

コンテナ管理にVagrantを使ってみる

コンテナ管理には(個人的に慣れてるので)Vagrantを使用しますが、VagrantからDockerを操作するにはVer1.6以上が必要なのでインストールしていない場合はインストールします。

インストールはrpmコマンド一発です。

terminal
$ sudo rpm -Uvh https://dl.bintray.com/mitchellh/vagrant/vagrant_1.6.3_x86_64.rpm

インストールが終わったらDockerfileと同じ場所にVagrantfileを作ります。

今回作ったVagrantfileはこんな感じ、

Vagrant.configure("2") do |config|
config.vm.provider "docker" do |d|
d.build_dir = "."
end
config.vm.network :forwarded_port, guest: 80, host: 8080
end

内容としてはカレントディレクトリのDockerfileをビルドして80番ポートをホスト側の8080ポートに紐付けます。

で、両方整ったらコマンド叩いて起動します。

terminal
$ vagrant up --provider=docker

最初はイメージのビルドを行うので結構時間がかかります。

正常に終わったら、

terminal
$ vagrant ssh

と叩いてログインできるか確認します。

ログインできたらついでにちゃんとサービスが起動しているか確認します。

せっせと移行する

入れ物ができあがったらあとは既存の環境からファイルやらDBのダンプやらをコンテナ環境に持ってきて移行作業を行います。 Vagrantを使っている関係でVagrantfileがあるディレクトリが/vagrant/として共有されているのでそこに放り込んでおけば作業が楽です。

移行作業そのものはケースバイケースなのと基本的に移行元と同じ環境なので移行元と同じようにすれば良いので割愛。 IPとポートは変わってるのでその辺設定ファイルを書き換える必要があります。

移行が終わったら8080番ポートにアクセスしてコンテナ上のサービスにアクセス出来ることを確認します。(紛らわしいのでホスト側のサービスは止めておきます)

上手く動いたらホスト側のnginxでリバースプロキシの設定をして移行は終わりです。