部署自己的PHP代码至docker环境

上一篇文章安装了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

发表评论

邮箱地址不会被公开。 必填项已用*标注