Docker file的撰寫及簡單的LNMP容器搭建

PS:關於dockerfile的官方文檔:https://docs.docker.com/engine/reference/builder/

一. Dockerfile格式

dockerfile其實就是一個文本

二. Dockerfile指令

指令 描述
FROM 構建新鏡像是基於哪個鏡像
MAINTAINER LABEL 鏡像維護者姓名或郵箱地址
RUN 構建鏡像時運行的Shell命令
COPY 拷貝文件或目錄到鏡像中
ENV 設置環境變量
USER 爲RUN、CMD和ENTRYPOINT執行命令指定運行用戶
EXPOSE 聲明容器運行的服務端口
WORKDIR 爲RUN、CMD、ENTRYPOINT、COPY和ADD設置工作目錄
ENTRYPOINT 運行容器時執行,如果有多個ENTRYPOINT指令,最後一個生效
CMD 運行容器時執行,如果有多個CMD指令,最後一個生效

三. Build鏡像

Usage: docker build [OPTIONS] PATH | URL | - [flags]		//bulid命令格式
Options:
-t, --tag list 			// 鏡像名稱
-f, --file string 		//指定Dockerfile文件位置
$ docker build -t shykes/myapp .									//標準輸出
$ docker build -t shykes/myapp -f /path/Dockerfile /path			//從絕對路徑讀取
$ docker build -t shykes/myapp http://www.example.com/Dockerfile	//從網絡讀取

四. 構建Nginx,PHP 基礎鏡像

1. 寫dockerfile注意事項

寫dockerfile之前先了解步驟

  1. 構建nginx鏡像需要到nginx下載鏡像
    採用編譯安裝的步驟 :
    1. configure (RUN)
    2. make (RUN)
    3. make install (RUN)
  2. 啓用哪些模塊 (RUN)
  3. 初始化 (RUN)
  4. 啓動 (CMD)、

編寫dockerfile最好先創建一個容器進行實驗
寫的dockerfile儘量少用dockerfile指令,減少分層。

2. Nginx dockerfile

FROM centos:7
MAINTAINER cqnswp
RUN yum install -y gcc gcc-c++ make \
    openssl-devel pcre-devel gd-devel \
    iproute net-tools telnet wget curl && \
    yum clean all && \
    rm -rf /var/cache/yum/*
RUN wget http://nginx.org/download/nginx-1.15.5.tar.gz && \
    tar zxf nginx-1.15.5.tar.gz && \
    cd nginx-1.15.5 && \
    ./configure --prefix=/usr/local/nginx \
    --with-http_ssl_module \
    --with-http_stub_status_module && \
    make -j 4 && make install && \
    rm -rf /usr/local/nginx/html/* && \
    echo "ok" >> /usr/local/nginx/html/status.html && \
    cd / && rm -rf nginx-1.12.2* && \
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ENV PATH $PATH:/usr/local/nginx/sbin
#COPY nginx.conf /usr/local/nginx/conf/nginx.conf
WORKDIR /usr/local/nginx
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

dockerfile寫好後就開始構建
它將一步一步執行文件中的命令

$ docker build -t nginx:v1.0 -f Dockerfile-nginx .
$ docker image ls

用我們新構建的鏡像創建一個容器

$ docker container run -itd --name nginx_01 -p 8080:80 nginx:v1.0

驗證正常
在這裏插入圖片描述

4. PHP dockerfile

php基礎鏡像

FROM centos:7                                                          
MAINTAINER cqnswp                                                      
RUN yum install epel-release -y && \                                   
    yum install -y gcc gcc-c++ make gd-devel libxml2-devel \           
    libcurl-devel libjpeg-devel libpng-devel openssl-devel \           
    libmcrypt-devel libxslt-devel libtidy-devel autoconf \             
    iproute net-tools telnet wget curl && \                            
    yum clean all && \                                                 
    rm -rf /var/cache/yum/*                                            
                                                                       
RUN wget http://docs.php.net/distributions/php-5.6.36.tar.gz && \      
    tar zxf php-5.6.36.tar.gz && \                                     
    cd php-5.6.36 && \                                                 
    ./configure --prefix=/usr/local/php \                              
    --with-config-file-path=/usr/local/php/etc \                       
    --enable-fpm --enable-opcache \                                    
    --with-mysql --with-mysqli --with-pdo-mysql \                      
    --with-openssl --with-zlib --with-curl --with-gd \                 
    --with-jpeg-dir --with-png-dir --with-freetype-dir \               
    --enable-mbstring --with-mcrypt --enable-hash && \                 
    make -j 4 && make install && \                                     
    cp php.ini-production /usr/local/php/etc/php.ini && \              
    cp sapi/fpm/php-fpm.conf /usr/local/php/etc/php-fpm.conf && \      
    sed -i "90a \daemonize = no" /usr/local/php/etc/php-fpm.conf && \  
    mkdir /usr/local/php/log && \                                      
    cd / && rm -rf php* && \                                           
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime            
                                                                       
ENV PATH $PATH:/usr/local/php/sbin:/usr/local/php/bin                  
COPY php.ini /usr/local/php/etc/                                       
COPY php-fpm.conf /usr/local/php/etc/                                  
WORKDIR /usr/local/php                                                 
EXPOSE 9000                                                            
CMD ["php-fpm"]                                                        

五. 以wordpress爲例快速搭建LNMP環境

dockerfile及配置文件下載

在這裏插入圖片描述

除了數據庫,nginx 跟 php 都需提前準備配置文件(nginx.conf php.ini)

1. 創建一個自定義網絡,兩個數據卷

$ docker network create lnmp
$ docker volume create wwwroot
$ docker volume create mysql_vol

2. 構建mysql容器(使用官方的鏡像)

命名爲:lnmp_mysql
使用網絡:lnmp
掛載數據卷:mysql_vol到容器/var/lib/mysql
傳入環境變量:mysql密碼:123456,創建一個wordpress數據庫
指定mysql版本:5.7,格式爲utf8

$ docker container run -itd --name lnmp_mysql --network lnmp --mount src=mysql_vol,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress mysql:5.7 --character-set-server=utf8

3. 構建PHP鏡像(使用剛剛我們自己寫的dockerfile)

提前準備好鏡像,php.ini 、php-fpm.conf

構建鏡像,如果前面已經做了跳過此步

$ docker build -t php:1.0 -f Dockerfile-php .

利用鏡像創建一個php容器

$ docker container run -itd --name lnmp_php --network lnmp --mount src=wwwroot,dst=/wwwroot php:1.0

4. 構建Nginx鏡像(通用使用自己的dockerfile)

提前準備 nginx.conf
如果前面構建了,這裏跳過。

$ docker build -t nginx:v1.0 -f Dockerfile-nginx .

使用nginx:v1.0鏡像創建容器

$ docker container run -itd --name lnmp_nginx --network lnmp -p 8080:80 --mount type=bind,src=$(pwd)/nginx.conf,dst=/usr/local/nginx/nginx.conf --mount src=wwwroot,dst=/wwwroot nginx: v1.0

5. 檢查環境

配置完好檢查環境
在這裏插入圖片描述
進入 /var/lib/docker/volumes/wwwroot/_data 數據卷查看檢查環境

在這裏插入圖片描述

下載 https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz 並解壓wordpress訪問安裝即可
在這裏插入圖片描述
在這裏插入圖片描述
mysql數據卷也有了數據

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章