目錄
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之前先了解步驟
- 構建nginx鏡像需要到nginx下載鏡像
採用編譯安裝的步驟 :- configure (RUN)
- make (RUN)
- make install (RUN)
- 啓用哪些模塊 (RUN)
- 初始化 (RUN)
- 啓動 (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環境
除了數據庫,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數據卷也有了數據