여러 용기로 여러 서비스 시작하기

7561 단어 Dockersupervisord

Intro


docker를 사용하여 웹 응용 소프트웨어를 개발하는 환경, 동시에 서비스 제공
시동이 안 걸려서 귀찮아요.
슈퍼바이어로 해볼게요.
다중 시작 명령/sbin/init
형식도 해봤지만 아이를 제대로 죽일 수는 없어요.
defunct를 양산해서 포기했어.

전제 조건

  • 맥스OS+boot2 docker의 Docker로 하고 있다
  • 도커의 환경 설정 등에 대한 할애
  • 컨테이너 측os는centos6이다.6
  • 절차.


    1. 적당한 컨테이너 가동


    이 용기는 새로운centos6 인상이다.(장치가 설치되어 있지 않음)
    docker run -itd --name devutil centos:centos6 /bin/bash
    

    2. 관련 도구를 넣기

    #めんどくさいのでまとめて入れる
    yum -y groupinstall "Development Tools"
    
    #pythonツールたちとsshとhttpd
    yum -y install openssh openssh-clients openssh-server httpd vim python-setuptools
    
    #rootのパスワード変えておく
    passwd
    
    

    3. supervisord 설치

    easy_install supervisor
    

    4.supervisord의 시작 스크립트 제작


    시작 스크립트 만들기
    /etc/init.d/supervisord
    #!/bin/sh
    #
    # /etc/rc.d/init.d/supervisord
    #
    # Supervisor is a client/server system that
    # allows its users to monitor and control a
    # number of processes on UNIX-like operating
    # systems.
    #
    # chkconfig: - 64 36
    # description: Supervisor Server
    # processname: supervisord
    
    # Source init functions
    . /etc/init.d/functions
    
    RETVAL=0
    prog="supervisord"
    pidfile="/tmp/supervisord.pid"
    lockfile="/var/lock/subsys/supervisord"
    
    start()
    {
       echo -n $"Starting $prog: "
       daemon --pidfile $pidfile supervisord
       RETVAL=$?
       echo
       [ $RETVAL -eq 0 ] && touch ${lockfile}
    }
    stop()
    {
       echo -n $"Shutting down $prog: "
       killproc -p ${pidfile} /usr/bin/supervisord
       RETVAL=$?
       echo
       if [ $RETVAL -eq 0 ] ; then
          rm -f ${lockfile} ${pidfile}
       fi
    }
    case "$1" in
      start)
        start
      ;;
      stop)
        stop
      ;;
      status)
        status $prog
      ;;
      restart)
        stop
        start
      ;;
      *)
        echo "Usage: $0 {start|stop|restart|status}"
      ;;
    esac
    
    chmod 755 /etc/init.d/supervisord
    

    4. supervisor 설정 파일 쓰기


    /etc/supervisord.conf
    [supervisord]
    nodaemon=true
    
    [program:sshd]
    #command=/usr/sbin/sshd -D
    command=/sbin/service sshd start
    
    [program:httpd]
    command=/sbin/service httpd start
    
    

    5.ssh에 대한 PAM 설정

    cp /etc/ssh/sshd_config /etc/ssh/sshd_config.orig
    sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config
    sed -ri 's/#UsePAM no/UsePAM no/g' /etc/ssh/sshd_config
    
    

    6. 컨테이너에서commiit를 먼저 꺼내기


    Ctrl+p+q를 통해 종료합니다.
    commiit를 통해 이미지 저장
    docker commit 457dc5419f1a takaito/devutil
    docker images
    
    방금 가동된 컨테이너는 가동 후 삭제됩니다.
    docker stop {コンテナID}
    docker rm {コンテナID}
    

    7. 이미지 포트에서 매핑한 후 컨테이너 다시 시작

    docker run -itd -p 51080:80 -p 51022:22 --name devutil takaito/devutil /usr/bin/supervisord
    

    8. 확인


    Mac 방면에서
    boot2 docker의 ip를 통해 51080 포트에서 브라우저로 접근

    boot2 docker의 ip를 통해 5102 포트 ssh에 로그인
    ssh [email protected] -p 51022
    
    할 수 있으면 오케이.
    컨테이너 방면의 공정을 확인해 보아라.잘 돌아가고 있어요.
    ps ax
    
    Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
      PID TTY      STAT   TIME COMMAND
        1 pts/0    Ss+    0:00 /usr/bin/python /usr/bin/supervisord
       35 ?        Ss     0:00 /usr/sbin/httpd
       37 ?        S      0:00 /usr/sbin/httpd
       38 ?        Ss     0:00 /usr/sbin/sshd
       39 ?        S      0:00 /usr/sbin/httpd
       40 ?        S      0:00 /usr/sbin/httpd
       42 ?        S      0:00 /usr/sbin/httpd
       43 ?        S      0:00 /usr/sbin/httpd
       44 ?        S      0:00 /usr/sbin/httpd
       45 ?        S      0:00 /usr/sbin/httpd
       46 ?        S      0:00 /usr/sbin/httpd
      130 ?        Ss     0:00 sshd: root@pts/0
      132 pts/0    Ss     0:00 -bash
      145 pts/0    R+     0:00 ps -ax
    
    
    pstree
    supervisord─┬─httpd───8*[httpd]
                └─sshd───sshd───bash───pstree
    

    감상


    귀찮아요.일자리가 없다.
    그리고 컨테이너를 루트로 옮기는 게 힘들어요.
    앞으로 개선될 수 있다면 나는 매우 기쁠 것이다.

    참조 링크


    http://memocra.blogspot.jp/2014/02/dockersupervisor.html
    http://yss44.hatenablog.com/entry/2014/01/05/031736

    좋은 웹페이지 즐겨찾기