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文件,仅供参考:

#Dockerfile文件的绝对路径,docker build时需要
[root@xx-xxxx web_ssh]# pwd
/opt/docker/Dockerfile/web_ssh
#so是个文件夹,里面的so文件编译时用COPY命令拷贝到容器的相应目录,拷贝时使用的是相对路径。
[root@xx-xxxx web_ssh]# ls
Dockerfile  so
#yum源中有很多自定义的rpm包,参考下面的RUN命令读者可能会报错。
[root@xx-xxxx web_ssh]# 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"]
[root@xx-xxxx web_ssh]#

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

[root@xx-xxxx ~]# docker build -t nginx-php:1.0 /opt/docker/Dockerfile/web_ssh
#编译完成后可以在本地的镜像库看到nginx-php标签为1.0的镜像
[root@xx-xxxx ~]# 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
[root@xx-xxxx ~]#

根据相同的方法制作其它服务的标准镜像,如redis、memcached等。
文章出处:http://www.xiaomastack.com/2015/04/05/docker-dev-test-build/

发表评论:

你的电子邮件地址将不会被公开.

63 ÷ 7 =

1 Trackback

  1. Docker搭建开发测试环境_编译镜像 | doc5188 (Pingback)