zoukankan      html  css  js  c++  java
  • docker:搭建lamp应用

    (原文http://blog.csdn.net/smallfish1983/article/details/40108999?utm_source=tuicool)

    LAMP 指的 Linux(操作系统)、ApacheHTTP 服务器,MySQL(有时也指MariaDB,数据库软件) 和 PHP(有时也是指 Perl 或 Python) 的第一个字母,一般用来建立 web 服务器。 虽然这些开放源代码程序本身并不是专门设计成同另几个程序一起工作的,但由于它们的免费和开源,这个组合开始流行(大多数Linux发行版本捆绑了这些软 件)。当一起使用的时候,它们表现的像一个具有活力的解决方案包。下面介绍如何使用docker来搭建一个包含lamp组件的容器:

    从网站上 pull 一个 lamp 镜像

    官方的仓里没有标 OFFICIAL 的 lamp 的镜像,不过 「tutum」的镜像做的非常好,我们可以直接 pull 他们的镜像来完成我们的操作。

    core@localhost ~/base $ docker pull tutum/lamp
    Pulling repository tutum/lamp
    4b32789c7d66: Download complete
    ...
    

    使用默认方式启动 lamp 容器

    core@localhost ~/base $ docker run -d -p 8080:80 -p 3306:3306 tutum/lamp
    #启动应用并映射 8080 端口和 3306 端口
    0ee00c97a5cdefb985baf826c16723f333aa5edddee4072a5107c724ad09f10d
    core@localhost ~/base $ docker ps
    CONTAINER ID        IMAGE                              COMMAND                CREATED             STATUS              PORTS                                          NAMES
    0ee00c97a5cd        tutum/lamp:latest                  "/run.sh"              3 seconds ago       Up 2 seconds        0.0.0.0:3306->3306/tcp, 0.0.0.0:8080->80/tcp   lonely_davinci
    e3c136d76b44        tutum/tomcat:8.0                   "/run.sh"              45 minutes ago      Up 45 minutes       0.0.0.0:80->8080/tcp                           tomcat001
    fe9e65aaf58c        dl.dockerpool.com:5000/mysql:5.7   "/entrypoint.sh mysq   51 minutes ago      Up 51 minutes       3306/tcp                                       db001,tomcat001/tomysql
    core@localhost ~/base $ curl http://127.0.0.1:8080
    #使用curl可以查看到默认的应用已经启动
    <html>
    <head>
            <title>Hello world!</title>
            <style>
            body {
                    background-color: white;
                    text-align: center;
                    padding: 50px;
                    font-family: "Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;
            }
    
            #logo {
                    margin-bottom: 40px;
            }
            </style>
    </head>
    <body>
            <img id="logo" src="logo.png" />
            <h1>Hello world!</h1>
                            <h2>MySQL Server version: 5.5.38-0ubuntu0.14.04.1</h2>
            </body>
    </html>
    

    部署自己的 PHP 应用

    默认的容器启动了一个 helloword 应用,我们可以使用 dockerfile 创建另外一个镜像来部署我们自己的应用程序,dockerfile 的详细语法将在后面章节介绍。

    core@localhost ~ $ mkdir php
    core@localhost ~ $ cd php/
    core@localhost ~/php $ touch Dockerfile
    core@localhost ~/php $ vi Dockerfile
    core@localhost ~/php $ docker build -t dockerpool/my-lamp-app .
    

    Dockerfile 内容如下:

    FROM tutum/lamp:latest
    RUN rm -fr /app && git clone https://github.com/username/customapp.git /app
    #这里替换 https://github.com/username/customapp.git 地址为你自己的项目地址
    EXPOSE 80 3306
    CMD ["/run.sh"]
    

    再次启动自己的容器就完成部署了

    core@localhost ~/php $ docker stop    0ee
    0ee
    core@localhost ~/php $ docker rm 0ee
    0ee
    core@localhost ~/php $ docker run -d -p 8080:80 -p 3306:3306 dockerpool/my-lamp-app
    

    使用 curl看下自己的应用程序是不是已经正确启动了吧!

    curl http://localhost/
    

    在 php 程序中连接数据库

    在容器中访问 mysql 数据库

    这个镜像的 mysql 数据库有个默认的 root 用户,本地连接时可以不用密码,所以在代码访问非常简单。

    <?php
    $mysql = new mysqli("localhost", "root");
    echo "MySQL Server info: ".$mysql->host_info;
    ?>
    

    在容器外部访问 mysql 数据库

    当我们第一次以 tutum/lamp 镜像启动容器的时候,它会自动创建一个叫 admin 的 mysql 用户,并生成一个随机密码,使用「docker logs +容器ID」可以获取到这个密码。

    core@localhost ~/php $ docker logs 9cb
    => An empty or uninitialized MySQL volume is detected in /var/lib/mysql
    => Installing MySQL ...
    => Done!
    => Waiting for confirmation of MySQL service startup
    => Creating MySQL admin user with random password
    => Done!
    ========================================================================
    You can now connect to this MySQL Server using:
    
        mysql -uadmin -p2Ijg6gvmM0N3 -h<host> -P<port>
    
    Please remember to change the above password as soon as possible!
    MySQL user 'root' has no password but only allows local connections
    ========================================================================
    

    默认的 root 用户无法远程登陆,所以要使用 admin 用户,它同样具有 root 权限。

  • 相关阅读:
    184. Department Highest Salary【leetcode】sql,join on
    181. Employees Earning More Than Their Managers【leetcode】,sql,inner join ,where
    178. Rank Scores【leetcode】,sql
    177. Nth Highest Salary【leetcode】,第n高数值,sql,limit,offset
    176. Second Highest Salary【取表中第二高的值】,sql,limit,offset
    118. Pascal's Triangle【LeetCode】,java,算法,杨辉三角
    204. Count Primes【leetcode】java,算法,质数
    202. Happy Number【leetcode】java,hashSet,算法
    41. First Missing Positive【leetcode】寻找第一个丢失的整数,java,算法
    删除
  • 原文地址:https://www.cnblogs.com/agang-php/p/4316938.html
Copyright © 2011-2022 走看看