在 DaoCloud帮助下,我学会了如何使用 Docker。在使用之初,基本上都是按照自己的要求在网上查找现有的映像文件,然后挂载相关的目录和端口。但是在使用的过程当中,我发现现有的映像和自己的需求总
在 DaoCloud帮助下,我学会了如何使用 Docker。在使用之初,基本上都是按照自己的要求在网上查找现有的映像文件,然后挂载相关的目录和端口。但是在使用的过程当中,我发现现有的映像和自己的需求总有一定的差距。
我的服务器配置很差,所以对内存和硬盘占用都比较敏感,因此我的方案是用一个容器来统一运行 MySQL,然后用多个容器来运行不同的程序。对于 MySQL,直接部署官方的稳定版即可,但是在部署 WEB 服务器和 PHP 的过程中,我查找了好多现有的映像,比如 webdevops/php-nginx:centos-7-php56
这个映像尺寸太大,有800多 M,几个基于 Alphine 的尺寸虽然小,但是似乎对 MySQL 的支持都有点问题,于是我决定自己构建映像,经过网上的反复搜索和不断实践,最后终于搞明白了全部流程。
首先,选择基础映像,也就是自己的映像基于什么构建,因为我平常习惯使用 DebIan,所以我就选择了 DebIan8.7来构建。可以通过命令行或Daocloud 来部署。
第二,根据自己的需要来修改映像,在这一步有两种方法:一种是新建一个容器,在容器中运行相关指令使得它符合自己的要求后再从这个容器导出映像;另一种方法是生成一个 Dockerfile 文件来自动构建。我采用了第二种方法,下面就是我构建 Lighttpd + PHP 容器的文件
# FROM 指令指定源映像FROM debian:8.7 #MAINTAINER 指令设定作者信息MAINTAINER hugsnow "[email protected]"#ADD 指令用于复制文件,这个文件可以是一个 URL#我这里是想把原映像中的 APT 源换成国内阿里云的源#我把处理好的文件放在了局域网上,用 ADD 指令增加到映像中#下面三局和这个是等价的,主要是我不会 sed,不然一句就搞定#RUN 是在容器中运行命令ADD http://myip/path/deb8sources.txt /etc/apt/sources.list#RUN echo 'deb http://mirrors.aliyun.com/debian jessie main' > /etc/apt/sources.list #RUN echo 'deb http://mirrors.aliyun.com/debian jessie-updates main' >> /etc/apt/sources.list #RUN echo 'deb http://security.debian.org jessie/updates main' >> /etc/apt/sources.list#下面这几句代码是从 APT 源安装需要的软件并清理缓存RUN apt-get updateRUN apt-get -y install lighttpd php5-cgi php5-gd php5-mcrypt php5-pgsql php5-mysql php5-sqlite nanoRUN apt-get autoclean#启用 Lighttpd 的 PHP 支持RUN lighttpd-enable-mod fastcgi-phpRUN /etc/init.d/lighttpd stop#需要暴露的端口EXPOSE 80#容器启动时启动 web 服务器,CMD 用于设定容器中运行的命令CMD /usr/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.conf #VOLUME 用于设定要挂载的目录,这里设定为 web 目录VOLUME /var/www/html
第三,进入 Dockerfile 所在的目录,运行 <code>docker build -t hugsnow/debian-lighttpd-php5:latest .</code>,如果顺利的话,映像将会构建成功。
第四,使用自己构建的映像创建容器,docker run -tid --name myweb1 -v /srv/myweb1:/var/www/html -p8000:80 --restart=always hugsnow/alp-mysql-sqlite:latst
,简单来说,name 属性设置容器名字;v 属性设置目录挂载;p 属性设置端口映射;restart=always设置自动启动容器。更多参数可查询手册。
第五,如果是生产环境,还需要在反向代理中进行相关的设置。
最后,如果需要在多个服务器上使用自己的映像,使用 Docker save 和 Docker load 命令来导出和导入映像,也可以上传到 Dockerhub.io 供有需要的人使用。当然,在国内想要贡献自己的映像那就算了(我又想对方校长爆粗口,罪过)。还可以直接把 Dockerfile 文件复制到新的机器上重新构建映像。
参考网址:
- http://dockone.io/article/103
- http://www.runoob.com/docker/docker-image-usage.html
- https://segmentfault.com/a/1190000000586840
- http://molewan.blog.51cto.com/287340/1743902
- https://www.gitbook.com/book/yeasy/docker_practice/details
- http://www.cnblogs.com/ivictor/p/4834864.html