原文@美味小魚的雜貨鋪
LAMP 指的 Linux(操作系統(tǒng))、ApacheHTTP 服務(wù)器壁却,MySQL(有時(shí)也指MariaDB,數(shù)據(jù)庫軟件) 和 PHP(有時(shí)也是指 Perl 或 Python) 的第一個(gè)字母,一般用來建立 web 服務(wù)器。 雖然這些開放源代碼程序本身并不是專門設(shè)計(jì)成同另幾個(gè)程序一起工作的泛豪,但由于它們的免費(fèi)和開源,這個(gè)組合開始流行(大多數(shù)Linux發(fā)行版本捆綁了這些軟件)侦鹏。當(dāng)一起使用的時(shí)候诡曙,它們表現(xiàn)的像一個(gè)具有活力的解決方案包。下面介紹如何使用docker來搭建一個(gè)包含lamp組件的容器:
從網(wǎng)站上 pull 一個(gè) lamp 鏡像
官方的倉里沒有標(biāo) OFFICIAL 的 lamp 的鏡像种柑,不過 「tutum」的鏡像做的非常好岗仑,我們可以直接 pull 他們的鏡像來完成我們的操作。
core@localhost ~/base $ docker pull tutum/lampPulling repository tutum/lamp4b32789c7d66: Download complete...
使用默認(rèn)方式啟動 lamp 容器
core@localhost ~/base $ docker run -d -p 8080:80 -p 3306:3306 tutum/lamp#啟動應(yīng)用并映射 8080 端口和 3306 端口0ee00c97a5cdefb985baf826c16723f333aa5edddee4072a5107c724ad09f10dcore@localhost ~/base $ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES0ee00c97a5cd 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_davincie3c136d76b44 tutum/tomcat:8.0 "/run.sh" 45 minutes ago Up 45 minutes 0.0.0.0:80->8080/tcp tomcat001fe9e65aaf58c dl.dockerpool.com:5000/mysql:5.7 "/entrypoint.sh mysq 51 minutes ago Up 51 minutes 3306/tcp db001,tomcat001/tomysqlcore@localhost ~/base $ curl http://127.0.0.1:8080#使用curl可以查看到默認(rèn)的應(yīng)用已經(jīng)啟動<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 應(yīng)用
默認(rèn)的容器啟動了一個(gè) helloword 應(yīng)用聚请,我們可以使用 dockerfile 創(chuàng)建另外一個(gè)鏡像來部署我們自己的應(yīng)用程序荠雕,dockerfile 的詳細(xì)語法將在后面章節(jié)介紹。
core@localhost ~ $ mkdir phpcore@localhost ~ $ cd php/core@localhost ~/php $ touch Dockerfilecore@localhost ~/php $ vi Dockerfilecore@localhost ~/php $ docker build -t dockerpool/my-lamp-app .
Dockerfile 內(nèi)容如下:
FROM tutum/lamp:latest
RUN rm -fr /app && git clone https://github.com/username/customapp.git /app
#這里替換 https://github.com/username/customapp.git 地址為你自己的項(xiàng)目地址
EXPOSE 80 3306
CMD ["/run.sh"]
再次啟動自己的容器就完成部署了
core@localhost ~/php $ docker stop 0ee0eecore@localhost ~/php $ docker rm 0ee0eecore@localhost ~/php $ docker run -d -p 8080:80 -p 3306:3306 dockerpool/my-lamp-app
使用 curl看下自己的應(yīng)用程序是不是已經(jīng)正確啟動了吧!
curl http://localhost/
在 php 程序中連接數(shù)據(jù)庫
在容器中訪問 mysql 數(shù)據(jù)庫
這個(gè)鏡像的 mysql 數(shù)據(jù)庫有個(gè)默認(rèn)的 root 用戶驶赏,本地連接時(shí)可以不用密碼炸卑,所以在代碼訪問非常簡單。
<?php$mysql = new mysqli("localhost", "root");echo "MySQL Server info: ".$mysql->host_info;?>
在容器外部訪問 mysql 數(shù)據(jù)庫
當(dāng)我們第一次以 tutum/lamp 鏡像啟動容器的時(shí)候煤傍,它會自動創(chuàng)建一個(gè)叫 admin 的 mysql 用戶盖文,并生成一個(gè)隨機(jī)密碼,使用「docker logs +容器ID」可以獲取到這個(gè)密碼蚯姆。
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========================================================================
默認(rèn)的 root 用戶無法遠(yuǎn)程登陸五续,所以要使用 admin 用戶,它同樣具有 root 權(quán)限龄恋。