上一篇文章安装了LAMP环境,这次在上一篇的基础上,将自己的代码部署在docker环境中。
1、将自己的代码上传至github或者其他代码托管网站上。
2、新建一个目录,并在这个目录中新建一个Dockfile文件,输入以下内容(将https://github.com/username/customapp.git替换为自己的项目git地址):
FROM tutum/lamp:latest
RUN rm -fr /app && git clone https://github.com/username/customapp.git /app
RUN chown -R www-data:www-data /app
EXPOSE 80 3306
CMD ["/run.sh"]
3、构建镜像,在当前目录下运行以下命令(username/my-lamp-app为镜像的名字,可以任意取):
docker build -t username/my-lamp-app .
构建完成后,通过docker images可以查看。
4、运行镜像
docker run -d -p 80:80 -p 3306:3306 username/my-lamp-app
运行后即可以通过输入ip地址来访问情况。
5、为了便于查找错误,可以先开启PHP的报错,在php入口文件中添加:
ini_set('display_errors','On');
error_reporting(E_ALL);
6、如果修改过项目并重新提交到了git,希望重新打包镜像时,能重新下载git上的项目,那么需要运行如下命令:
docker build --no-cache -t username/my-lamp-app .
7、如何进入正在运行的容器,为了方便在容器中调试程序,有时候需要进入运行的容器中
7.1 安装nsenter
$ cd /tmp;
$ curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar -zxf-; cd util-linux-2.24;
$ ./configure --without-ncurses
$ make nsenter && sudo cp nsenter /usr/local/bin
7.2 查看当前正在运行的容器id
docker ps
7.3 为了连接到容器,你还需要找到容器的第一个进程的PID(将container-id替换为7.2中查看的容器id)。
docker inspect --format "{{ .State.Pid }}" container-id
7.4 连接到容器(将$PID替换为7.3中的进程PID)
nsenter --target $PID --mount --uts --ipc --net --pid
8 如何在运行容器前,修改apache配置? 例如修改apache默认的监听端口,可以这么做
8.1 修改网站监听的端口。在Dockfile的同级目录下,新建一个apache_conf文件(可以从tutum/lamp里面去拷贝),内容如下:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
# To make wordpress .htaccess work
AllowOverride FileInfo
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
#
# Set HTTPS environment variable if we came in over secure
# channel.
SetEnvIf x-forwarded-proto https HTTPS=on
</VirtualHost>
现在只需要修改这个文件,例如我想把网站端口由默认的80改为8080,那么只需要更改VirtualHost 后面的80为8080即可。
8.2 修改apache监听端口
在Dockfile的同级目录下,新建一个ports_conf文件,内容如下:
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf
Listen 80
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
将Listen 后面的80改为其他端口数字即可。
8.3 修改Dockfile文件
FROM dedemao/lamp:latest
#删除原有的配置文件
RUN rm -rf /etc/apache2/sites-available/000-default.conf && rm -rf /etc/apache2/ports_conf
#增加新的配置文件
ADD apache_conf /etc/apache2/sites-available/000-default.conf
ADD ports_conf /etc/apache2/ports.conf
RUN rm -fr /app && git clone https://code.aliyun.com/884358/convert.git /app
RUN chown -R www-data:www-data /app
EXPOSE 9100
CMD ["/run.sh"]
参考1:http://www.oschina.net/translate/enter-docker-container