先道歉~最近有点儿忙…没时间更新文章….
话说我之前做项目都是用CentOS 6来做伪虚拟化的容器的.
不过考虑到CentOS 6到明年中就EOL了~好吧看来有必要寻找新的容器基础.
然后这个时候~后知后觉得我发现了Alpine….

在讨论前首先戴头盔
以下看法纯属个人主观与偏见的技术讨论帖~各位大神如果有不同意见可以留言讨论
如果觉得在下太水皮的话~就当你赢~我输就好~

首先我来现学现卖班门弄斧的说说什么是Alpine吧
Alpine是一套轻量化的功能基本完善但是运行效率极高的开源Linux发行版.
据说由于这些特点,Docker官方都推荐使用它来做容器基础,虽然这种说法我并没有找到Docker官方信息支持这个观点…..
但的确~Alpine的基础Docker包容量才5.6 MB…
好吧~我们来正题了~~~

我现在使用的办法是更轻量化的部署方式
直接用Dockerfile来创建镜像.~不过我们创建之前要搞清楚我们要创建的是什么~
我会以一个普通的php hosting server为例简单地说一下~
而一个php hosting server需要什么呢~需要以下几个东西
1. Nginx #这个不用说了~Web Server
2. php-fpm #我们用的办法是php-fpm来运行php
3. php7 & …… #的一些常用扩展,例如php7-mbstring之类的
4. supervisord #用来运行各种服务
5. sshd #管理用~

FROM alpine:3.10
MAINTAINER Arvind Rawat <[email protected]>

RUN apk --update add --no-cache openssh bash \
  && sed -i s/#PermitRootLogin.*/PermitRootLogin\ yes/ /etc/ssh/sshd_config \
  && echo "root:root" | chpasswd \
  && rm -rf /var/cache/apk/*
RUN sed -ie 's/#Port 22/Port 22/g' /etc/ssh/sshd_config
RUN sed -ri 's/#HostKey \/etc\/ssh\/ssh_host_key/HostKey \/etc\/ssh\/ssh_host_key/g' /etc/ssh/sshd_config
RUN sed -ir 's/#HostKey \/etc\/ssh\/ssh_host_rsa_key/HostKey \/etc\/ssh\/ssh_host_rsa_key/g' /etc/ssh/sshd_config
RUN sed -ir 's/#HostKey \/etc\/ssh\/ssh_host_dsa_key/HostKey \/etc\/ssh\/ssh_host_dsa_key/g' /etc/ssh/sshd_config
RUN sed -ir 's/#HostKey \/etc\/ssh\/ssh_host_ecdsa_key/HostKey \/etc\/ssh\/ssh_host_ecdsa_key/g' /etc/ssh/sshd_config
RUN sed -ir 's/#HostKey \/etc\/ssh\/ssh_host_ed25519_key/HostKey \/etc\/ssh\/ssh_host_ed25519_key/g' /etc/ssh/sshd_config
RUN /usr/bin/ssh-keygen -A
RUN ssh-keygen -t rsa -b 4096 -f  /etc/ssh/ssh_host_key

RUN apk --update add --no-cache supervisor \
  && echo "[program:sshd]" >> /etc/supervisord.conf \
  && echo "command=/usr/sbin/sshd -D" >> /etc/supervisord.conf

RUN apk --update add --no-cache nginx php-fpm php7 php7-mbstring php7-session php7-gd php7-mysqli \
  && echo "[program:nginx]" >> /etc/supervisord.conf \
  && echo "command=/usr/sbin/nginx" >> /etc/supervisord.conf \
  && echo "daemon off;" >> /etc/nginx/nginx.conf \
  && mkdir -p /run/nginx \
  && echo "[program:php-fpm]" >> /etc/supervisord.conf \
  && echo "command=/usr/sbin/php-fpm7 -F" >> /etc/supervisord.conf 

EXPOSE 22
CMD ["/usr/bin/supervisord","--nodaemon","-c","/etc/supervisord.conf"]

这份dockerfile是什么意思呢
基本上可以理解为装上我说的那些东西~然后用supervisord来跑起来,sshd的默认用户密码是root:root
并且supervisord为Docker的入口程序


那么我们首先打开Portainer = > Image页面
点击+ Build a new image打开创建镜像页面


在Name输入框输入你的新的镜像的名字
下面则输入上方的那段dockerfile的内容
点击下方Build the image按钮
Portainer就会开始创建镜像


创建完后你会发现会多了两个镜像
一个是alpine:3.10,另外一个是alpine:hosting.
原因是新创建的alpine:hosting镜像是基于alpine:3.10镜像的~
其实你把alpine:hosting镜像导出来,然后删掉原来的镜像再导入~就可以只有一个alpine:hosting镜像

然后你就可以就这个镜像创建容器实例了.

创建容器~写名字~选刚才创建的镜像~
然后选我们之前的页面教大家创建的MacVLAN~重启策略我会选On failure,当然你也可以选always~
Docker+Portainer打造伪虚拟机服务器 Part.1(Portainer端)


然后就创建完成了~~


然后就可以用SSH来登录服务器了~
可以看到supervisord已经运行起来了sshd,nginx和php-fpm了
alpine 3.10的默认的php-fpm是7.3.6版本


我们简单地写个phpinfo页面
一打开基本上需要用的基础的东西都全了
如果不够的以后自己加吧