基于 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/bashdockerfile构建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
