Docker搭建开发测试环境_编译镜像

可以使用docker commit将一个状态改变的容器保存为镜像,也可以通过Dockerfile文件直接docker build镜像。构建基础的服务镜像时如nginx、php、mysql、redis、memcached等,貌似docker build比较方便也更容易修改,所以我选择docker build的方式进行服务镜像的制作。
1、docker build依赖Dockerfile配置文件,了解Dockerfile文件结构可以参考以下两篇文章:
https://docs.docker.com/reference/builder/
http://dockerpool.com/static/books/docker_practice/dockerfile/basic_structure.html
2、以下是依赖于本地的docker私有仓库和本地yum源编译web(php+nginx)服务镜像的Dockerfile文件,仅供参考:

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
#Dockerfile文件的绝对路径,docker build时需要
$ pwd
/opt/docker/Dockerfile/web_ssh
#so是个文件夹,里面的so文件编译时用COPY命令拷贝到容器的相应目录,拷贝时使用的是相对路径。
$ ls
Dockerfile so
#yum源中有很多自定义的rpm包,参考下面的RUN命令读者可能会报错。
$ cat Dockerfile
FROM 127.0.0.1:5000/centos:6.6
#php-fpm
RUN mkdir -p /etc/yum.repos.d/src /opt/log/php-fpm /opt/run && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/src/ &&\
echo -e "[base]\nname=CentOS-$releasever - Base\nbaseurl=http://10.0.1.75/yumdata_6/\nenabled=1\ngpgcheck=0\ngpgkey=http://10.0.1.75/yumdata_6/RPM-GPG-KEY-CentOS-6" > /etc/yum.repos.d/local.repo &&\
yum install -y mysql-libs freetype fontconfig libXext libpng libjpeg pango librsvg2 libSM libgomp &&\
yum install -y php php-redis memcache APC PDO_MYSQL ImageMagick imagick mongo xhprof php-memcached &&\
echo -e "/usr/lib\n/usr/local/lib" >> /etc/ld.so.conf.d/mysql-x86_64.conf && ldconfig && ln -fs /usr/local/php/bin/php /usr/bin/php && useradd -s /sbin/nologin -M www &&\
echo -e "* soft nofile 655350\n* hard nofile 655350\n* soft stack 262140" >> /etc/security/limits.conf &&\
sed -i '/extension=couchbase.so/d' /usr/local/php/etc/php.ini &&\
echo -e "ulimit -n 655350\n/etc/init.d/php start" > /bin/web && chmod a+x /bin/web

COPY so/* /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/

#nginx
RUN yum -y install nginx && sed -i 's/worker_processes 16/worker_processes 4/g' /usr/local/nginx/conf/nginx.conf &&\
mkdir /opt/log/nginx/ && sed -i 's/"\$test_cookie"//g' /usr/local/nginx/conf/nginx.conf &&\
echo -e "/etc/init.d/nginx start" >> /bin/web
#ssh
RUN yum -y install openssh-server openssh-clients openssh && echo -e "/etc/init.d/sshd start" >> /bin/web && echo root:hoodinn123 | chpasswd

#daemon
RUN sed -i "#/bin/bash#d" /bin/web && echo -e "while true; do sleep 3600; done" >> /bin/web

VOLUME ["/usr/local/php/etc", "/opt/log/php-fpm", "/usr/local/nginx/conf/vhost", "/opt/log/nginx", "/opt/www"]

EXPOSE 80 22

CMD ["/bin/bash","/bin/web"]
$

3、使用docker build命令编译镜像

1
2
3
4
5
6
7
8
9
10
11
12
$ docker build -t nginx-php:1.0 /opt/docker/Dockerfile/web_ssh
#编译完成后可以在本地的镜像库看到nginx-php标签为1.0的镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
nginx 1.0 6e4bda0aef64 2 days ago 280.8 MB
memcached 1.4.13 c07e8472f6a3 5 days ago 268.4 MB
redis 2.8.8 2667155f0cf1 5 days ago 276.3 MB
mysql 5.5.20 6c4c5399b813 9 days ago 943.9 MB
nginx-php 1.0 a94099d84ae0 9 days ago 490.3 MB
registry latest fc251f2434a1 3 weeks ago 418 MB
centos 6.6 0bc55ae673f7 4 weeks ago 215.8 MB
$

根据相同的方法制作其它服务的标准镜像,如redis、memcached等。

----------------本文结束 感谢阅读----------------