基于 Dockerfile 来创建镜像

通过 Dockerfile 的方式来创建镜像,是最常见的一种方式了,也是比较推荐的方式。Dockerfile 是一个文本指令文件,它描述了是如何基于一个父镜像,来创建一个新镜像的过程。

下面让我们来编写一个简单的 Dockerfile 文件,它描述了基于 Ubuntu 父镜像,安装 PHP 环境的镜像:

保存为sources.list存放于dockerfile同目录下(/etc/apt/source.list)

阿里源:

#添加阿里源
deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch main non-free contrib
deb http://mirrors.aliyun.com/debian-security stretch/updates main
deb-src http://mirrors.aliyun.com/debian-security stretch/updates main
deb http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib
deb http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib
#中科大源
deb http://mirrors.ustc.edu.cn/debian stable main contrib non-free 
deb-src http://mirrors.ustc.edu.cn/debian stable main contrib non-free 
deb http://mirrors.ustc.edu.cn/debian stable-proposed-updates main contrib non-free 
deb-src http://mirrors.ustc.edu.cn/debian stable-proposed-updates main contrib non-free

// vim dockerfile
FROM php:7.1-fpm
LABEL version="1.0" maintainer="Lison <kk@haook.cn>"
ENV TZ=Asia/Shanghai
ADD sources.list /etc/apt/
RUN apt-get update && apt-get install -y \
    nginx \
    vim \
    procps \
    libfreetype6-dev \
        libmcrypt-dev \
        libpng-dev \
        libjpeg-dev \
        libpng-dev \
        libxml2-dev \
    && docker-php-ext-install bcmath \
    && docker-php-ext-install calendar \
    && docker-php-ext-install exif \
    && docker-php-ext-install mcrypt \
    && docker-php-ext-install mysqli \
    && docker-php-ext-install pdo_mysql \
    && docker-php-ext-install soap \
#    && docker-php-ext-install xsl \
    && docker-php-ext-install simplexml \
    && docker-php-ext-install zip \
    && docker-php-ext-configure gd \
        --enable-gd-native-ttf \
        --with-freetype-dir=/usr/include/freetype2 \
        --with-png-dir=/usr/include \
        --with-jpeg-dir=/usr/include \
    && docker-php-ext-install -j$(nproc) gd
RUN pecl install redis \
&& pecl install http://www.taiww.com/phpsoft/swoole-r.4.26.tgz \
&& docker-php-ext-enable redis gd swoole
#WORKDIR /home/abc/phptest

注意:php7.2以后不支持mcrypt, --enable-gd-native-ttf 这两个参数,需要去掉

创建完成后,通过这个 dockerfile 文件,来构建新的镜像,执行命令:

创建镜像
docker build -t php:latest .
docker build -t php71:7133 .
启动镜像,第一个端口是宿主机,容器外部文件夹路径:容器内部文件夹路径
docker run -v /home/docker/wkuai/www:/var/www/html -v  -p 443:443 -p 8086:8086 -p 8087:8087 -p 8088:8088 -p  8089:8089 -p 6379:6379  --restart=always  --name php7133  -it php:7.1.33 /bin/bash


dockerfile构建mysql镜像

#基于原始的mysql:5,7镜像
FROM mysql:5.7
#WORKDIR /docker-entrypoint-initdb.d  #工作路径
ENV LANG=C.UTF-8
ENV TZ=Asia/Shanghai
ADD sources.list /etc/apt/
#ADD init.sql .    #会将init.sql文件拷贝到容器中并执行sql
#RUN apt-key adv --keyserver keyserver.ubuntu.com --recv 8C718D3B5072E1F5
RUN apt-key adv --keyserver pgpkeys.mit.edu --recv-keys 467B942D3A79BD29
RUN apt-get update

docker build -t mysql01:5.7.36 .
docker run -p 6666:3306 -e MYSQL_ROOT_PASSWORD=afc@1234 -v /home/docker/wkuai/mysql5.7.36/conf:/etc/mysql/conf.d -v /home/docker/wkuai/mysql5.7.36/data:/var/lib/mysql --name mysql0157 -t mysql01:5.7.36

容器里建议装的应用:apt-get install -y nginx vim procps lsof