DockerFile介绍
Dockerfile
- dockerfile是用来构建docker镜像的文件,命令参数脚本
构建步骤
- 编写一个dockerfile文件
- docker buile构建为一个镜像
- docker run运行镜像
- docker push发布镜像(DockerHub,阿里云镜像仓库)
DockerFile构建过程
基础知识
- 每个保留关键字都必须是大写字母
- 执行从上到下顺序执行
- 表示注释
- 每一个指令都会创建提交一个新的镜像层,并提交。
- 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 # 构建的时候设置环境变量
测试
官方
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"]
创建测试
# 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 # 指定这个容器启动要运行的命令,可以追加命令
# 编写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镜像
- 准备镜像文件 tomcat 压缩包,jdk的压缩包
jdk-8u333-linux-x64.tar.gz
apache-tomcat-9.0.62.tar.gz
- 编写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
- 构建镜像
docker build -t diytomcat .
- 启动镜像
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
- 访问测试
- 发布项目(由于做了卷挂载,我们直接在本地编写项目就可以发布了)
发布镜像
- 官网注册账号
- 确定这个账号可以登录
- 在我们服务器上提交自己的镜像
docker login -u 用户名
- 登陆完毕,docker push
docker push 作者/镜像名:版本
- 登陆阿里云
- 找到容器镜像服务
- 创建命名空间
- 创建容器镜像