Dockerfile
dockerfile制作基于centos7的nginx镜像
Dockerfile 是一个文本文件,其内包含了一条条的
指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建,同时尽可能的避免重复使用指令,有了
Dockerfile,当我们需要定制自己额外的需求时,只需在 Dockerfile 上添加或者修改指令,重新生成 image
即可,省去了敲命令的麻烦。
dockerfile参数说明
FROM:指定基础镜像,必须第一条命令
MAINTAINER:维护者信息
RUN:构建镜像时执行的命令
ADD:将本地文件添加到容器里
COPY:类似ADD,但不能自动解压文件
CMD:构建容器后调用,也就是容器启动时才调用
ENTRYPOINT:配置容器使其可执行化
LABLE:用于镜像添加元数据
ENV:设置环境变量
EXPOST:指定于外界交互的端口
VOLUME:指定持久化目录
WORKDIR:工作目录
USER:指定运行容器的用户
ARG:用于指定传递给构建运行时的变量
Dockerfile最佳实践
容器是短暂的,也就是说,你需要可以容易的创建、销毁、配置你的容器。 多数情况,构建镜像的时候是将 Dockerfile
和所需文件放在同一文件夹下。但为了构建性能,我们可以采用 .dockerignore 文件来排除文件和目录。
避免安装不必要的包,构建镜像应该尽可能减少复杂性、依赖关系、构建时间及镜像大小。 最小化层数,使镜像尽可能的小。
排序多行参数,通过字母将参数排序来缓解以后的变化,这将帮你避免重复的包、使列表更容易更新。 构建缓存,大家知道 Docker
构建镜像的过程是顺序执行 Dockerfile 每个指令的过程。执行过程中,Docker
将在缓存中查找可重用的镜像,如果不想使用缓存,你也可以使用 docker build --no-cache=true … 命令。
基于centos7.2构建
vim /data/dockerfile
#基于centos7.2镜像构建
FROM centos:centos7.2.1511
#作者和邮箱
MAINTAINER lemon "dearlinm@gmail.com"
#工作目录,相当于cd到一个目录
WORKDIR /usr/src
#可以去执行一些命令
RUN yum install wget -y && \
wget http://mirrors.aliyun.com/repo/Centos-7.repo -O /etc/yum.repos.d/centos.repo && \
yum install --nogpgcheck gcc make pcre-devel zlib-devel wget -y && \
wget http://nginx.org/download/nginx-1.16.0.tar.gz && \
tar xf nginx-1.16.0.tar.gz && \
rm -rf nginx-1.16.0.tar.gz && \
cd nginx-1.16.0 && \
./configure --prefix=/usr/local/nginx --with-pcre && echo "999999" && \
make && make install && \
echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf && \
yum clean all
#打开80端口
EXPOSE 80
#启动容器
CMD ["/usr/local/nginx/sbin/nginx"]
构建
docker build -t ailemon/nginx:test .
# -t 指定个标签名名
# 在dockerfile同一目录下构建
启动容器
docker run --name ning -it -d -p 8090:80 ailemon/nginx:test
# --name 指定容器名称
# -it 打开个可交互的终端
# -d 后台运行
# -p 宿主机ip:容器ip
注意事项
构建过程中可能出现各种问题
ADD命令不能直接解压缩远程的url文件tar包
dockerfile中注意命令前不要有空格
编译镜像为nginx:v1
docker build -t . nginx:v1
编译安装php
获取php5.6.36的源码包:http://mirrors.sohu.com/php/php-5.6.36.tar.gz
在官网找的zip包解压后压缩成.tar.gz不行,没有configure命令
1.编写 Dockfile
FROM mycentos:v2
LABEL maintainer www.chinasoft.com
RUN source /etc/profile && \
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/*
COPY php-5.6.36.tar.gz /
RUN tar xf 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
COPY php.ini /usr/local/php/etc/
COPY php-fpm.conf /usr/local/php/etc/
WORKDIR /usr/local/php
EXPOSE 9000
CMD ["php-fpm"]
编译安装tomcat
下载地址:https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.43/bin/apache-tomcat-8.5.43.tar.gz
编写Dockerfile
FROM mycentos:v2
LABEL maintainer www.chinasoft.com
ENV VERSION=8.5.43
RUN source /etc/profile && \
yum install java-1.8.0-openjdk wget curl unzip iproute net-tools -y && \
yum clean all && \
rm -rf /var/cache/yum/*
COPY apache-tomcat-${VERSION}.tar.gz /
RUN source /etc/profile && \
tar zxf apache-tomcat-${VERSION}.tar.gz && \
mv apache-tomcat-${VERSION} /usr/local/tomcat && \
rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* && \
mkdir /usr/local/tomcat/webapps/test && \
echo "ok" > /usr/local/tomcat/webapps/test/status.html && \
sed -i '1a JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"' /usr/local/tomcat/bin/catalina.sh && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENV PATH $PATH:/usr/local/tomcat/bin
WORKDIR /usr/local/tomcat
EXPOSE 8080
CMD ["catalina.sh", "run"]