博客 > 术业专攻> 云计算> docker> docker学习笔记–制作lnmp镜像 2019年08月29日 11:23:41
有时候有一些PHP项目,可能稳定性并不是最高的指标,简单,便捷,好用才是,那么使用一个镜像来跑,似乎也是非常合适的,今天就来做一下lnmp的镜像,以便于后边使用。
此镜像基于lnmp一键安装包制作,制作过程如下。
首先启动一个centos-7.4的基础镜像,然后在镜像内把lnmp环境安装好。
$ docker run -itd --name eryajf registry.cn-hangzhou.aliyuncs.com/eryajf/centos:7.4
然后进入到镜像中,下载lnmp包,进行安装。
$ docker exec -it eryajf sh
$ wget http://175.6.32.4:88/soft/lnmp/lnmp1.4-full.tar.gz
$ tar xf lnmp1.4-full.tar.gz
$ cd lnmp1.4-full
$ ./install.sh
经过简单初始选项,就进入了安装阶段。
特别注意1:
这个地方MySQL的密码为root
,而且开启了远程登录,以便于后边映射出去之后方便远程登录。特别注意2:
我把这里的NGINX启动方式,改成了前台启动,以便于后边最终镜像的制作。等待一会儿,一个完整的lnmp环境就安装好了,然后精简一下当前镜像当中的内容,把不要的东东都删掉,然后把这个镜像保存成一个基础镜像。
$ docker commit eryajf lnmp:0.1
上边保存了一个 lnmp:0.1
的镜像,此时还不能作为一个常规镜像来使用,因为刚刚commit保存的镜像并不会保存应用的状态,因此我们需要在此基础之上,利用Dockerfile进行简单的改造。
$ mkdir lnmp
$ cd lnmp
Dockerfile:
$ cat Dockerfile
FROM lnmp:0.1
MAINTAINER eryajf
ADD run.sh /
EXPOSE 80
EXPOSE 3306
ENTRYPOINT [ "sh", "-c", "/run.sh" ]
run.sh:
$ cat run.sh
#!/bin/bash
#start php
/usr/local/php/sbin/php-fpm
#start mysql
/etc/init.d/mysql start
#start nginx
/usr/local/nginx/sbin/nginx
然后就可以构建最终的镜像了。
$ docker bilid -t lnmp:1.0 .
这样,就制作好了最终的镜像了。
因为我们在Dockerfile当中定义了两个端口,那么直接使用如下方式启动,系统会自动给我们映射两个随机的端口。
$ docker run -itd --name lnmp -P lnmp:1.0
然后可以看一眼映射的随机端口。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5ba0968e8b6b lnmp:1.0 "sh -c /run.sh" 22 minutes ago Up 22 minutes 0.0.0.0:32771->80/tcp, 0.0.0.0:32770->3306/tcp lnmp
这个时候访问一下localhost:32771
应该就能看到NGINX的欢迎页面了。
准备好程序所需要的各种包以及配置。
$ ls
Dockerfile nginx.conf run.sh typecho
Dockerfile
$ cat Dockerfile
FROM registry.cn-hangzhou.aliyuncs.com/eryajf/lnmp:1.4
MAINTAINER eryajf
COPY typecho/ /home/wwwroot/typecho
COPY nginx.conf /usr/local/nginx/conf
ADD run.sh /
EXPOSE 80
EXPOSE 3306
ENTRYPOINT [ "sh", "-c", "/run.sh" ]
nginx.conf
user www www;
worker_processes auto;
error_log /home/wwwlogs/nginx_error.log crit;
pid /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;
daemon off;
events
{
use epoll;
worker_connections 51200;
multi_accept on;
}
http
{
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 50m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";
#limit_conn_zone $binary_remote_addr zone=perip:10m;
##If enable limit_conn_zone,add "limit_conn perip 10;" to server section.
server_tokens off;
access_log off;
server
{
listen 80 default_server;
#listen [::]:80 default_server ipv6only=on;
server_name _;
index index.html index.htm index.php default.html default.htm default.php;
root /home/wwwroot/typecho;
location ~ .*\.php(\/.*)*$ {
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
include pathinfo.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 30d;
}
location ~ .*\.(js|css)?$ {
expires 12h;
}
}
}
run.sh
$ cat run.sh
#!/bin/bash
chmod -R 777 /home/wwwroot/typecho
#start php
/usr/local/php/sbin/php-fpm
#start mysql
/etc/init.d/mysql start
#start nginx
/usr/local/nginx/sbin/nginx
$ docker build -t daohang:1.0 .
构建完成之后,就可以启动了。
$ docker run -itd --name daohang -p 80:80 -p 3306:3306 daohang:1.0
启动之后,访问 localhost/install.php
执行安装的步骤,当然,安装的时候,还需要连接上数据库创建一下数据库,然后就能使用了。关于后续的数据库持久化等问题,可自行思考解决。
为了保证服务重启数据不丢失,需要进行一定的持久化操作,目前最重要的内容有两部分,其一是数据库,其二是应用包。
那么在刚刚已经启动的基础上,可以先把数据拷贝出来一份,然后挂载到宿主机,就实现了数据的持久化了。
$ docker cp daohang:/usr/local/mysql/var /data/daohang/data
$ docker cp daohang:/home/wwwroot/typecho /data/daohang/typecho
然后重新以挂载方式启动服务:
$ docker run -itd --name daohang -p 80:80 -p 3306:3306 -v /data/daohang/data:/usr/local/mysql/var -v /data/daohang/typecho:/home/wwwroot/typecho --privileged daohang:1.0
--privileged
表示容器内使用root来运行,如果不加这条选项,那么挂载后的MySQL启动将会报错,所以加上这条配置。
如此启动,就能够实现数据的持久化了。
如上过程中涉及到的两个镜像,我都已经打包好上传到了公网,有需要的,可以下载使用。
阿里云地址:
$ docker pull registry.cn-hangzhou.aliyuncs.com/eryajf/lnmp:1.4
$ docker pull registry.cn-hangzhou.aliyuncs.com/eryajf/typecho:1.0
dockerhub地址:
$ docker pull eryajf/lnmp:1.4
$ docker pull eryajf/typecho:1.0
© 2018 www.qingketang.net 鄂ICP备18027844号-1
武汉快勤科技有限公司 13554402156 武汉市东湖新技术开发区关山二路特一号国际企业中心6幢4层7号
扫码关注,全站教程免费播放
订单金额:
支付金额:
支付方式: