docker:搭建lamp应用

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 容器

  1. core@localhost ~/base $ docker run -d -p 8080:80 -p 3306:3306 tutum/lamp
  2. #启动应用并映射 8080 端口和 3306 端口
  3. 0ee00c97a5cdefb985baf826c16723f333aa5edddee4072a5107c724ad09f10d
  4. core@localhost ~/base $ docker ps
  5. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  6. 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
  7. e3c136d76b44 tutum/tomcat:8.0 “/run.sh” 45 minutes ago Up 45 minutes 0.0.0.0:80->8080/tcp tomcat001
  8. fe9e65aaf58c dl.dockerpool.com:5000/mysql:5.7 “/entrypoint.sh mysq 51 minutes ago Up 51 minutes 3306/tcp db001,tomcat001/tomysql
  9. core@localhost ~/base $ curl http://127.0.0.1:8080
  10. #使用curl可以查看到默认的应用已经启动
  11. <html>
  12. <head>
  13. <title>Hello world!</title>
  14. <style>
  15. body {
  16. background-color: white;
  17. text-align: center;
  18. padding: 50px;
  19. font-family: “Open Sans“,”Helvetica Neue“,Helvetica,Arial,sans-serif;
  20. }
  21. #logo {
  22. margin-bottom: 40px;
  23. }
  24. </style>
  25. </head>
  26. <body>
  27. <img id=”logo” src=”logo.png” />
  28. <h1>Hello world!</h1>
  29. <h2>MySQL Server version: 5.5.38-0ubuntu0.14.04.1</h2>
  30. </body>
  31. </html>

部署自己的 PHP 应用

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

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

Dockerfile 内容如下:

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

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

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

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

curl http://localhost/

在 php 程序中连接数据库

在容器中访问 mysql 数据库

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

  1. <?php
  2. $mysql = new mysqli(“localhost”, “root”);
  3. echo “MySQL Server info: “.$mysql->host_info;
  4. ?>

在容器外部访问 mysql 数据库

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

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

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

发表评论