DockerFile

DockerFile

DockerFile简介

# dockerfile是面向开发的,是一个命令脚本文件,用来构造镜像的。
# 1.编写dockerfile命令脚本文件
# 2.docker build -f dockerfile所在路径 -t 生成的镜像名称 生成到哪儿的路径 --> 构造镜像
# 3.docker run --> 运行镜像
# 4.docker push --> 发布镜像(DockerHub,阿里云镜像仓库)

dockerfile 基础知识

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

img

查看Docker Hub官网,镜像的DockerFile:

DockerFile 指令

FROM # 基础镜像,一切从这里开始构建(例如:centos)
MAINTAINER #镜像是谁写的(一般是作者+邮箱)
RUN # 镜像构建的时候需要运行的命令
ADD # 在centos的基础上添加需要的东西(例如:tomcat)
WORKDIR # 运行镜像后,进入控制台的工作目录(例如:/bin/bash)
VOLUME # 数据卷挂在的目录(和手动在命令行写-v一样)
EXPOSE # 映射端口(和手动在命令行写-p一样)
CMD # 指定容器启动的时候要运行的命令,*命令替换
ENTRYPOINT # 指定容器启动的时候要运行的命令,*命令追加
-------------------------------------------------------------
CMD ["ls","-a"] , docker run ls -l # ls -l 会把原来的 ls -a 替换掉,最终执行ls -l
# 注意:cmd,如果写成run -l,会报错:因为-l会把原来的ls -a 替换掉,执行-l,-l不是命令就报错
ENTRYPOINT ["ls","-a"] , docker run -l  # -l 会追加到 ls -a后面,最终执行 ls -a -l
ONBUILD # 当构建一个被继承DockerFile,这个时候就会运行ONBUILD的指令(说白了就是一个触发指令)
-------------------------------------------------------------
COPY # 类似ADD,将我们文件拷贝到镜像中
ENV # 构建的时候设置环境变量(和手动在命令行写-e一样)

img

练习1:Centos镜像

Docker Hub中99%的镜像都是以FROM scratch为基础,然后再配置自己需要的软件和配置。

# 1.编写dockerfile脚本
FROM centos
MAINTAINER auv<email>
ENV MYPATH /user/local
WORKDIR $MYPATH
RUN yum -y install vim # 安装vim
RUN yum -y install net-tools # 安装net-tolls(ifconfig命令...)
EXPOSE 80
CMD echo $MYPATH
CMD echo "---end---"
CMD /bin/bash
# 2.docker build -f dockerfile脚本文件路径 -t 生成的镜像名称 镜像生成后的所在路径
# 3.docker run -it mycentos , 进入控制后pwd会发现工作目录是/user/local,运行vim,ifconfig也是都可以

# 4. docker history imageName(imageId) 查看镜像的构建历史

练习2:Tomcat镜像

  1. 准备jdk和tomcatlinux版的压缩包

     

     

  2. 编写dockerfile脚本文件(官方命名Dockerfile,build时就会自动找这个文件,就不用-f了)

FROM centos
MAINTAINER auv<email>

COPY readme.txt /usr/local/

ADD jdk-8u221-linux-x64.tar.gz /usr/local/ # 会自动解压到/usr/local/目录下
ADD apache-tomcat-8.5.73.tar.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH # 工作目录,run镜像容器后,pwd 便会发现控制台位置在/usr/local

# 配置jdk,tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_221
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.73
ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.73
ENV PATH $PATH:$HAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-8.5.73/bin/startup.sh && tail -f /usr/local/apache-tomcat-8.5.73/logs/catalina.out
  1. docker build -t diytomcat .

  2. # 后台运行镜像容器
    docker run -d -p 9090:8080 --name tomcat01 -v D:\docker-file\tomcat\webapps\test:/usr/local/apache-tomcat-8.5.73/webapps/test -v D:\docker-file\tomcat\logs\:/usr/local/apache-tomcat-8.5.73/logs diytomcat
  3. docker exec -it containerId bash # 进入控制台

  4. 在宿主机D:\docker-file\tomcat\webapps\test挂载的目录下添加 index.html

    <h1>Hello World</h1>
  5. 在宿主机浏览器访问 http://localhost:9090/test/index.html

     

  6. 查看容器和宿主机数据卷挂载的目录,都是数据共享的!

posted @ 2022-01-17 17:47  迷路小孩  阅读(91)  评论(0)    收藏  举报