LoginSignup
13
15

More than 5 years have passed since last update.

Ubuntu14.04 DockerfileでLDAP初期設定済CentOS6.5コンテナを作成

Last updated at Posted at 2014-05-13

設定時のネットワーク環境

ネットワーク空間 192.168.0.0/24
ゲートウェイ 192.168.0.1
ホストOS 192.168.0.10
作業PC 192.168.0.2
ldapサーバー 192.168.1.11

事前作業(環境構築)

  • ldapサーバーはこちらで構築済
  • CentOS5.10のKVM上にUbuntu14.04の仮想ホストを立てる → こちらで構築済
  • KVM上の仮想ホストUbuntu14.04にdockerをインストール → aptitude install docker-io で構築済

概要

  • Ubuntu14.04のDocker0.9.1上にCentOS6.5のコンテナを作成する
  • 作成するCentOS6.5のコンテナのイメージはDockerfileを用いて作成する
  • CentOS6.5のコンテナは下記条件を満たす
  1. monitでデーモン化させる
  2. ldapクライアント設定しssh接続可能な状態

Dockerfileの作成

参考

これから始める「DockerでかんたんLAMP環境 for CentOS」
Dockerってなんじゃ?(Dockerfileでビルド)

shell
vi Dockerfile
Dockerfile
#----------------------------------------------------------
# DockFile
#----------------------------------------------------------
FROM centos

MAINTAINER mykysyk

ENV USER_NAME docker-user
ENV USER_PASSWORD docker-user-password
ENV MONIT_ALLOW_IP 192.168.0.0/24
ENV LDAP_SEREVER 192.168.1.11
ENV LDAP_BASE_DN dc=example,dc=com

RUN yum update -y

#----------------------------------------------------------
#--- REPOS ---
#----------------------------------------------------------
#--- EPEL
RUN rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm ;\
    sed -ri 's/^enabled.*=.*1$/enabled = 0/g' /etc/yum.repos.d/epel.repo

#--- RPMFORGE
RUN rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm ;\
    sed -ri 's/^enabled.*=.*1$/enabled = 0/g' /etc/yum.repos.d/rpmforge.repo

#--- REMI
RUN rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm ;\
    sed -ri 's/^enabled.*=.*1$/enabled = 0/g' /etc/yum.repos.d/remi.repo

#----------------------------------------------------------
#--- SSH
#----------------------------------------------------------
RUN yum install -y sudo passwd openssh openssh-clients openssh-server
RUN sed -ri 's/^#PermitRootLogin yes$/PermitRootLogin no/' /etc/ssh/sshd_config

#----------------------------------------------------------
#--- LOGIN USER
#----------------------------------------------------------
#--- SSH
RUN useradd $USER_NAME
RUN echo "$USER_NAME:$USER_PASSWORD" | chpasswd
RUN echo "$USER_NAME ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/$USER_NAME

#-- LDAP
RUN yum install -y openldap-clients nss-pam-ldapd authconfig
RUN authconfig --enableldap \
               --enableldapauth \
               --ldapserver=$LDAP_SEREVER \
               --ldapbasedn="$LDAP_BASE_DN" \
               --update
RUN rm -f /var/lock/subsys/nslcd

#----------------------------------------------------------
#--- MONIT ---
#----------------------------------------------------------
RUN yum install -y monit --enablerepo=epel
RUN mkdir -p /var/monit/
#--- /etc/monit.conf
RUN cp -a /etc/monit.conf /etc/monit.conf.org
RUN echo 'set daemon  60'                       > /etc/monit.conf ;\
    echo 'set idfile /var/monit/id'            >> /etc/monit.conf ;\
    echo 'set statefile /var/monit/state'      >> /etc/monit.conf ;\
    echo 'set httpd port 2812 and'             >> /etc/monit.conf ;\
    echo '    allow localhost'                 >> /etc/monit.conf ;\
    echo "    allow $MONIT_ALLOW_IP"           >> /etc/monit.conf ;\
    echo "    allow $USER_NAME:$USER_PASSWORD" >> /etc/monit.conf ;\
    echo 'include /etc/monit.d/*'              >> /etc/monit.conf
RUN chown -R root:root /etc/monit.conf
RUN chmod -R 600 /etc/monit.conf

#---/etc/monit.d/services.rc
RUN echo 'check process sshd with pidfile /var/run/sshd.pid'          > /etc/monit.d/services.rc ;\
    echo '    start program = "/sbin/service sshd start"'            >> /etc/monit.d/services.rc ;\
    echo '    stop  program = "/sbin/service sshd stop"'             >> /etc/monit.d/services.rc ;\
    echo 'check process nslcd with pidfile /var/run/nslcd/nslcd.pid' >> /etc/monit.d/services.rc ;\
    echo '    start program = "/sbin/service nslcd start"'           >> /etc/monit.d/services.rc ;\
    echo '    stop  program = "/sbin/service nslcd stop"'            >> /etc/monit.d/services.rc
RUN chown -R root:root /etc/monit.d/

#----------------------------------------------------------
#--- START SERVICE ---
#----------------------------------------------------------
EXPOSE 22 2812
CMD /usr/bin/monit -I

コンテナイメージを作成

↑でつくったDockerfileと同じ階層で実行

shell
docker.io build --no-cache --rm -t centos6:test .

コンテナを起動

  • コンテナのポート2812(monit)をホストOSの12812からポートフォワードさせる
  • コンテナのポート22(ssh)をホストOSの10022からポートフォワードさせる
shell
docker.io run -d -p 12812:2812 -p 10022:22 -t centos6:test

コンテナの状態確認

shell
docker.io ps -a
結果
CONTAINER ID        IMAGE                 COMMAND                CREATED             STATUS              PORTS                                            NAMES
c6ee5a7f6bf2        centos6:hoge          /bin/sh -c /usr/bin/   4 minutes ago       Up 4 minutes        0.0.0.0:10022->22/tcp, 0.0.0.0:12812->2812/tcp   tender_wozniak

コンテナのmonitに接続

monitに接続するためにはホストOSにポートフォワードしてもらって接続しなくてはいけない
そのため接続時はコンテナのIPとポートではなく、ホストOSのIPとポートフォワードするポートを指定することになる。

http://192.168.0.10:12812 へアクセス

DockerFileで指定したパスワードで接続
ユーザー名「docker-user」
パスワード「docker-user-password」

コンテナへssh接続

ssh接続するためにはホストOSにポートフォワードしてもらって接続しなくてはいけない
そのため接続時はコンテナのIPとポートではなく、ホストOSのIPとポートフォワードするポートを指定することになる。

shell
ssh docker-user@192.168.0.10 -P 10022

DockerFileで指定したパスワードで接続
ユーザー名「docker-user」
パスワード「docker-user-password」

ユーザーとパスワードはDockerFileで指定したパスワード以外にldapで設定しているユーザーとパスワード両方つかえる

応用

Ubuntu14.04 で Docker0.9.1 のコンテナに任意のIPをつけるの設定を行ってから
下記コマンドでコンテナを起動させるポートフォワードさせずに直接コンテナのIPとポート番号でアクセスできるようになる。

shell
docker.io run \
-n=false \
--lxc-conf="lxc.network.type = veth" \
--lxc-conf="lxc.network.ipv4 = 192.168.0.100/24" \
--lxc-conf="lxc.network.ipv4.gateway = 192.168.0.1" \
--lxc-conf="lxc.network.link = br0" \
--lxc-conf="lxc.network.name = eth0" \
--lxc-conf="lxc.network.flags = up" \
-d -t centos6:test

ホストOSと同じネットワーク空間にある作業PC(192.168.0.2)から
http://192.168.0.100:2812 にアクセス

DockerFileで指定したパスワードで接続
ユーザー名「docker-user」
パスワード「docker-user-password」

13
15
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
13
15