DockerFile

DockerFile介绍

Dockerfile

  • dockerfile是用来构建docker镜像的文件,命令参数脚本

构建步骤

  1. 编写一个dockerfile文件
  2. docker buile构建为一个镜像
  3. docker run运行镜像
  4. docker push发布镜像(DockerHub,阿里云镜像仓库)

DockerFile构建过程

基础知识

  1. 每个保留关键字都必须是大写字母
  2. 执行从上到下顺序执行
  3. 表示注释
  4. 每一个指令都会创建提交一个新的镜像层,并提交。

  • dockerfile是面向开发的,发布项目做镜像就需要编写dockerfile文件,这个文件十分简单
  • Dockerfile:构建文件,定义了一切的步骤,源代码
  • Dockerimages:通过DockerFile构建生成的镜像,最终发布和运行的产品
  • Docker容器:容器就是镜像运行起来提供服务器

DockerFile指令

FROM          # 基础镜像,一切从这里开始构建
NAINTAINER    # 镜像是谁写的,姓名+邮箱
RUN           # 镜像构建的时候需要运行的命令
ADD           # 步骤:tomcat镜像,这个tomcat压缩包。添加内容
WORKDIR       # 镜像的工作目录
VOLUME        # 挂载的目录
EXPOSE        # 暴露端口
CMD           # 指定这个容器启动的hi收要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT    # 指定这个容器启动的hi收要运行的命令,可以追加命令
ONBUILD       # 当构建一个被继承 DockerFile 这个时候就会运行 ONBUILD 的指令,触发指令
COPY          # 类似ADD,将我们文件拷贝到镜像中
ENV           # 构建的时候设置环境变量

测试

官方

  • Docker Hub中99%镜像都是从这个基础镜像过来的FROM scratch,然后配置需要的软件和配置来进行的构建
    https://hub.docker.com/
FROM scratch
ADD centos-7-x86_64-docker.tar.xz /

LABEL \
    org.label-schema.schema-version="1.0" \
    org.label-schema.name="CentOS Base Image" \
    org.label-schema.vendor="CentOS" \
    org.label-schema.license="GPLv2" \
    org.label-schema.build-date="20201113" \
    org.opencontainers.image.title="CentOS Base Image" \
    org.opencontainers.image.vendor="CentOS" \
    org.opencontainers.image.licenses="GPL-2.0-only" \
    org.opencontainers.image.created="2020-11-13 00:00:00+00:00"

CMD ["/bin/bash"]

创建测试

  • 创建一个自己的centos
# 1.编写Dockerfile的文件mydockerfile-centos
FROM centos:7
MAINTAINER changebaobao<3224285605@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MTPATH
CMD echo "----end----"
CMD /bin/bash

# 2. 通过这个文件构建镜像
# 命令 docker build -f dockerfile文件路径 -f 镜像名:[tag]
docker build -f mydockerfile-centos -t mycentos:0.1 .

# 3.测试运行
docker run -it mycentos:0.1

pwd                 # 工作目录是默认目录
ifconfig            # 原本是没有这些命令的

CMD 和 ENTRYPOINT 区别

CMD             # 指定这个容器启动的时候要运行的命令,最后只有会生效
ENTRYPOINT      # 指定这个容器启动要运行的命令,可以追加命令
  • 测试cmd
# 编写dockerfile文件
vim dockerfile-cmd-test

FROM centos:7
CMD ["ls","-0a"]

# 构建镜像
docker build -f dockerfile-cmd-test -t cmdtest .

# run运行
docker run 容器id
  • 测试
# 编写dockerfile文件
vim dockerfile-cmd-entrypoint

FROM centos:7
ENTRYPOINT ["ls","-a"]

# 构建镜像
docker build -f dockerfile-cmd-entrypoint -t entorypoint-test .

# run运行
docker run 容器id -l

#追加命令是直接拼接在我们的 ENTRYPOINT 命令后面的

Tomcat镜像

  1. 准备镜像文件 tomcat 压缩包,jdk的压缩包
jdk-8u333-linux-x64.tar.gz
apache-tomcat-9.0.62.tar.gz
  1. 编写Dockerfile文件,官方命名,build会自动寻找这个文件,就不需要-f指定了
FROM centos:7
MAINTAINET cp<3224285605@qq.com>

COPY readme.txt /usr/local/readme.txt
ADD jdk-8u333-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.62.tar.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local
WORKIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_33
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.62
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.62
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-9.0.62/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.62/bin/logs/catalina.out
  1. 构建镜像
docker build -t diytomcat .
  1. 启动镜像
docker run -d -p 9090:8080 --name mytomcat -v /home/chanegbaobao/build/tomcat/test:/usr/local/apache-tomcat-9.0.62/webapps/test -v  /home/chanegbaobao/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.62/logs diytomcat

docker exec -it 849f1c297124 /bin/bash
  1. 访问测试
  2. 发布项目(由于做了卷挂载,我们直接在本地编写项目就可以发布了)

发布镜像

  • DockerHub
  1. 官网注册账号
  2. 确定这个账号可以登录
  3. 在我们服务器上提交自己的镜像
docker login -u 用户名
  1. 登陆完毕,docker push
docker push 作者/镜像名:版本
  • 阿里云镜像服务
  1. 登陆阿里云
  2. 找到容器镜像服务
  3. 创建命名空间
  4. 创建容器镜像

posted @ 2022-05-07 17:45  你在学什么  阅读(124)  评论(0编辑  收藏  举报