【系列6】使用Dockerfile建立帶LAMP的CentosDocker映象
LAMP值的Linux (作業系統)、ApacheHTTP伺服器、MySQL(有時也指MariaDB,資料庫軟體)和PHP(有時也是指Perl或Python)的組合方案,一般很適合用來建立Web伺服器環境。
① 下載LAMP映象:
下面介紹如何使用Docker來搭建一個包含LAMP元件的容器。
[root@docker1 ~]# 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]
……
[root@docker1 ~]# 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埠:
[root@docker1 ~]# docker run -d -p 8080:80 -p 3306:3306 tutum/lamp
ec3c2c2b04ddda0110f6488ac4c2b958e5e834613d1c637bbaba8f628c6e461e
[root@docker1 ~]# 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命令測試,可以檢視到預設的應用已經啟動:
[root@docker1 ~]# 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:
[root@docker1 ~]# mkdir LAMP
[root@docker1 ~]# cd LAMP
[root@docker1 LAMP]# touch Dockerfile
在php目錄下里面建立Dockerfile檔案,內容為
[root@docker1 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:
[root@docker1 LAMP]# docker build -t dockerpool/my-lamp-app .
利用新建立映象啟動容器,注意啟動時候指定-d引數,讓容器後臺執行:
[root@docker1 LAMP]# docker run -d -p 8080:80 -p 3306:3306 dockerpool/my-lamp-app
在本地主機上使用curl看一下自己的應用程式是不是已經正確啟動:
[root@docker1 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命令可以獲取到這個密碼:
[root@docker1 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
① 下載LAMP映象:
下面介紹如何使用Docker來搭建一個包含LAMP元件的容器。
[root@docker1 ~]# 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]
……
[root@docker1 ~]# 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埠:
[root@docker1 ~]# docker run -d -p 8080:80 -p 3306:3306 tutum/lamp
ec3c2c2b04ddda0110f6488ac4c2b958e5e834613d1c637bbaba8f628c6e461e
[root@docker1 ~]# 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命令測試,可以檢視到預設的應用已經啟動:
[root@docker1 ~]# 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:
[root@docker1 ~]# mkdir LAMP
[root@docker1 ~]# cd LAMP
[root@docker1 LAMP]# touch Dockerfile
在php目錄下里面建立Dockerfile檔案,內容為
[root@docker1 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:
[root@docker1 LAMP]# docker build -t dockerpool/my-lamp-app .
利用新建立映象啟動容器,注意啟動時候指定-d引數,讓容器後臺執行:
[root@docker1 LAMP]# docker run -d -p 8080:80 -p 3306:3306 dockerpool/my-lamp-app
在本地主機上使用curl看一下自己的應用程式是不是已經正確啟動:
[root@docker1 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命令可以獲取到這個密碼:
[root@docker1 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
========================================================================
本文轉自 Mr_sheng 51CTO部落格,原文連結:http://blog.51cto.com/sf1314/2056639
相關文章
- Docker框架使用系列教程(七)Dockerfile映象建立Docker框架
- 使用Dockerfile建立帶Apache服務的Centos Docker映象DockerApacheCentOS
- Dockerfile建立映象Docker
- 使用 Dockerfile 定製映象Docker
- 使用Dockerfile定製映象Docker
- 最簡單的dockerfile使用教程 - 建立一個支援SSL的Nginx映象DockerNginx
- 使用 Dockerfile 自定義 Nginx 映象DockerNginx
- 使用dockerfile構建nginx映象DockerNginx
- 使用 Dockerfile 定製映象【轉】Docker
- Dockerfile入門(使用Dockerfile生成jdk1.8映象)DockerJDK
- Docker - 02 建立映象 Dockerfile 指令速查表Docker
- 如何編寫 Dockerfile 檔案建立 Docker 映象Docker
- Docker如何製作映象-Dockerfile的使用Docker
- Docker框架使用系列教程(六)建立映象Docker框架
- Docker 入門系列四:Dockerfile-映象原理Docker
- 筆記:使用Dockerfile構建映象筆記Docker
- Dockerfile映象的製作Docker
- Docker 入門系列四:Dockerfile-映象製作Docker
- Docker入門系列之二:使用dockerfile製作包含指定web應用的映象DockerWeb
- [Dockerfile構建映象]Docker
- DockerFile構建映象Docker
- Dockerfile定製映象Docker
- Docker映象的構成__DockerfileDocker
- 使用Dockerfile建立一個tomcat映象,並執行一個簡單war包DockerTomcat
- Docker映象中提取DockerfileDocker
- Docker--DockerFile與映象Docker
- dockerfile映象設定中文Docker
- Docker 入門系列四:Dockerfile-自定義 CentOS7 映象DockerCentOS
- Dockerfile 定製專屬映象Docker
- 用dockerfile構建docker映象Docker
- Docker 映象構建之 DockerfileDocker
- docker 映象建立與使用Docker
- Docker入門系列之三:如何將dockerfile製作好的映象釋出到Dockerhub上Docker
- dockerfile相關(4):docker常用基礎映象——java映象DockerJava
- Docker入門系列之三:如何將dockerfile製作好的映象釋出到Docker hub上Docker
- Dockerfile生成映象的時候是如何快取的?Docker快取
- 最佳化 Dockerfile 以減小映象Docker
- Dockerfile語法與建立Docker