1. 程式人生 > 其它 >Dockerfile編寫製作centos7.7+php5.6+nginx映象

Dockerfile編寫製作centos7.7+php5.6+nginx映象

1、新建一個dockerfile檔案

  1. touch test.Dockerfile

2、找一個centos基礎映象

 可以去docker hub上尋找,連結:docker-hub 在搜尋框搜尋'centos',或者直接點選docker-hub-centos。裡面有從centos 6 到最新的centos 8 等各版本的基礎映象,此處我選擇版本:centos:7.7.1908,當然也可以選擇其它版本。

 所以,在test.Dockerfile第一行為:

  1. FROM centos:7.7.1908

3、MAINTAINER 指定作者  (非必要)

  1. MAINTAINER wu "471515***@qq.com"

4、使用RUN命令安裝php5.6

  因為我採用yum安裝,所在需要先配置和更新yum源,然後再進行php5.6安裝,。原本在centos的命令如下:

  1. yum install -y epel-release
  2. yum -y install wget
  3. wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  4. rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
  5. yum -y install --enablerepo=remi
    --enablerepo=remi-php56 php php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd php-mysql php-odbc php-pdo php-mssql php-mysqli php-gd php-xml php-pear php-bcmath php-pecl-swoole php-pecl-redis php-pecl-mongo --skip-broken

  其中yum後都加要-y,避免在執行dockerfile安裝時因等待確認而失敗。在dockerfile中為了避免太多層,可以使用‘&&’將多個使命合併。最終dockerfile中增加命令如下:

  1. RUN yum install -y epel-release \
  2. && yum -y install wget \
  3. && wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo \
  4. && rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm \
  5. && yum install -y --enablerepo=remi --enablerepo=remi-php56 php php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd php-mysql php-odbc php-pdo php-mssql php-mysqli php-gd php-xml php-pear php-bcmath php-pecl-swoole php-pecl-redis php-pecl-mongo --skip-broken \

  注意:其中php擴充套件可以按需求增減。

5、安裝php-fpm

  原本在centos中執行的命令如下:

  1. yum install -y --enablerepo=remi --enablerepo=remi-php56 php-fpm

  則在dockerfile增加:

  1. && yum install -y --enablerepo=remi --enablerepo=remi-php56 php-fpm \

6、安裝nginx

 原本在centos中執行的命令如下:

  1. yum install -y nginx

  則在dockerfile增加:

  1. && yum install -y nginx \

7、新增www使用者組和使用者並安裝vim

  原本在centos中執行的命令如下:

  1. groupadd www
  2. useradd -g www -s /sbin/nologin www
  3. yum install vim -y

  則在dockerfile增加:

  1. && groupadd www \
  2. && useradd -g www -s /sbin/nologin www \
  3. && yum install vim -y

注意:每一行的 \ 是為了合併命令之後的換行,所以最後一行不需要 \ 。

8、修改nginx配置

  此處用COPY命令直接將配置好的nginx.conf複製到映象裡面:

  1. COPY nginx.conf /etc/nginx/nginx.conf

  對於nginx.conf檔案,增加了對php檔案的解析:

  1. location ~ \.php${
  2. root html;
  3. fastcgi_pass 127.0.0.1:9000;
  4. fastcgi_index index.php;
  5. fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
  6. include fastcgi_params;
  7. }

9、加入測試用的index.php檔案

  此處用COPY命令直接將index.php檔案複製到映象裡相應的目錄:

  1. COPY index.php /usr/share/nginx/html/index.php

  index.php檔案中內容為:

  1. <?php
  2. phpinfo();

10、新增容器啟動指令碼檔案run.sh

  為了讓最終建立的容器在啟動時能啟動nginx和php-fpm服務,需要建一個run.sh,用於在啟動時執行,其中命令為:

  1. #!/bin/bash
  2. nginx
  3. php-fpm
  4. tail -f /dev/null

  其中最後一行的'tail -f /dev/null',是為了避免在CMD執行完這個命令指令碼後主程序退出時將導致容器也退出,才加的阻塞操作,因為這個命令永遠都執行不完。然後在dockerfile檔案中用COPY命令直接將run.sh檔案複製到映象裡相應的目錄:

  1. COPYrun.sh /mnt/run.sh

  特別注意:run.sh必須要有執行許可權!

11、開放80埠

  1. EXPOSE 80

12、CMD命令執行run.sh

  1. CMD["/mnt/run.sh"]

13、使用docker build命令構建映象

  將上述步驟中建好的四個檔案放在同一目錄下,然後使用命令構建:

  

  1. sudo docker build -t centos7.7:v2-f test.Dockerfile.

  等待幾分鐘,映象就構建好了。因為涉及到下載安裝過程,網路不好可能失敗,可以重新執行命令。

  

14、使用docker run建立一個容器並執行

  1. sudo docker run-d --name test -p 8010:80-it centos7.7:v2

  然後,在瀏覽器中訪問:http://127.0.0.1:8010/,即出現熟悉的頁面:  

  

 15、附錄:各檔案中最終內容

  test.dockerfile檔案內容如下:

  1. FROM centos:7.7.1908
  2. MAINTAINER wu "471515***@qq.com"
  3.  
  4. RUN yum install -y epel-release \
  5. && yum -y install wget \
  6. && wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo \
  7. && rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm \
  8. && yum install -y --enablerepo=remi --enablerepo=remi-php56 php php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd php-mysql php-odbc php-pdo php-mssql php-mysqli php-gd php-xml php-pear php-bcmath php-pecl-swoole php-pecl-redis php-pecl-mongo --skip-broken \
  9. && yum install -y --enablerepo=remi --enablerepo=remi-php56 php-fpm \
  10. && yum install -y nginx \
  11. && groupadd www \
  12. && useradd -g www -s /sbin/nologin www \
  13. && yum install vim -y
  14. COPY nginx.conf /etc/nginx/nginx.conf
  15. COPY index.php /usr/share/nginx/html/index.php
  16. COPYrun.sh /mnt/run.sh
  17. EXPOSE 80
  18. CMD["/mnt/run.sh"]

  nginx.conf檔案內容如下:

  1. user nginx;
  2. worker_processes auto;
  3. error_log /var/log/nginx/error.log;
  4. pid /run/nginx.pid;
  5. include /usr/share/nginx/modules/*.conf;
  6. events {
  7. worker_connections 1024;
  8. }
  9. http {
  10. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  11. '$status $body_bytes_sent "$http_referer" '
  12. '"$http_user_agent" "$http_x_forwarded_for"';
  13. access_log /var/log/nginx/access.log main;
  14. sendfile on;
  15. tcp_nopush on;
  16. tcp_nodelay on;
  17. keepalive_timeout 65;
  18. types_hash_max_size 2048;
  19. include /etc/nginx/mime.types;
  20. default_type application/octet-stream;
  21. include /etc/nginx/conf.d/*.conf;
  22. server {
  23. listen 80;
  24. server_name _;
  25. root /usr/share/nginx/html;.
  26. include /etc/nginx/default.d/*.conf;
  27. location / {
  28. root html;
  29. index index.php index.html index.htm;
  30. }
  31. location ~ \.php$ {
  32. root html;
  33. fastcgi_pass 127.0.0.1:9000;
  34. fastcgi_index index.php;
  35. fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
  36. include fastcgi_params;
  37. }
  38. error_page 404 /404.html;
  39. location = /40x.html {
  40. }
  41. error_page 500 502 503 504 /50x.html;
  42. location = /50x.html {
  43. }
  44. }
  45. }