zoukankan      html  css  js  c++  java
  • docker学习系列(五):使用docker创建集成服务--lnmp

    在掌握了docker的基本命令之后,我也是想着去用docker做一点实际的配套环境,就拿自己最常用的lnmp环境来做测试。配套环境运行的顺序依次是mysql->php->nginx,至于为什么,在下面会解释。

    1.MySQL

    之后服务运行的镜像如无特别的提示,都是从官方拉取的镜像,对于小企业以及个人开发者,官方的镜像更为安全,省心省力。

    # 拉取镜像
    $ docker pull mysql
    # 运行MySQL
    $ docker run --name mysql -d 
            -p 3306:3306 
            -v /var/lib/mysql/:/var/lib/mysql/ 
            -e MYSQL_ROOT_PASSWORD=yourdbpw  
            MySQL 
    

    下面依次讲解上面运行各个参数

    --name: 指定的运行的容器的名字
    -d: 后台运行该容器
    -p: 宿主机与容器的端口的映射
    -v: 容器挂载到本地的目录映射
    -e: 指定运行容器的环境变量

    2.PHP

    拉取官方镜像php-fpm,根据自己需要的php版本去下载,但是官方的镜像有些php常用的包没有包含在内,因此我们需要使用dockerfile去重新构建一下,下面是在Dockerfile里面安装mysqli和pdo两个php扩展包。

    FROM php:7.1-fpm
    # Install modules
    RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
    RUN docker-php-ext-install pdo_mysql
    CMD ["php-fpm"]
    

    运行php-fpm

    docker run -d -p 9000:9000 
        --name php-fpm 
        --link mysql 
        -v /data/wwwroot/:/data/wwwroot/ 
        php-fpm
    

    注意参数当中的--link,这个参数在容器之间的连接十分有用,他会在当前容器的/etc/hosts里面添加一条域名解析,通过该域名可以连接到对应的容器,例如在上述的php-fpm里面,link到mysql,那么在php-fpm里面的php程序可以通过mysql字符串连接到刚刚运行的mysql容器,cat /etc/hosts就可以看到里面的解析记录了。

    172.17.0.2	mysql b41d2569c06d
    

    3.Nginx

    通过以下命令运行nginx,由于nginx需要通过127.0.0.1:9000端口去连接php-fpm来解析php文件,所以需要通过link来连接php-fpm。

    docker run -d -p 80:80  
    	--name nginx 
    	--link php-fpm 
    	-v /data/wwwroot/:/data/wwwroot/ 
    	nginx
    

    值得注意的是如果nginx解析文件的时候,如果请求的是静态文件,会直接返回该nginx容器里面的文件到客户端,如果请求的是php文件,他会把这个请求转发到php-fpm,然后php-fpm去本地去找php文件进行解析,也就是php-fpm容器本身的文件。

    依次运行上面的3个服务的启动命令之后就可以搭建我们常见的lnmp了。但是每次运行服务都需要运行上面的命令显得有点麻烦,我们可以使用docker-compose命令去进行集中管理。

    使用docker-compose

    只需要创建一个lnmp目录,然后在lnmp目录下创建docker-compose.yml输入下面命令即可管理集成化的环境。
    其实可以通过命令的名字就很容易知道各个指令的含义。

    version: 由于docker-compose是一个发展中的工具,很有可能每个版本的指令都有所不同,因此需要在开头声明docker-compose指令的适用版本。
    image: 指服务通过哪个镜像进行运行。
    depends_on: 这个指明了软件的依赖与哪个软件,其实也是声明了软件运行的顺序。

    version: '2'
    
    services:
        mysql:
            image: "mysql"
            ports:
                - "3306:3306"
            volumes:
                - /var/lib/mysql/:/var/lib/mysql/
            environment:
                MYSQL_ROOT_PASSWORD: password
                
        php-fpm:
            image: "php-fpm"
            depends_on:
                - mysql
            links:
                - mysql
            ports:
                - "9000:9000"
            volumes:
                - /data/wwwroot/:/data/wwwroot/
    
        nginx:
            image: "nginx"
            depends_on:
                - php-fpm
            links:
                - php-fpm
            volumes:
                - /data/wwwroot/:/data/wwwroot/
            ports:
                - "80:80"
        
    

    之后在这个lnmp目录下执行compose相关命令就可以控制。

    # 运行docker-compose服务
    $ docker-compose up -d
    # 停止服务
    $ docker-compose stop
    # 删除该服务相关的容器
    $ docker-compose rm
    # 运行已存在docker-compose的服务
    $ docker-compose start
    

    最后,我把自己的调优过的lnmp的docker-compose放到github上,有需要可以参考一下。

  • 相关阅读:
    Codeforces 691A Fashion in Berland
    HDU 5741 Helter Skelter
    HDU 5735 Born Slippy
    HDU 5739 Fantasia
    HDU 5738 Eureka
    HDU 5734 Acperience
    HDU 5742 It's All In The Mind
    POJ Euro Efficiency 1252
    AtCoder Beginner Contest 067 C
    AtCoder Beginner Contest 067 D
  • 原文地址:https://www.cnblogs.com/s-b-b/p/8624491.html
Copyright © 2011-2022 走看看