【系列6】使用Dockerfile创建带LAMP的Centos Docker镜像

LAMP值的Linux (操作系统)、ApacheHTTP服务器、MySQL(有时也指MariaDB,数据库软件)和PHP(有时也是指Perl或Python)的组合方案,一般很适合用来建立Web服务器环境。
 ① 下载LAMP镜像:
  下面介绍如何使用Docker来搭建一个包含LAMP组件的容器。
[[email protected] ~]# docker search -s 10 lamp
Flag --stars has been deprecated, use --filter=stars=3 instead
INDEX       NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/linode/lamp             LAMP on Ubuntu 14.04.1 LTS Container            121                  
docker.io   docker.io/tutum/lamp              Out-of-the-box LAMP image (PHP+MySQL)           68                  
docker.io   docker.io/greyltc/lamp            a super secure, up-to-date and lightweight...   65                   [OK]
docker.io   docker.io/reinblau/lamp           [Deprecated]Dockerfile for PHP-Projects wi...   28                 [OK]  
......
[[email protected] ~]# docker pull tutum/lamp
Using default tag: latest
Trying to pull repository docker.io/tutum/lamp ...
latest: Pulling from docker.io/tutum/lamp

8387d9ff0016: Pull complete
3b52deaaf0ed: Pull complete
4bd501fad6de: Pull complete
a3ed95caeb02: Pull complete
790f0e8363b9: Pull complete
11f87572ad81: Pull complete
341e06373981: Pull complete
709079cecfb8: Pull complete
55bf9bbb788a: Pull complete
b41f3cfd3d47: Pull complete
70789ae370c5: Pull complete
43f2fd9a6779: Pull complete
6a0b3a1558bd: Pull complete
934438c9af31: Pull complete
1cfba20318ab: Pull complete
de7f3e54c21c: Pull complete
596da16c3b16: Pull complete
e94007c4319f: Pull complete
3c013e645156: Pull complete
Digest: sha256:d332e7e97606ac6407b0ba9ae9e9383c89d7e04c6f4853332e98f7d326408329

② 使用默认方式启动LAMP容器:
利用下载的镜像启动一个容器,并映射容器的8080端口和3306端口:
[[email protected] ~]# docker run -d -p 8080:80 -p 3306:3306 tutum/lamp
ec3c2c2b04ddda0110f6488ac4c2b958e5e834613d1c637bbaba8f628c6e461e
[[email protected] ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS        PORTS                                          NAMES
ec3c2c2b04dd        tutum/lamp          "/run.sh"           4 seconds ago       Up 3 seconds        0.0.0.0:3306->3306/tcp, 0.0.0.0:8080->80/tcp   hungry_leavitt

使用curl命令测试,可以查看到默认的应用已经启动:
[[email protected] ~]# curl http://127.0.0.1:8080
返回的内容如下:
<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.47-0ubuntu0.14.04.1</h2>
       </body>

③ 部署自己的PHP应用
默认的容器启动了一个helloword应用。读者可以基于此镜像,编辑Dockerfile来创建自定义LAMP应用镜像。
在宿主主机上创建新的工作目录LAMP:
[[email protected] ~]# mkdir LAMP
[[email protected] ~]# cd LAMP
[[email protected] LAMP]# touch Dockerfile
在php目录下里面创建Dockerfile文件,内容为
[[email protected] LAMP]# vi Dockerfile
FROM tutum/lamp:latest
RUN rm -fr /app && git clone https://github.com/username/customapp.git /app
#这里将https://github.com/username/customapp.git /app替换/app里面的文件
EXPOSE 80 3306
CMD ["/run.sh"]
创建镜像,命名为dockerpool/my-lamp-app:
[[email protected] LAMP]# docker build -t dockerpool/my-lamp-app .
利用新创建镜像启动容器,注意启动时候指定-d参数,让容器后台运行:
[[email protected] LAMP]# docker run -d -p 8080:80 -p 3306:3306 dockerpool/my-lamp-app
在本地主机上使用curl看一下自己的应用程序是不是已经正确启动:
[[email protected] LAMP]# curl http://127.0.0.1:8080/

④ 在PHP程序中连接数据库
1. 在容器中访问MySQL数据库
下载的tutum/lamp镜像中的MySQL数据库已带有默认的root用户,本地连接可以不使用密码,所以在代码中访问数据库的实现非常简单:
<?php
$mysql = new mysqli("localhost", "root");
echo "MySQL Server info: ".$mysql->host_info;
?>

2. 在容器外访问MySQL数据库
默认的MySQL数据库不支持root用户远程登录,因此在容器外无法直接通过root用户访问MySQL数据库。
当第一次使用tutum/lamp镜像启动容器的时候,它会自动创建一个叫admin的MySQL用户,并生成一个随机密码,使用docker logs命令可以获取到这个密码:
[[email protected] LAMP]# docker logs ec3c2c2b04dd
=> 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 -p8fMyJd458mqd -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
========================================================================

原文地址:http://blog.51cto.com/sf1314/2056639

时间: 2024-11-09 12:07:42

【系列6】使用Dockerfile创建带LAMP的Centos Docker镜像的相关文章

【系列5】使用Dockerfile创建带weblogic的Centos Docker镜像

Weblogic是一个基于Java EE架构的中间件(应用服务器),WebLogic由Oracle公司维护. ? ?WebLogic是用于开发.集成.部署和管理大型分布式Web应用.网络应用和数据库应用的Java应用服务器.是商业市场上最主要的Java (J2EE)应用服务器软件之一,也是世界上第一个成功商业化的J2EE应用服务器. ? ?与Tomcat不同的是,Weblogic是一个商业软件,所以需要有授权才能使用.不过,Oracle公司允许开发者在开发模式下使用Weblogic.如果开发者需

使用Dockerfile创建带tomcat的Centos Docker镜像

(1)准备工作:  创建tomcat7.0_jdk1.6文件夹,从www.oracle.com上下载sun_jdk 1.6压缩包,解压为jdk目录.  创建Dockerfile和run.sh文件[[email protected] ~]# mkdir tomcat7.0_jdk1.6[[email protected] ~]# cd tomcat7.0_jdk1.6/[[email protected] tomcat7.0_jdk1.6]# touch Dockerfile run.sh[[em

通过Dockerfile创建支持SSH服务的docker镜像(centos、Ubuntu)

centos: mkdir centos-ssh vim centos-ssh/Dockerfile FROM centos MAINTAINER blog.rootr.cn [email protected] RUN yum install -y openssh-server RUN mkdir /var/run/sshd RUN ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N '' && \ ssh-keygen

使用Dockerfile创建带Apache服务的Centos Docker镜像1

这里将展示使用Dockerfile来创建带Apache服务的Docker镜像的具体过程.  准备工作:  首先,创建一个apache_centos工作目录,在其中[[email protected] ~]# mkdir apache_centos && cd apache_centos[[email protected] apache_centos]# touch Dockerfile run.sh[[email protected] apache_centos]# mkdir sampl

创建带Tomcat服务的Centos Docker镜像

Tomacat服务器是一个免费的开源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下普遍使用,是开发和高度JSP程序的首选. 下面我就分步骤向大家介绍如何创建带Nginx服务的Centos Docker镜像. 基础镜像: [root@localhost ~]# docker images REPOSITORY     TAG       IMAGE ID      CREATED      VIRTUAL SIZE sshd    dockerfile  

创建超小的Golang docker 镜像

原文: http://colobu.com/2015/10/12/create-minimal-golang-docker-images/ 本文对于创建超小的镜像非常有用 Docker是PaaS供应商dotCloud开源的一个基于LXC 的高级容器引擎,源代码托管在 GitHub 上, 基于Go语言开发并遵从Apache 2.0协议开源.正如DockerPool在免费Docker电子书Docker -- 从入门到实践中这样提到的: 作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具

【系列6】使用Dockerfile创建带mysql5.7的Centos Docker镜像1

1.进入Linux后,使用Docker命令下载MySQL,命令如: docker pull mysql:5.7 运行该命令后,则会显示以下日志: [[email protected] ~]# docker pull mysql:5.7 5.7: Pulling from library/mysql ad74af05f5a2: Pull complete  0639788facc8: Pull complete  de70fa77eb2b: Pull complete  724179e94999:

使用Dockerfile创建带Apache服务的Centos Docker镜像

在宿主机上准备的文件清单: Dockerfile #启动ssh和apache服务的角本 run.sh 以上文件都放到/root/apache_centos目录下 mkdir -p /root/apache_centos cd /root/apache_centos 基础镜像:以镜像centos为基础的开放SSH服务的镜像 [root@localhost apache_centos]# docker images REPOSITORY      TAG          IMAGE ID    

「一」创建一个带 ssh 服务的基础镜像(修订版)--使用「docker commit」创建

在介绍如何创建带 ssh 服务的基础镜像之前,我们想回顾一下之前介绍过的内容,其中提到有三种创建镜像的常用办法: 从文件系统导入 从现有容器使用「docker commit」提交 使用 dockerfile 文件 build 本章将主要介绍后面 2 种方法. 步骤如下: $ sudo docker run -ti ubuntu:14.04 /bin/bash #首先,使用我们最熟悉的 「-ti」参数来创建一个容器. [email protected]:/# sshd bash: sshd: co