Docker Compose 一键部署LNMP

Docker Compose 一键部署LNMP

目录结构

[
复制代码

](javascript:void(0); "复制代码")

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">[root@localhost ~]# tree compose_lnmp/
compose_lnmp/ ├── docker-compose.yml
├── mysql
│ ├── conf
│ │ └── my.cnf
│ └── data
├── nginx
│ ├── Dockerfile
│ ├── nginx-1.12.1.tar.gz
│ └── nginx.conf
├── php
│ ├── Dockerfile
│ ├── php-5.6.31.tar.gz
│ └── php.ini
└── wwwroot
└── test.php</pre>

[
复制代码

](javascript:void(0); "复制代码")


一、创建Nginx Compose

1.1、创建compose目录作为LNMP的项目管理目录

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">mkdir compose_lnmp
cd compose_lnmp/</pre>

1.2、创建nginx管理目录

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">mkdir nginx
cd nginx</pre>

1.3、将nginx源码包下载到本地

1.4、创建Dockerfile文件

vim Dockerfile

[
复制代码

](javascript:void(0); "复制代码")

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"># 指定镜像
FROM centos:6

指定管理员

MAINTAINER xiangsikai # 执行命令安装编译库文件
RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel # 添加解压nginx包到/tmp目录下
ADD nginx-1.12.1.tar.gz /tmp # 进入目录进行编译安装
RUN cd /tmp/nginx-1.12.1 && ./configure --prefix=/usr/local/nginx && make -j 2 && make install # 删除容器内置配置文件
RUN rm -f /usr/local/nginx/conf/nginx.conf # 复制本地配置文件到容器内
COPY nginx.conf /usr/local/nginx/conf # 声明暴露端口
EXPOSE 80

启动容器Nginx服务,指定全局命令daemon off保证服务在前台运行不会关闭

CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]</pre>

[
复制代码

](javascript:void(0); "复制代码")

1.5、创建nginx.conf配置文件

vim nginx.conf

image

[
复制代码

](javascript:void(0); "复制代码")

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">user root;
worker_processes auto;

error_log logs/error.log info;

pid logs/nginx.pid;

events {
use epoll;
}

http {

include       mime.types;
default_type  application/octet-stream;

log_format  main '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

access_log logs/access.log main;
sendfile        on;
keepalive_timeout 65;

server {
    listen 80;
    server_name localhost;
    root html;
    index index.html index.php;

    location ~ \.php$ {
        root html;
        fastcgi_pass php-cgi:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
        include fastcgi_params;
    }
}

}</pre>

[
复制代码

](javascript:void(0); "复制代码")


二、创建Mysql Compose

2.1、创建Mysql管理目录

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">mkdir mysql
cd mysql
mkdir conf
cd conf</pre>

2.2、创建mysql配置文件

vim my.cnf

image

[
复制代码

](javascript:void(0); "复制代码")

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">[mysqld]
user=mysql
port=3306 datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
pid-file=/var/run/mysqld/mysqld.pid
log_error=/var/log/mysql/error.log
character_set_server = utf8
max_connections=3600</pre>

[
复制代码

](javascript:void(0); "复制代码")


三、创建PHP Compose

3.1、创建Mysql管理目录

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">mkdir php
cd php</pre>

3.2、下载php源码包

3.3、创建Dockerfile文件

vim Dockerfile

[
复制代码

](javascript:void(0); "复制代码")

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"># 指定镜像
FROM centos:6

指定系统管理员

MAINTAINER xiangsikai # 安装编译库
RUN yum install -y gcc gcc-c++ gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel openssl-devel # 下载压缩包解压到指定目录
ADD php-5.6.31.tar.gz /tmp/

编译安装php,执行相关命令

RUN cd /tmp/php-5.6.31 &&
./configure --prefix=/usr/local/php \ --with-config-file-path=/usr/local/php/etc \ --with-mysql --with-mysqli \ --with-openssl --with-zlib --with-curl --with-gd \ --with-jpeg-dir --with-png-dir --with-iconv \ --enable-fpm --enable-zip --enable-mbstring &&
make -j 4 && make install &&
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf &&
sed -i "s/127.0.0.1/0.0.0.0/" /usr/local/php/etc/php-fpm.conf &&
cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm &&
chmod +x /etc/init.d/php-fpm # 复制本地配置文件到容器内
COPY php.ini /usr/local/php/etc # 声明暴露端口
EXPOSE 9000

启动php

CMD /etc/init.d/php-fpm start && tail -F /var/log/messages</pre>

[
复制代码

](javascript:void(0); "复制代码")

3.4、创建php.ini文件

vim php.ini

image

[
复制代码

](javascript:void(0); "复制代码")

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">[PHP]
engine = On
short_open_tag = Off
asp_tags = Off
precision = 14 output_buffering = 4096 zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func = serialize_precision = 17 disable_functions = disable_classes = zend.enable_gc = On
expose_php = On
max_execution_time = 30 max_input_time = 60 memory_limit = 128M
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = Off
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024 ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
html_errors = On
variables_order = "GPCS" request_order = "GP" register_argc_argv = Off
auto_globals_jit = On
post_max_size = 8M
auto_prepend_file = auto_append_file = default_mimetype = "text/html" doc_root = user_dir = enable_dl = Off
file_uploads = On
upload_max_filesize = 2M
max_file_uploads = 20 allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60 [CLI Server]
cli_server.color = On
[Date]
date.timezone = Asia/Shanghai
[filter]
[iconv]
[intl]
[sqlite]
[sqlite3]
[Pcre]
[Pdo]
[Pdo_mysql]
pdo_mysql.cache_size = 2000 pdo_mysql.default_socket= [Phar]
[mail function]
SMTP = localhost
smtp_port = 25 sendmail_path = /usr/sbin/sendmail -t -i
mail.add_x_header = On
[SQL]
sql.safe_mode = Off
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1 odbc.max_links = -1 odbc.defaultlrl = 4096 odbc.defaultbinmode = 1 [Interbase]
ibase.allow_persistent = 1 ibase.max_persistent = -1 ibase.max_links = -1 ibase.timestampformat = "%Y-%m-%d %H:%M:%S" ibase.dateformat = "%Y-%m-%d" ibase.timeformat = "%H:%M:%S" [MySQL]
mysql.allow_local_infile = On
mysql.allow_persistent = On
mysql.cache_size = 2000 mysql.max_persistent = -1 mysql.max_links = -1 mysql.default_port = mysql.default_socket = mysql.default_host = mysql.default_user = mysql.default_password = mysql.connect_timeout = 60 mysql.trace_mode = Off
[MySQLi]
mysqli.max_persistent = -1 mysqli.allow_persistent = On
mysqli.max_links = -1 mysqli.cache_size = 2000 mysqli.default_port = 3306 mysqli.default_socket = mysqli.default_host = mysqli.default_user = mysqli.default_pw = mysqli.reconnect = Off
[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = Off
[OCI8]
[PostgreSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1 pgsql.max_links = -1 pgsql.ignore_notice = 0
pgsql.log_notice = 0
[Sybase-CT]
sybct.allow_persistent = On
sybct.max_persistent = -1 sybct.max_links = -1 sybct.min_server_severity = 10 sybct.min_client_severity = 10 [bcmath]
bcmath.scale = 0
[browscap]
[Session]
session.save_handler = files
session.use_cookies = 1 session.use_only_cookies = 1 session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = / session.cookie_domain = session.cookie_httponly = session.serialize_handler = php
session.gc_probability = 1 session.gc_divisor = 1000 session.gc_maxlifetime = 1440 session.bug_compat_42 = Off
session.bug_compat_warn = Off
session.referer_check = session.cache_limiter = nocache
session.cache_expire = 180 session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 5 url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" [MSSQL]
mssql.allow_persistent = On
mssql.max_persistent = -1 mssql.max_links = -1 mssql.min_error_severity = 10 mssql.min_message_severity = 10 mssql.compatability_mode = Off
mssql.secure_connection = Off
[Assertion]
[mbstring]
[gd]
[exif]
[Tidy]
tidy.clean_output = Off
[soap]
soap.wsdl_cache_enabled=1 soap.wsdl_cache_dir="/tmp" soap.wsdl_cache_ttl=86400 soap.wsdl_cache_limit = 5 [sysvshm]
[ldap]
ldap.max_links = -1 [mcrypt]
[dba]</pre>

[
复制代码

](javascript:void(0); "复制代码")


四、创建DockerCompose文件

4.1 进入compose_lnmp目录下创建DockerCompose文件

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">[root@localhost compose_lnmp]# ls
mysql nginx php</pre>

vim docker-compose.yml

[
复制代码

](javascript:void(0); "复制代码")

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"># 指定服务版本号
version: '3'

服务

services: # 服务名称
nginx: # 指定服务容器名字
hostname: nginx # 构建
build: # 指定目录上下文构建镜像
context: ./nginx # 指定dockerfile文件名称
dockerfile: Dockerfile # 映射数组级的端口
ports: - "80:80"

映射php文件服务别名

links: - "php:php-cgi"

映射服务数据卷路径

volumes: - ./wwwroot:/usr/local/nginx/html # 服务名称
php: # 指定服务容器名字
hostname: php # 构建
build: ./php # 映射mysql服务别名
links: - mysql:mysql-db # 映射服务数据卷路径
volumes: - ./wwwroot:/usr/local/nginx/html # 服务名称
mysql: # 指定服务容器名字
hostname: mysql # 指定使用官方mysql5.6版本
image: mysql:5.6

映射端口

ports: - "3306:3306"

映射服务数据卷路径

volumes: - ./mysql/conf:/etc/mysql/conf.d - ./mysql/data:/var/lib/mysql # 指定数据库变量
environment: # 设置数据库密码
MYSQL_ROOT_PASSWORD: 123456

添加user用户

MYSQL_USER: user # 设置user用户密码
MYSQL_PASSWORD: user123</pre>

[
复制代码

](javascript:void(0); "复制代码")

4.2、执行docker Compose一键部署LNMP

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"># 需要在yml文件同级目录下执行此命令
docker-compose up</pre>

4.3、进入网站目录创建php测试页并进行测试

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">cd wwwroot/</pre>

[
复制代码

](javascript:void(0); "复制代码")

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">vim test.php #-----------------
<?php phpinfo()?>

-----------------</pre>

[
复制代码

](javascript:void(0); "复制代码")

4.4、测试:192.168.1.77/test.php

image
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335