Dockerfile | 创建 | 编写

文章目录

  • 一、概述
    • Dockerfile结构
  • 二、操作指令
  • 三、编写Dockerfile文件
    • (一)nginx镜像
    • (二)Tomcat镜像

一、概述

  • Dockerfile是由一组指令组成的文件,其中每条指令对应Linux中的一条命令,Docker程序将读取Dockerfile中的指令生成指定镜像

Dockerfile结构

  • 基础镜像信息
  • 维护者信息
  • 镜像操作信息
  • 容器启动时执行指令

Dockerfile每行支持一条指令,每条指令可携带多个参数,支持“#”为开头的注释

二、操作指令

指令 含义
FROM 镜像 指定新镜像所基于的镜像,第一条指令必须为FROM指令,每创建一个镜像就需要一条FROM指令
MAINTAINER 名字 说明新镜像的维护人信息
RUN 命令 在所基于的镜像上执行命令,并提交到新的镜像中
CMD[ “要运行的程序”, “参数1”,“参数2”] 指令启动容器时要运行的命令或者脚本,Dockerfile只能有一条CMD命令,如果指定多条则只能最后一条被执行
EXPOSE 端口号 指定新镜像加载到Docker时要开启的端口
ENV 环境变量 变量值 设置一个环境变量的值,会被后面的RUN使用
ADD 源文件/目录 目标文件/目录 将源文件复制到目标文件,源文件要与Dockerfile位于相同目录中,或者是一个URL
COPY 源文件/目录 目标文件/目录 将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中
VOLUME[ “目录” ] 在容器中创建一个挂载点
USER 用户名/UID 指定运行容器时的用户
WORKDIR 路径 为后续的RUN、CMD、ENTRYPOINT指定工作目录
ONBUILD 命令 指定所生成的镜像作为一个基础镜像时所要运行的命令

三、编写Dockerfile文件

(一)nginx镜像

mkdir nginx
cd nginx/
//将nginx1.12.0源码包拖到nginx/中

在这里插入图片描述

vim Dockerfile

#基于基础镜像
FROM centos:7
#用户信息
MAINTAINER li
#添加环境包
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
#下载nginx软件包
ADD nginx-1.12.0.tar.gz /usr/local/src
WORKDIR /usr/local/src
#指定工作目录
WORKDIR nginx-1.12.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
#指定http和https端口
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf

#添加宿主机中run.sh到容器中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]

Dockerfile | 创建 | 编写_第1张图片

vim run.sh

#!/bin/bash
/usr/local/nginx/sbin/nginx

Dockerfile | 创建 | 编写_第2张图片

//创建新镜像
docker build -t nginx:new .

docker run -d -P nginx:new
docker ps -a

http://192.168.10.20:49156/

Dockerfile | 创建 | 编写_第3张图片
Dockerfile | 创建 | 编写_第4张图片
Dockerfile | 创建 | 编写_第5张图片

(二)Tomcat镜像

mkdir tomcat
cd tomcat/
拷贝apache-tomcat-9.0.16.tar.gz和jdk-8u201-linux-x64.rpm
vim Dockerfile

#基于基础镜像
FROM centos:7
#用户信息
MAINTAINER li
#复制rpm包,并安装
COPY jdk-8u201-linux-x64.rpm /
RUN rpm -ivh jdk-8u201-linux-x64.rpm

#配置环境变量
ENV JAVA_HOME /usr/java/jdk1.8.0_201-amd64
ENV CLASSPATH /usr/java/jdk1.8.0_201-amd64/lib/tools.jar:/usr/java/jdk1.8.0_201-amd64/lib/dt.jar
ENV PATH /usr/java/jdk1.8.0_201-amd64/bin:$PATH

#解压tomcat包到容器,并改名为tomcat
ADD apache-tomcat-9.0.16.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv apache-tomcat-9.0.16 /usr/local/tomcat

#开启tomcat服务,ENTRYPOINT用于设置容器开启时的第一条命令,tomcat的启动脚本是catalina.sh
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]

Dockerfile | 创建 | 编写_第6张图片

docker build -t tomcat:v1 .
docker run -d --name tomcat1 -p 1212:8080 tomcat:v1

http://192.168.10.20:1212

Dockerfile | 创建 | 编写_第7张图片
Dockerfile | 创建 | 编写_第8张图片
Dockerfile | 创建 | 编写_第9张图片

你可能感兴趣的:(docker)