docker深入1-使用supervisor来管理服务

目的:

a) 提供ssh登录;

b) 提供supervisor来管理其他服务;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
一、制作一个基础镜像
[Jack@test101 base]$  pwd
/home/Jack/base
[Jack@test101 base]$  ls
bin  conf  Dockerfile  README
 
 
1)【Dockerfile】
[Jack@test101 base]$  cat  Dockerfile 
FROM centos
MAINTAINER pcnk
 
# yum
RUN yum -y update; yum clean all
 
# epel & supervisor & sshd
RUN rpm -ivh http: //dl .fedoraproject.org /pub/epel/7/x86_64/e/epel-release-7-5 .noarch.rpm \
       && yum -y  install  openssh-server  passwd  python-pip \
       && yum clean all \
       &&  /usr/bin/pip  install  supervisor
 
# update config
ADD . /bin/start .sh  /root/start .sh
RUN  set  -x \
         &&  /bin/sed  -i  's/.*session.*required.*pam_loginuid.so.*/session optional pam_loginuid.so/g'  /etc/pam .d /sshd  \
         &&  ssh -keygen -t rsa -f  /etc/ssh/ssh_host_rsa_key  -N  ''  \
         &&  mkdir  /var/run/sshd   /etc/supervisor .d \
         &&  /usr/bin/echo_supervisord_conf  > /etc/supervisord .conf  \
         &&  sed  -i  's/nodaemon=false/nodaemon=true/'  /etc/supervisord .conf \
         &&  echo  -e  '[include]\nfiles=/etc/supervisor.d/*.ini'  >> /etc/supervisord .conf \
         &&  grep  ^[^\;]  /etc/supervisord .conf \
         &&  chmod  755  /root/start .sh \
         && . /root/start .sh
COPY . /conf/supervisor .d /sshd .ini  /etc/supervisor .d /sshd .ini
 
# EXPOSE 22
ENTRYPOINT [ "/usr/bin/supervisord" ]
 
 
2)【启动脚本】
[Jack@test101 base]$  cat  bin /start .sh 
#!/bin/bash
#
# 2015/5/5
 
# Update public key for root
__update_root() {
   SSH_USERPASS=toortoor
   echo  -e  "$SSH_USERPASS\n$SSH_USERPASS"  | ( passwd  --stdin root)
   echo  ssh  user password: $SSH_USERPASS
 
   d_root= '/root/.ssh'
   [ -d ${d_root} ] ||  mkdir  ${d_root}
 
   cat  <<_PUBKEY > /${d_root} /authorized_keys
ssh -rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA+kdRTFU8zzzypY7BF1vfjk00ECGruUTWVILVcAVKX2FlUa0MVgXuX8auaqcl7mU3jq8DCKXUpJE4zywDQh0v6+b7 /x3K +LTascPLRrdoZRMyc3B9F8F6buJWUjkvcosvRRp4rtymngLHczOeH9v9yK+xIc32xJiQv0apjyUA8ZXqNx8QAOlZYoGTi8AISzcf+lMgWUcbm8Y7cjZSOG3GjzGuJWWjBUnLGxgIZXDLF /qXYHxqYzac9uHRjG8gXrO2zawNKlq18m50pKF12P5eYlvGoYqYDwVR +mk9wte4+MPgiUi /nA43FHTp57LToUc0AE64fQelsyh2fCOU50Jgkw == Jack@ test
_PUBKEY
 
   chmod  700 ${d_root}
   chmod  600 ${d_root} /authorized_keys
}
 
# Call all functions
__update_root
 
 
3)【supervisor配置】
[Jack@test101 base]$  cat  conf /supervisor .d /sshd .ini    
[program:sshd]
command = /usr/sbin/sshd  -D
 
 
4)【build一个image】
[Jack@test101 base]$ docker build -- rm  -t pcnk /base :v2 .
 
 
二、启动一个container来验证
【查看images】
[Jack@test101 base]$ docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
pcnk /base            v2                  064aa35dfcef        2 minutes ago       251.3 MB
 
 
5)【启动一个container】
[Jack@test101 base]$ docker run -d --name app_test -p 10022:22 pcnk /base :v2
85df9a7ce698f69f5e14bb0bfdda5f8e16baf215315d7b2254bb86b52bc91f32
[Jack@test101 base]$ docker  ps  -l
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                   NAMES
85df9a7ce698        pcnk /base :v2        " /usr/bin/supervisor    5 seconds ago       Up 4 seconds        0.0.0.0:10022->22 /tcp    app_test 
 
登录测试:
[Jack@test101 base]$  echo /home/Jack/ . ssh /known_hosts 
上边先清理一下,因为之前的测试有保留其他的key的信息。
 
先测试用 passwd 方式登录: 
[Jack@test101 base]$  ssh  -p 10022 root@127.0.0.1
The authenticity of host  '[127.0.0.1]:10022 ([127.0.0.1]:10022)'  can't be established.
RSA key fingerprint is 15:18:db:44:ed:03:ca:ac:15:a3:d0:ea:ac:01:7e:27.
Are you sure you want to  continue  connecting ( yes /no )?  yes
Warning: Permanently added  '[127.0.0.1]:10022'  (RSA) to the list of known hosts.
root@127.0.0.1's password: 
[root@85df9a7ce698 ~] # exit
logout
Connection to 127.0.0.1 closed.
 
 
在测试用public key方式登录:
[Jack@test101 base]$  ssh  -p 10022 root@127.0.0.1 -i  /home/Jack/ . ssh /Jack
Last login: Wed May  6 01:37:11 2015 from 172.17.42.1
[root@85df9a7ce698 ~] # exit
logout
Connection to 127.0.0.1 closed.
 
 
 
6)【删除镜像的方式】
先停止用到这个image的container:
[Jack@test101 base]$ docker stop app_test
[Jack@test101 base]$ docker  rm  app_test
 
再删掉image:
[Jack@test101 base]$ docker rmi `docker images | grep  'pcnk/base'  | awk  '{print $3}' `