天天看點

docker深入1-使用supervisor來管理服務

docker深入1-使用supervisor來管理服務

目的:

a) 提供ssh登入;

b) 提供supervisor來管理其他服務;

<code>一、制作一個基礎鏡像</code>

<code>[Jack@test101 base]$ </code><code>pwd</code>

<code>/home/Jack/base</code>

<code>[Jack@test101 base]$ </code><code>ls</code>

<code>bin  conf  Dockerfile  README</code>

<code>1)【Dockerfile】</code>

<code>[Jack@test101 base]$ </code><code>cat</code> <code>Dockerfile </code>

<code>FROM centos</code>

<code>MAINTAINER pcnk</code>

<code># yum</code>

<code>RUN yum -y update; yum clean all</code>

<code># epel &amp; supervisor &amp; sshd</code>

<code>RUN rpm -ivh http:</code><code>//dl</code><code>.fedoraproject.org</code><code>/pub/epel/7/x86_64/e/epel-release-7-5</code><code>.noarch.rpm \</code>

<code>      </code><code>&amp;&amp; yum -y </code><code>install</code> <code>openssh-server </code><code>passwd</code> <code>python-pip \</code>

<code>      </code><code>&amp;&amp; yum clean all \</code>

<code>      </code><code>&amp;&amp; </code><code>/usr/bin/pip</code> <code>install</code> <code>supervisor</code>

<code># update config</code>

<code>ADD .</code><code>/bin/start</code><code>.sh </code><code>/root/start</code><code>.sh</code>

<code>RUN </code><code>set</code> <code>-x \</code>

<code>        </code><code>&amp;&amp; </code><code>/bin/sed</code> <code>-i </code><code>'s/.*session.*required.*pam_loginuid.so.*/session optional pam_loginuid.so/g'</code> <code>/etc/pam</code><code>.d</code><code>/sshd</code> <code>\</code>

<code>        </code><code>&amp;&amp; </code><code>ssh</code><code>-keygen -t rsa -f </code><code>/etc/ssh/ssh_host_rsa_key</code> <code>-N </code><code>''</code> <code>\</code>

<code>        </code><code>&amp;&amp; </code><code>mkdir</code> <code>/var/run/sshd</code>  <code>/etc/supervisor</code><code>.d \</code>

<code>        </code><code>&amp;&amp; </code><code>/usr/bin/echo_supervisord_conf</code> <code>&gt;</code><code>/etc/supervisord</code><code>.conf  \</code>

<code>        </code><code>&amp;&amp; </code><code>sed</code> <code>-i </code><code>'s/nodaemon=false/nodaemon=true/'</code> <code>/etc/supervisord</code><code>.conf \</code>

<code>        </code><code>&amp;&amp; </code><code>echo</code> <code>-e </code><code>'[include]\nfiles=/etc/supervisor.d/*.ini'</code> <code>&gt;&gt;</code><code>/etc/supervisord</code><code>.conf \</code>

<code>        </code><code>&amp;&amp; </code><code>grep</code> <code>^[^\;] </code><code>/etc/supervisord</code><code>.conf \</code>

<code>        </code><code>&amp;&amp; </code><code>chmod</code> <code>755 </code><code>/root/start</code><code>.sh \</code>

<code>        </code><code>&amp;&amp; .</code><code>/root/start</code><code>.sh</code>

<code>COPY .</code><code>/conf/supervisor</code><code>.d</code><code>/sshd</code><code>.ini </code><code>/etc/supervisor</code><code>.d</code><code>/sshd</code><code>.ini</code>

<code># EXPOSE 22</code>

<code>ENTRYPOINT [</code><code>"/usr/bin/supervisord"</code><code>]</code>

<code>2)【啟動腳本】</code>

<code>[Jack@test101 base]$ </code><code>cat</code> <code>bin</code><code>/start</code><code>.sh </code>

<code>#!/bin/bash</code>

<code>#</code>

<code># 2015/5/5</code>

<code># Update public key for root</code>

<code>__update_root() {</code>

<code>  </code><code>SSH_USERPASS=toortoor</code>

<code>  </code><code>echo</code> <code>-e </code><code>"$SSH_USERPASS\n$SSH_USERPASS"</code> <code>| (</code><code>passwd</code> <code>--stdin root)</code>

<code>  </code><code>echo</code> <code>ssh</code> <code>user password: $SSH_USERPASS</code>

<code>  </code><code>d_root=</code><code>'/root/.ssh'</code>

<code>  </code><code>[ -d ${d_root} ] || </code><code>mkdir</code> <code>${d_root}</code>

<code>  </code><code>cat</code> <code>&lt;&lt;_PUBKEY &gt; /${d_root}</code><code>/authorized_keys</code>

<code>ssh</code><code>-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA+kdRTFU8zzzypY7BF1vfjk00ECGruUTWVILVcAVKX2FlUa0MVgXuX8auaqcl7mU3jq8DCKXUpJE4zywDQh0v6+b7</code><code>/x3K</code><code>+LTascPLRrdoZRMyc3B9F8F6buJWUjkvcosvRRp4rtymngLHczOeH9v9yK+xIc32xJiQv0apjyUA8ZXqNx8QAOlZYoGTi8AISzcf+lMgWUcbm8Y7cjZSOG3GjzGuJWWjBUnLGxgIZXDLF</code><code>/qXYHxqYzac9uHRjG8gXrO2zawNKlq18m50pKF12P5eYlvGoYqYDwVR</code><code>+mk9wte4+MPgiUi</code><code>/nA43FHTp57LToUc0AE64fQelsyh2fCOU50Jgkw</code><code>== Jack@</code><code>test</code>

<code>_PUBKEY</code>

<code>  </code><code>chmod</code> <code>700 ${d_root}</code>

<code>  </code><code>chmod</code> <code>600 ${d_root}</code><code>/authorized_keys</code>

<code>}</code>

<code># Call all functions</code>

<code>__update_root</code>

<code>3)【supervisor配置】</code>

<code>[Jack@test101 base]$ </code><code>cat</code> <code>conf</code><code>/supervisor</code><code>.d</code><code>/sshd</code><code>.ini    </code>

<code>[program:sshd]</code>

<code>command</code><code>=</code><code>/usr/sbin/sshd</code> <code>-D</code>

<code>4)【build一個image】</code>

<code>[Jack@test101 base]$ docker build --</code><code>rm</code> <code>-t pcnk</code><code>/base</code><code>:v2 .</code>

<code>二、啟動一個container來驗證</code>

<code>【檢視images】</code>

<code>[Jack@test101 base]$ docker images </code>

<code>REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE</code>

<code>pcnk</code><code>/base</code>           <code>v2                  064aa35dfcef        2 minutes ago       251.3 MB</code>

<code>5)【啟動一個container】</code>

<code>[Jack@test101 base]$ docker run -d --name app_test -p 10022:22 pcnk</code><code>/base</code><code>:v2</code>

<code>85df9a7ce698f69f5e14bb0bfdda5f8e16baf215315d7b2254bb86b52bc91f32</code>

<code>[Jack@test101 base]$ docker </code><code>ps</code> <code>-l</code>

<code>CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                   NAMES</code>

<code>85df9a7ce698        pcnk</code><code>/base</code><code>:v2        "</code><code>/usr/bin/supervisor</code>   <code>5 seconds ago       Up 4 seconds        0.0.0.0:10022-&gt;22</code><code>/tcp</code>   <code>app_test </code>

<code>登入測試:</code>

<code>[Jack@test101 base]$ </code><code>echo</code><code>&gt; </code><code>/home/Jack/</code><code>.</code><code>ssh</code><code>/known_hosts</code> 

<code>上邊先清理一下,因為之前的測試有保留其他的key的資訊。</code>

<code>先測試用</code><code>passwd</code><code>方式登入: </code>

<code>[Jack@test101 base]$ </code><code>ssh</code> <code>-p 10022 [email protected]</code>

<code>The authenticity of host </code><code>'[127.0.0.1]:10022 ([127.0.0.1]:10022)'</code> <code>can't be established.</code>

<code>RSA key fingerprint is 15:18:db:44:ed:03:ca:ac:15:a3:d0:ea:ac:01:7e:27.</code>

<code>Are you sure you want to </code><code>continue</code> <code>connecting (</code><code>yes</code><code>/no</code><code>)? </code><code>yes</code>

<code>Warning: Permanently added </code><code>'[127.0.0.1]:10022'</code> <code>(RSA) to the list of known hosts.</code>

<code>[email protected]'s password: </code>

<code>[root@85df9a7ce698 ~]</code><code># exit</code>

<code>logout</code>

<code>Connection to 127.0.0.1 closed.</code>

<code>在測試用public key方式登入:</code>

<code>[Jack@test101 base]$ </code><code>ssh</code> <code>-p 10022 [email protected] -i </code><code>/home/Jack/</code><code>.</code><code>ssh</code><code>/Jack</code>

<code>Last login: Wed May  6 01:37:11 2015 from 172.17.42.1</code>

<code>6)【删除鏡像的方式】</code>

<code>先停止用到這個image的container:</code>

<code>[Jack@test101 base]$ docker stop app_test</code>

<code>[Jack@test101 base]$ docker </code><code>rm</code> <code>app_test</code>

<code>再删掉image:</code>

<code>[Jack@test101 base]$ docker rmi `docker images |</code><code>grep</code> <code>'pcnk/base'</code> <code>|</code><code>awk</code> <code>'{print $3}'</code><code>`</code>

本文轉自 pcnk 51CTO部落格,原文連結:http://blog.51cto.com/nosmoking/1642169,如需轉載請自行聯系原作者