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

1. 背景

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

2. 环境

[[email protected] ~]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core)
 
[[email protected] ~]# uname -r
3.10.0-327.36.3.el7.x86_64

[[email protected] ~]# 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

[[email protected] ~]# 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

[[email protected] ~]# ifconfig eth0 | sed -n 2p | awk ‘{print $2}‘
192.168.60.150

3. 制作镜像

  * 构建php dockerfile

#Php-fpm
#Version 1.0.1
#Author lisea

#Base Image
FROM centos:7

#Maintainer
MAINTAINER lisea [email protected]

#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 镜像

[[email protected] php-fpm]# docker build -t lisea/php-fpm:v1.0.1 .

* 准备nginx配置nginx.conf文件

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 容器之间互联指定

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 文件

#Nginx
#Version 1.0.1
#Author lisea

#Base Image
FROM centos:7

#Maintainer
MAINTAINER lisea [email protected]

#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 镜像

[[email protected] nginx]# docker build -t lisea/nginx:v1.0.1 .

* 准备mariadb 启动脚本 startup.sh

#!/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

#Mariadb
#Version 1.0.1
#Author lisea

#Base Image
FROM centos:7

#Maintainer
MAINTAINER lisea [email protected]

#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 镜像

[[email protected] mysql]# docker build -t lisea/mariadb:v1.0.1 .

* 查看所有镜像

[[email protected] 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

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 指定后台运行

[[email protected] 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

* 查看端口监听状态

[[email protected] 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]

[[email protected] lnmp]# cd /data/www/

* index.php

<?php
  phpinfo();
?>

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


6. 总结

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

时间: 2024-10-14 09:33:38

Docker--------docker-compose LNMP实战的相关文章

《Spring Cloud与Docker微服务架构实战》配套代码

不才写了本使用Spring Cloud玩转微服务架构的书,书名是<Spring Cloud与Docker微服务架构实战> - 周立,已于2017-01-12交稿.不少朋友想先看看源码,现将代码放出. 本次放出的代码: 共计70+个DEMO 覆盖Eureka.Ribbon.Feign.Hystrix.Zuul.Spring Cloud Config.Spring Cloud Bus.Spring Cloud Sleuth.Docker.Docker Compose等. 1-11章代码地址: ht

《Docker技术入门与实战第3版2018版》高清中文PDF下载

<Docker技术入门与实战第3版2018版>高清中文PDF下载资料简介:本书从Docker基本原理开始,深入浅出地讲解Docker的构建与操作,内容系统全面,可帮助开发人员.运维人员快速部署Docker应用.本书分为四大部分:基础入门.实战案例.进阶技能.开源项目,*部分(第1-8章)介绍Docker与虚拟化技术的基本概念,包括安装.镜像.容器.仓库.数据卷.端口映射等:第二部分(第9-16章)通过案例介绍Docker的应用方法,包括与各种操作系统平台.SSH服务的镜像.Web服务器与应用.

Docker技术入门与实战下载 &#182772;

下载地址: http://www.gqylpy.com/di/8 <Docker技术入门与实战.pdf>PDF高清完整版-下载 本书从Docker基本原理开始,深入浅出地讲解Docker的构建与操作,内容系统全面,可帮助开发人员.运维人员快速部署Docker应用.本书分为四大部分:基础入门.实战案例.进阶技能.开源项目,部分(第1-8章)介绍Docker与虚拟化技术的基本概念,包括安装.镜像.容器.仓库.数据卷.端口映射等:第二部分(第9-16章)通过案例介绍Docker的应用方法,包括与各种

《Docker技术入门与实战》pdf

下载地址:网盘下载 内容简介  · · · · · · [编辑推荐] <Docker技术入门与实战>是中国首部docker著作,一线Docker先驱实战经验结晶,来自IBM和新浪等多位技术专家联袂推荐! <Docker技术入门与实战>结合企业生产环境,深入浅出地剖析 Docker 的核心概念.应用技巧.实现原理以及生态环境,为解决各类问题提供了有价值的参考. [内容简介] 在云计算时代,开发者将应用转移到云上已经解决了硬件管理的问题,然而软件配置和管理相关的问题依然存在.Docke

docker-9 supervisord 参考docker从入门到实战

参考docker从入门到实战 使用 Supervisor 来管理进程 Docker 容器在启动的时候开启单个进程,比如,一个 ssh 或者 apache 的 daemon 服务.但我们经常需要在一个机器上开启多个服务,这可以有很多方法,最简单的就是把多个启动命令放到一个启动脚本里面,启动的时候直接启动这个脚本,另外就是安装进程管理工具. 本小节将使用进程管理工具 supervisor 来管理容器中的多个进程.使用 Supervisor 可以更好的控制.管理.重启我们希望运行的进程.在这里我们演示

Docker之Compose服务编排

Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景. 说明:Compose是Fig的升级版,Fig已经不再维护.Compose向下兼容Fig,所有fig.yml只需要更名为docker-compose.yml即可被Compose使用. 服务编排工具使得Docker应用管理更为方便快捷. Compose网站:https://docs.docker.com/compos

赞一个 kindle电子书有最新的计算机图书可买了【Docker技术入门与实战】

最近对docker这个比较感兴趣,找一个比较完整的书籍看看,在z.cn上找到了电子书,jd dangdang看来要加油啊 Docker技术入门与实战 [Kindle电子书] ~ 杨保华 戴王剑 曹亚仑 (作者) http://www.amazon.cn/Docker技术入门与实战-杨保华-戴王剑-曹亚仑/dp/B00SMJ0VFA/ref=sr_1_2?s=digital-text&ie=UTF8&qid=1435217727&sr=1-2&keywords=docker

(转)Docker之Compose服务编排

转自:https://www.cnblogs.com/52fhy/p/5991344.html Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景. 说明:Compose是Fig的升级版,Fig已经不再维护.Compose向下兼容Fig,所有fig.yml只需要更名为docker-compose.yml即可被Compose使用. 服务编排工具使得Docker应用管理

小白学Docker之Compose

承接上篇文章:小白学Docker之基础篇,自学网站来源于https://docs.docker.com/get-started 概念 Compose是一个编排和运行多容器Docker应用的工具,主要是通过一个YAML文件进行服务配置. 使用Compose主要有三步: 在每个应用环境中配置一个Dockerfile,定义单个应用的镜像 使用docker-compose.yml来组装各个应用 运行docker-compose up命令来运行整个应用 一个基本的docker-compose.yml可能长

Docker从入门到实战(二)

一步一步走,写小白都能看懂的文章,将持续更新中,敬请期待! Docker从入门到实战(二) 一:什么是docker Docker是一个开源的应用容器引擎,开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到主流的Linux.macOS.Windows机器上,实现虚拟化. Docker用Go语言写成,是一个重新定义了程序开发测试.交付和部署过程的开放平台. 二:Docker与虚拟机的区别 虚拟机和Docker最明显的差别是虚拟机需要安装操作系统(安装Guest OS)才能执行应用程序