docker創建lnmp鏡像


  docker是一個輕量級的虛擬化技術,而lnmp是一個強大、開源的web運行環境,這里我們就演示用Docker來構建一個lnmp鏡像。

  PS:為了保持輕量化和可伸縮,Docker鼓勵我們 “one process per container”,也就是不要在一個鏡像中集成太多的功能,我們這里主要是為了學習研究,所以違背了這個准則,更好的方案是Nginx、Mysql、PHP各自創建鏡像,在單獨的容器里運行,然后通過容器間的互聯實現通信。

 

1、拉取官方的 centos:6.9 作為基礎鏡像,安裝好基礎環境

[root@localhost ~]# docker pull centos:6.9
6.9: Pulling from centos
055b9989266a: Pull complete 
f1070d829305: Pull complete 
e071bce628ba: Pull complete 
Digest: sha256:e7bdc458659b6e644ae85694f2baaf3727c06ad82186fca80f4e3a8e88907cc3
Status: Downloaded newer image for centos:6.9
[root@localhost ~]# 
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
httpd               2.4.29              91199e851c7a        4 weeks ago         177.3 MB
centos              6.9                 e071bce628ba        4 weeks ago         194.7 MB
ubuntu              14.04               b44ce450cb60        11 weeks ago        188 MB
[root@localhost ~]# 
[root@localhost ~]# docker run -it centos:6.9 /bin/bash
[root@df040eea8088 /]# ls          
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
[root@localhost ~]#
[root@df040eea8088 /]# yum install -y epel-release
.......

2、安裝PHP

[root@df040eea8088 /]# yum install -y php php-fpm php-mysql
.........
.........
[root@df040eea8088 /]# php -v
PHP 5.3.3 (cli) (built: Mar 22 2017 12:27:09) 
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
[root@df040eea8088 /]# php-fpm -v
PHP 5.3.3 (fpm-fcgi) (built: Mar 22 2017 12:28:05)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
[root@df040eea8088 /]# 
[root@df040eea8088 /]# php -m
[PHP Modules]
bz2
calendar
Core
ctype
curl
date
ereg
exif
fileinfo
filter
ftp
gettext
gmp
hash
iconv
json
libxml
mysql
mysqli
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
readline
Reflection
session
shmop
SimpleXML
sockets
SPL
sqlite3
standard
tokenizer
xml
zip
zlib
 
[Zend Modules]

3、安裝Nginx並配置PHP fastcgi

[root@df040eea8088 /]# yum install -y nginx
.......

配置Nginx以支持PHP,修改 /etc/nginx/conf.d/default.conf 如下:

#
# The default server
#
 
server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  _;
    root /www;   #change document_root to /www
 
    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;
 
    location / {
    }
 
    #support php access location ~ .*\.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
 
    error_page 404 /404.html;
        location = /40x.html {
    }
 
    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
 
}

創建 /www 目錄,並且修改用戶和用戶組為 apache (php-fpm默認運行用戶和組為apache)

[root@df040eea8088 /]# mkdir /www
[root@df040eea8088 /]# chown apache:apache /www 
 
[root@df040eea8088 /]# ll / | grep www
drwxr-xr-x.   2 apache apache  4096 Dec  4 08:21 www

4、安裝mysql

[root@df040eea8088 /]# yum install -y mysql mysql-server
......
......
 
[root@df040eea8088 /]# /etc/init.d/mysqld start
Starting mysqld:                                           [  OK  ]
 
[root@df040eea8088 /]# /usr/bin/mysqladmin -u root password '123456'
 
[root@df040eea8088 /]# /etc/init.d/mysqld stop
Stopping mysqld:                                           [  OK  ]

5、編寫啟動命令

[root@df040eea8088 /]# touch /bin/startup.sh
[root@df040eea8088 /]# chmod +x /bin/startup.sh

然后向startup.sh寫入如下內容:

#!/bin/sh
 
/etc/init.d/mysqld start
/etc/init.d/php-fpm start
/etc/init.d/nginx start
 
 
#dead loop
while ((1))
do
        sleep 1h
done

6、清理不再需要的數據以縮減鏡像的尺寸,然后docker commit生成新鏡像

[root@df040eea8088 /]# yum remove -y epel-release
[root@df040eea8088 /]# yum clean all
Loaded plugins: fastestmirror, ovl
Cleaning repos: base extras updates
Cleaning up Everything
Cleaning up list of fastest mirrors
 
[root@df040eea8088 /]# exit
exit
 
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
df040eea8088        centos:6.9          "/bin/bash"         2 hours ago         Exited (0) 31 seconds ago                       sleepy_yalow        
[root@localhost ~]# docker commit df0 centos:lnmp
efa371fe9b0ede828fe1999e7831491d1dd24cda26f1a27092a9565f4c781e06
 
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              lnmp                efa371fe9b0e        57 seconds ago      453.4 MB
httpd               2.4.29              91199e851c7a        4 weeks ago         177.3 MB
centos              6.9                 e071bce628ba        4 weeks ago         194.7 MB
ubuntu              14.04               b44ce450cb60        11 weeks ago        188 MB

7、測試鏡像,啟動容器

[root@localhost ~]# docker run -d -p 8848:80 -v /www:/www centos:lnmp /bin/startup.sh
[root@localhost www]# cd /www
[root@localhost www]# echo "<?php echo time() . PHP_EOL;" > index.php
[root@localhost www]# cat index.php 
<?php echo time() . PHP_EOL;
[root@localhost www]# curl '127.0.0.1:8848/index.php'
1512380042

再測試mysql是否正常

[root@localhost www]# touch /www/db.php

代碼內容:

<?php
 
$db = new mysqli('127.0.0.1', 'root', '123456', 'mysql');
 
if ($db->connect_errno)
{
    die("連接數據庫失敗". $db->connect_error);
}
 
echo "連接成功";
 
$db->close();

訪問 127.0.0.1:8848/db.php

[root@localhost www]# curl '127.0.0.1:8848/db.php'
連接成功[root@localhost www]#

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM