LoginSignup
3
3

More than 5 years have passed since last update.

Docker on Vagrant on Ubuntu on VirtualBoxにCentOS7.1の開発環境を構築する

Last updated at Posted at 2015-09-04

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はこちらを参考にしました。

Docker Hub | centos

準備

今回は以下のようなディレクトリ構成を準備します。ここでは、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もアクセス可能です。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3