有时候需要自己定制特定的镜像,分享一下在ubuntu14.04基础镜像上搭建lamp镜像的过程。
1.创建文件目录与文件
创建所需的目录lamp/用于存放Dockerfile和相关文件。
sources.list用于更换国内镜像源。
supervisord.conf为supervisor配置文件。
test.php用于测试php环境是否可用。
$ mkdir lamp/
$ cd lamp/
$ touch Dockerfile sources.list supervisord.conf test.php
2.相关文件内容
sources.list请根据自己需求更换为国内镜像源,这里用的是西电镜像源,貌似校园网才可访问。
$ vim sources.list
deb http://linux.xidian.edu.cn/mirrors/ubuntu/ trusty main restricted universe multiverse
#deb-src http://linux.xidian.edu.cn/mirrors/ubuntu/ trusty main restricted universe multiverse
deb http://linux.xidian.edu.cn/mirrors/ubuntu/ trusty-security main restricted universe multiverse
#deb-src http://linux.xidian.edu.cn/mirrors/ubuntu/ trusty-security main restricted universe multiverse
deb http://linux.xidian.edu.cn/mirrors/ubuntu/ trusty-updates main restricted universe multiverse
#deb-src http://linux.xidian.edu.cn/mirrors/ubuntu/ trusty-updates main restricted universe multiverse
#deb http://linux.xidian.edu.cn/mirrors/ubuntu/ trusty-backports main restricted universe multiverse
#deb-src http://linux.xidian.edu.cn/mirrors/ubuntu/ trusty-backports main restricted universe multiverse
#deb http://linux.xidian.edu.cn/mirrors/ubuntu/ trusty-proposed main restricted universe multiverse
#deb-src http://linux.xidian.edu.cn/mirrors/ubuntu/ trusty-proposed main restricted universe multiverse
supervisord.conf为supervisor配置文件,配置文件包含目录和进程,第一段 supervsord 配置软件本身,使用 nodaemon 参数来运行。第二段包含要控制的 2 个服务。每一段包含一个服务的目录和启动这个服务的命令。
$ vim supervisord.conf
[supervisord]
nodaemon=true
[program:apache2]
command=/usr/sbin/apache2 -DFOREGROUND
[program:mysql]
command=/usr/bin/mysqld_safe
test.php用于测试php环境是否可用。
$ vim test.php
<?php
phpinfo();
?>
3.Dockerfile文件内容
#build lamp image
#
#VERSION 1.0
FROM ubuntu:14.04
MAINTAINER NSS/Czh
COPY ./sources.list /etc/apt/sources.list
RUN apt-get update \
&& echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d \
&& DEBIAN_FRONTEND="noninteractive" apt-get install -y apache2 mysql-server supervisor \
&& echo "ServerName localhost:80" >> /etc/apache2/apache2.conf \
&& sed -i "s/bind-address/#bind-address/g" /etc/mysql/my.cnf \
&& DEBIAN_FRONTEND="noninteractive" apt-get install -y php5 php5-mcrypt curl php5-curl php5-gd \
&& php5enmod mcrypt \
&& rm -rf /var/lib/apt/lists/*
#注意这里要更改系统的时区设置,因为在 web 应用中经常会用到时区这个系统变量
RUN echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata \
&&mkdir -p /var/lock/apache2
#设置一些apache 的环境变量,可以在启动的时候用 -e 改变
ENV APACHE_RUN_USER=www-data \
APACHE_RUN_GROUP=www-data \
APACHE_LOG_DIR=/var/log/apache2 \
APACHE_PID_FILE=/var/run/apache2.pid \
APACHE_RUN_DIR=/var/run/apache2 \
APACHE_LOCK_DIR=/var/lock/apache2 \
APACHE_SERVERADMIN=admin@localhost \
APACHE_SERVERNAME=localhost \
APACHE_SERVERALIAS=docker.localhost \
APACHE_DOCUMENTROOT=/var/www
#添加 supervisord 的配置文件,并复制配置文件到对应目录下面。
COPY ./supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY ./test.php /var/www/html/test.php
RUN /etc/init.d/mysql start \
&&mysql -e "grant all privileges on *.* to 'root'@'%' identified by 'xidian320';" \
&&mysql -e "grant all privileges on *.* to 'root'@'localhost' identified by 'xidian320';" \
&&mysql -u root -pxidian320 -e "show databases;"
EXPOSE 80
EXPOSE 3306
CMD ["/usr/bin/supervisord"]
4.创建镜像并测试
$ docker build -t lamp:test .
...
Successfully built 52b4bcf7cecc
Successfully tagged mysql:6.0
$ docker run -d -P lamp:test
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5f02483c5d57 lamp:test "/usr/bin/supervisord" 21 hours ago Up 21 hours 0.0.0.0:32809->80/tcp, 0.0.0.0:32808->3306/tcp blissful_shtern
测试apache:
在浏览器输入容器所在ip+端口号:http://192.168.8.95:32809/,可以看到apache初始页面。
测试mysql:
通过命令mysql -h 192.168.8.95 -u root -pxidian320 -P 32808可以连接到容器中的mysql。
测试php
在浏览器输入容器所在ip+端口号:http://192.168.8.95:32809/test.php,可以看到phpinfo页面。
5.上传镜像
详细请参考文章上传镜像