Docker--------docker-compose LNMP实战

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介:

1. 背景

   dockerfile 与 docker-compose 相关内容在前面文章已经详述,这里就不再一一说明。


2. 环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@docker ~] # cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core)
  
[root@docker ~] # uname -r
3.10.0-327.36.3.el7.x86_64
 
[root@docker ~] # docker version
Client:
  Version:         1.12.6
  API version:     1.24
  Package version: docker-1.12.6-28.git1398f24.el7.centos.x86_64
  Go version:      go1.7.4
  Git commit:      1398f24 /1 .12.6
  Built:           Fri May 26 17:28:18 2017
  OS /Arch :         linux /amd64
 
[root@docker ~] # docker-compose version
docker-compose version 1.14.0, build c7bdf9e
docker-py version: 2.3.0
CPython version: 2.7.5
OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
 
[root@docker ~] # ifconfig eth0 | sed -n 2p | awk '{print $2}'
192.168.60.150


3. 制作镜像

  * 构建php dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#Php-fpm
#Version 1.0.1
#Author lisea
 
#Base Image
FROM centos:7
 
#Maintainer
MAINTAINER lisea cnlisea@126.com
 
#Commands
RUN rpm -ivh http: //mirrors .aliyun.com /epel/epel-release-latest-7 .noarch.rpm
RUN yum  install  php-fpm -y
RUN  sed  -i -e  's\listen = 127.0.0.1:9000\listen = 0.0.0.0:9000\g'  -e 's\listen.allo
wed_clients = 127.0.0.1\;listen.allowed_clients = 127.0.0.1\g'  /etc/php-fpm .d /www .c
onf
RUN  sed  -i  's\;daemonize = yes\daemonize = no\g'  /etc/php-fpm .conf
 
EXPOSE 9000
CMD [ "php-fpm" ]


  * 构建 php 镜像

1
[root@docker php-fpm] # docker build -t lisea/php-fpm:v1.0.1 .


   * 准备nginx配置nginx.conf文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
user nginx nginx;
worker_processes auto;
daemon off;
 
error_log  /var/log/error_nginx .log crit;
pid  /var/run/nginx .pid;
worker_rlimit_nofile 102400;
 
events {
   use epoll;
   worker_connections 102400;
   multi_accept on;
}
 
http {
   include mime.types;
   default_type application /octet-stream ;
   server_names_hash_bucket_size 128;
   client_header_buffer_size 4k;
   large_client_header_buffers 4 32k;
   client_max_body_size 1024m;
   client_body_buffer_size 10m;
   sendfile on;
   tcp_nopush on;
   keepalive_timeout 60;
   server_tokens off;
   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 128k;
   fastcgi_intercept_errors on;
 
   #Gzip Compression
   gzip  on;
   gzip_buffers 16 8k;
   gzip_comp_level 6;
   gzip_http_version 1.1;
   gzip_min_length 256;
   gzip_proxied any;
   gzip_vary on;
   gzip_types
     text /xml  application /xml  application /atom +xml application /rss +xml application /xhtml +xml image /svg +xml
     text /javascript  application /javascript  application /x-javascript
     text /x-json  application /json  application /x-web-app-manifest +json
     text /css  text /plain  text /x-component
     font /opentype  application /x-font-ttf  application /vnd .ms-fontobject
     image /x-icon ;
   gzip_disable  "MSIE [1-6]\.(?!.*SV1)" ;
 
   #If you have a lot of static files to serve through Nginx then caching of the files' metadata (not the actual files' contents) can save some latency.
   open_file_cache max=102400 inactive=20s;
   open_file_cache_valid 30s;
   open_file_cache_min_uses 1;
   open_file_cache_errors on;
 
########################## vhost #############################
   include conf.d/*.conf;
}


   * 准备nginx配置php服务相关 nginx_localhost_80.conf 文件

     php:9000是通过后面的--link 容器之间互联指定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
server {
   listen 80;
   server_name localhost;
   root  /data/www ;
   index index.html index.htm index.php;
 
   location ~ [^/]\.php(/|$) {
     fastcgi_pass php:9000;
     #fastcgi_pass unix:/usr/local/php-fastcgi/php-fpm.sock;
     fastcgi_index index.php;
     include fastcgi.conf;
   }
   location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
     expires 30d;
     access_log off;
   }
   location ~ .*\.(js|css)?$ {
     expires 7d;
     access_log off;
   }
   location ~ /\.ht {
     deny all;
   }
}


   * 构建 nginx dockerfile 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#Nginx
#Version 1.0.1
#Author lisea
 
#Base Image
FROM centos:7
 
#Maintainer
MAINTAINER lisea cnlisea@126.com
 
#Commands
RUN rpm -ivh http: //mirrors .aliyun.com /epel/epel-release-latest-7 .noarch.rpm
RUN yum  install  nginx -y
ADD nginx.conf  /etc/nginx/nginx .conf
ADD nginx_localhost_80.conf  /etc/nginx/conf .d /localhost_80 .conf
 
EXPOSE 80
CMD [ "nginx" ]


  * 构建 nginx 镜像

1
[root@docker nginx] # docker build -t lisea/nginx:v1.0.1 .


   * 准备mariadb 启动脚本 startup.sh

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
if  [ ! -f  /var/lib/mysql/ibdata1  ];  then
         mysql_install_db
         chown  mysql.mysql -R  /var/lib/mysql
         /usr/bin/mysqld_safe  &
         sleep  10s
         mysql -e  "grant all privileges on *.* to 'root'@'%' identified by '123456'; FLUSH PRIVILEGES;"
         kill  -s TERM ` ps  aux |  grep  mysqld |  grep  - v  'grep'  awk  '{print $2}' `
         sleep  10s
fi
/usr/bin/mysqld_safe

 

  * 构建mariadb(mysql) dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#Mariadb
#Version 1.0.1
#Author lisea
 
#Base Image
FROM centos:7
 
#Maintainer
MAINTAINER lisea cnlisea@126.com
 
#Commands
RUN rpm -ivh http: //mirrors .aliyun.com /epel/epel-release-latest-7 .noarch.rpm
RUN yum  install  mariadb-server mariadb -y
ADD startup.sh  /opt/startup .sh
RUN  chmod  +x  /opt/startup .sh
 
EXPOSE 3306
CMD [ "/bin/bash" , "/opt/startup.sh" ]


   * 构建 mysql 镜像

1
[root@docker mysql] # docker build -t lisea/mariadb:v1.0.1 .


   * 查看所有镜像

1
2
3
4
5
6
[root@docker lnmp] # docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
lisea /mariadb        v1.0.1              5925448a6fb6        3 minutes ago       493.6 MB
lisea /nginx          v1.0.1              f1aba93ce33d        52 minutes ago      391.4 MB
lisea /php-fpm        v1.0.1              d205ea9fcdba        About an hour ago   350.1 MB
docker.io /centos     7                   3bee3060bfc8        2 weeks ago         192.5 MB


4. 编写docker-compose

   * docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
version:  "2"
services:
   lnmp_nginx:
     image: lisea /nginx :v1.0.1
     ports:
       "8080:80"
     links:
       "lnmp_php:php"
     volumes:
       /data/www : /data/www
   lnmp_php:
     image: lisea /php-fpm :v1.0.1
     volumes:
       /data/www : /data/www
   lnmp_mariadb:
     image: lisea /mariadb :v1.0.1
     ports:
       "3306:3306"
     volumes:
       /data/mariadb : /var/lib/mysql


   * 开始构建并运行 -d 指定后台运行

1
2
3
4
5
6
7
8
[root@docker lnmp] # docker-compose up -d
Creating network  "lnmp_default"  with the default driver
Creating lnmp_lnmp_php_1 ... 
Creating lnmp_lnmp_mysql_1 ... 
Creating lnmp_lnmp_php_1
Creating lnmp_lnmp_php_1 ...  done
Creating lnmp_lnmp_mariadb_1 ...  done
Creating lnmp_lnmp_nginx_1 ...  done


   * 查看端口监听状态

1
2
3
4
5
6
7
[root@docker lnmp] # netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID /Program  name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      975 /sshd               
tcp6       0      0 :::3306                 :::*                    LISTEN      15138 /docker-proxy- 
tcp6       0      0 :::8080                 :::*                    LISTEN      15320 /docker-proxy- 
tcp6       0      0 :::22                   :::*                    LISTEN      975 /sshd


5. 测试lnmp环境

  * 路径切换到nginx web目录 [/data/www]

1
[root@docker lnmp] # cd /data/www/


   * index.php

1
2
3
<?php
   phpinfo();
?>


   * 浏览器访问 ip:8080/index.php

wKioL1lJ55OT8mrPAADxZWlSBbw448.jpg


6. 总结



以需求驱动技术,技术本身没有优略之分,只有业务之分。







      本文转自asd1123509133 51CTO博客,原文链接:http://blog.51cto.com/lisea/1940480,如需转载请自行联系原作者



相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
3月前
|
运维 监控 数据可视化
容器化部署革命:Docker实战指南
容器化部署革命:Docker实战指南
|
2月前
|
供应链 测试技术 开发者
用 Docker 轻松部署 ERPNext 15:多场景实战指南
ERPNext 15 是一款功能全面的开源企业资源规划系统,结合 Docker 容器化部署,具备高效、灵活、低成本等优势。适用于小微企业数字化起步、多分支机构协同办公、开发者测试环境搭建、短期项目管理及企业内部培训等多种场景。模块化设计支持按需扩展,满足不同规模企业需求,是实现高效企业管理的理想选择。
用 Docker 轻松部署 ERPNext 15:多场景实战指南
|
3月前
|
安全 Java Docker
Docker 部署 Java 应用实战指南与长尾优化方案
本文详细介绍了Docker容器化部署Java应用的最佳实践。首先阐述了采用多阶段构建和精简JRE的镜像优化技术,可将镜像体积减少60%。其次讲解了资源配置、健康检查、启动优化等容器化关键配置,并演示了Spring Boot微服务的多模块构建与Docker Compose编排方案。最后深入探讨了Kubernetes生产部署、监控日志集成、灰度发布策略以及性能调优和安全加固措施,为Java应用的容器化部署提供了完整的解决方案指南。文章还包含大量可落地的代码示例,涵盖从基础到高级的生产环境实践。
160 3
|
4月前
|
关系型数据库 MySQL 数据库
Docker Compose-实战
Docker Compose-实战
147 5
|
5月前
|
Ubuntu Linux Docker
Docker容器的实战讲解
这只是Docker的冰山一角,但是我希望这个简单的例子能帮助你理解Docker的基本概念和使用方法。Docker是一个强大的工具,它可以帮助你更有效地开发、部署和运行应用。
179 27
|
6月前
|
关系型数据库 MySQL 应用服务中间件
Linux 手动安装快速部署 LNMP 环境实战
本文详细记录了在阿里云ECS上手动搭建LNMP环境的过程,系统选用Ubuntu 24.04。主要内容包括:1) 使用`apt`安装Nginx和MySQL,并更新软件源;2) 编译安装PHP 8.4.5,配置PHP-FPM及环境路径;3) 配置MySQL root用户密码;4) 调整Nginx支持PHP解析并测试整体环境。通过此过程,重现手动配置服务器的细节,帮助熟悉各组件的安装与协同工作。
362 23
|
9月前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
223 3
实战~如何组织一个多容器项目docker-compose
|
9月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
892 7
|
10月前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
290 0