Docker on Vagrant on Ubuntu on VirtualBoxにCentOS7.1の開発環境を構築する
前提
前回の下記の記事の続きになります。
Ansible - Docker on Vagrant on Ubuntu on VirtualBoxのLAMP(LAPP)開発環境を構築する - Qiita
前回のCentOS6と同様にApache+PHP+PostgreSQLのLAPP開発環境をCentOS7.1で構築してみます。
なお今回のDockerfileはこちらを参考にしました。
準備
今回は以下のようなディレクトリ構成を準備します。ここでは、fooユーザ(パスワードもfoo)を作成し、コンテナ内の「/vagrant」以下にApacheとPostgreSQLのデータを保存するようにしてみます。コンテナ内の「/vagrant」は「vm2/data」とリンクしているため、ホストからSamba経由でここにアクセスすることでソースの編集などが可能です。(PostgreSQLのユーザとパスワードはpostgresとpostgresになります。)
└── vm2
├── build
└── data
Vagrantfile
「vm2/Vagrantfile」を以下の内容で作成します。前回と異なるのは「ip_alias_index」、「ip_alias_address」あたりとDocker Providerの設定内容になります。
ip_alias_dev = "eth1"
ip_alias_index = "2"
ip_alias_address = "192.168.77.202"
ip_alias_netmask = "24"
Vagrant.configure("2") do |config|
config.vm.synced_folder "./data", "/vagrant"
config.vm.provider "docker" do |d|
d.name = "vm2"
d.build_dir = "./build"
d.cmd = [ "/usr/lib/systemd/systemd" ]
d.has_ssh = true
d.ports = []
for p in [ 22, 80, 443, 3306, 5432 ] do
d.ports.push(ip_alias_address + ":" + p.to_s + ":" + p.to_s)
end
d.create_args = ["--privileged"]
d.volumes = ["/sys/fs/cgroup:/sys/fs/cgroup:ro"]
end
config.trigger.before [:up] do
info 'Setting up ip alias ' + ip_alias_dev + ':' + ip_alias_index + ' ' + ip_alias_address + '/' + ip_alias_netmask
cmd = '/sbin/ip addr show ' + ip_alias_dev + ' >/dev/null 2>&1 && ((/sbin/ip addr show ' + ip_alias_dev + ' | grep -F \'inet ' + ip_alias_address + '/' + ip_alias_netmask + '\' >/dev/null 2>&1) || /usr/bin/sudo /sbin/ip addr add ' + ip_alias_address + '/' + ip_alias_netmask + ' dev ' + ip_alias_dev + ' label ' + ip_alias_dev + ':' + ip_alias_index + ')'
`#{cmd}`
end
config.vm.provision "ansible" do |ansible|
ansible.playbook = "playbook.yml"
ansible.extra_vars = {
main_username: 'foo',
main_password: `openssl passwd -salt salty -1 foo`,
docroot: '/vagrant/www/html/htdocs',
cake_env_mode: 'development',
dbroot: '/vagrant/lib/pgsql/9.4',
permit_network: '192.168.77.0/24'
}
end
end
Dockerfile
「vm2/build/Dockerfile」を以下の内容で作成します。
FROM centos:centos7.1.1503
MAINTAINER sadapon2008 <sadapon2008@gmail.com>
ENV container docker
RUN echo 'include_only=.jp' >>/etc/yum/pluginconf.d/fastestmirror.conf
RUN yum -y swap -- remove fakesystemd -- install systemd systemd-libs
RUN yum -y update; yum clean all; \
(cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
RUN yum -y install rsyslog
RUN echo -n 'root:vagrant' | chpasswd
RUN groupadd -g 500 vagrant
RUN useradd -g vagrant -u 500 vagrant
RUN echo -n 'vagrant:vagrant' | chpasswd
RUN mkdir -p /home/vagrant/.ssh
RUN echo 'ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key' > /home/vagrant/.ssh/authorized_keys
RUN chown -R vagrant:vagrant /home/vagrant/.ssh
RUN chmod 700 /home/vagrant/.ssh
RUN chmod 600 /home/vagrant/.ssh/authorized_keys
RUN yum -y install sudo
RUN echo 'vagrant ALL=(ALL) NOPASSWD:ALL' >>/etc/sudoers.d/vagrant
RUN yum -y install openssh-server openssh-clients initscript
RUN sed -ri 's/^#AddressFamily any/AddressFamily inet/' /etc/ssh/sshd_config
RUN sed -ri 's/^#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
RUN sed -ri 's/^GSSAPIAuthentication yes/GSSAPIAuthentication no/' /etc/ssh/sshd_config
RUN sed -ri 's/^UsePrivilegeSeparation sandbox/UsePrivilegeSeparation no/' /etc/ssh/sshd_config
RUN sed -ri 's/^UsePAM yes/UsePAM no/' /etc/ssh/sshd_config
RUN systemctl enable sshd.service
RUN yum -y clean all
EXPOSE 22
VOLUME ["/sys/fs/cgroup"]
CMD ["/usr/lib/systemd/systemd"]
playbook.yml
まず拙作のリポジトリからロールをcloneします。
$ sudo apt-get -y install git
$ cd ~/vm2
$ git clone https://github.com/sadapon2008/ansible-roles roles
「vm2/playbook.yml」を以下の内容で作成します。
---
- name: for
hosts: all
sudo: yes
roles:
- { role: centos7-docker-common, main_username: "{{ main_username }}", main_password: "{{ main_password }}" }
- { role: centos7-apache, main_username: "{{ main_username }}", docroot: "{{ docroot }}", cake_env_mode: "{{ cake_env_mode }}" }
- { role: centos7-remi-php56 }
- { role: centos7-pgdg-postgresql94, dbroot: "{{ dbroot }}", permit_network: "{{ permit_network }}" }
コンテナ起動とプロビジョニング
「vagrant up --provider=docker」するとプロビジョニングも実行されます。
$ cd ~/vm2
$ vagrant up --provider=docker
プロビジョニングが成功すると、ホストのブラウザなどから「 http://192.168.77.202/ 」にアクセスしたり、pgAdmin IIIなどで192.168.77.202:5432にアクセスしたりできます。sshもアクセス可能です。