DockerFile

4、DockerFile

Dockerfile是一个包含用于组合镜像的命令的文本文档
Docker通过读取Dockerfile中的指令按步自动生成镜像
docker build -t 机构/镜像名<:tags> Dockerfile目录

案例1 自动部署Tomcat应用

FROM tomcat:latest
MAINTAINER mashibing.com
WORKDIR /usr/local/tomcat/webapps
ADD docker-web ./docker-web

1、镜像分层

在这里插入图片描述
上述DockerFile运行时,docker会将命令分成几步镜像化,这样做的好处是

  • 同样的步骤不会再次构建,节省性能时间
  • 中断命令后,重新构建,可从失败的地方直接开始,而不是从头开始
  • 其他DockerFile运行时可以重用

分层结构如下图:
在这里插入图片描述2、DockerFile 基础命令

1、FROM - 基于基准镜像
FROM centos  #制作基准镜像(基于centos:lastest)
FROM scratch   #不依赖任何基准镜像base image
FROM tomcat: 9.0.22-jdk8-openjdk
尽量使用官方提供的Base Image

2、切换工作目录
WORKDIR /usr/local
WORKDIR /usr/local/newdir #有目录就会打开,没有目录就会创建
尽量使用绝对路径

3、将文件添加到镜像中
ADD hello / #复制到根路径
ADD test.tar.gz / #添加根目录并解压
ADD 除了复制,还具备添加远程文件功能

4、设置环境变量
ENV JAVA_HOME /usr/local/openjdk8
RUN ${JAVA_HOME}/bin/java -jar test.jar
尽量使用环境常量,可提高程序维护性

EXPOSE - 暴露容器端口
EXPOSE 8080
docker run -p 8000:8080 tomcat

RUN & CMD & ENTRYPOINT
RUN  : 在Build构建时执行命令
ENTRYPOINT : 容器启动时执行的命令
CMD : 容器启动后执行默认的命令或参数

RUN-构建时运行
RUN ["yum","install","-y","vim"] #Exec命令格式

ENTRYPOINT(入口点)用于在容器启动时执行命令
Dockerfile中只有最后一个ENTRYPOINT会被执行
ENTRYPOINT ["ps"] #推荐使用Exec格式

CMD用于设置默认执行的命令
如Dockerfile中出现多个CMD,则只有最后一个被执行
如容器启动时附加指令,则CMD被忽略
CMD ["ps" , "-ef"] #推荐使用Exec格式

完整案例


# ① 基础镜像
FROM python3:v0.1

# ② 作者信息
LABEL maintainer=smartli.smartli_it@163.com

# ③ 执行操作
RUN apt-get update
RUN apt-get install libmysqlclient-dev -y
ADD ./meiduo_mall/ /data/meiduo/meiduo_mall/
WORKDIR /data/meiduo/meiduo_mall/
RUN pip3 install -r requirements.txt
WORKDIR scripts/
RUN pip3 install fdfs_client-py-master.zip
WORKDIR ../
RUN rm -rf ~/.cache/pip/
EXPOSE 8001 8002

# ④ 入口指令
ENTRYPOINT uwsgi --ini uwsgi.ini
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值