dockerfile是用来构建镜像的文件!命令参数脚本
构建步骤
- 编写一个dockerfile文件
- docker build 构建成为一个镜像
- docker run 运行一个jingxaing
- docker push 发布镜像(dockerHub 阿里云镜像仓库)
基础知识
dockerfile是面向开发的,我们以后要发布项目,做镜像,需要些dockerfile文件,十分简单
Dockerfile:构建文件,定义了一切的步骤,源代码
Dockerimages:通过Dockerfile构建生成的镜像,最终发布和运行产品
Docker容器:容器就是镜像运行起来提供服务的
Dockerfile指令
FROM # 基础镜像,一切从这里构建MAINTAINER #镜像是谁写的,姓名+邮箱RUN # 镜像构建的时候需要运行的命令ADD #步骤 :tomcat镜像 添加WORKDIR #镜像的工作目录VOLUNE # 挂载的目录EXPOSE #暴露端口RUN # 运行CMD #指定这个容器启动的时候要运行的命令ENTRYPOINT #指定这个容器的启动的时候要运行的命令,可以追加命令ONBUILD # 当构建一个被继承Dockerfile 就会运行onbuild 触发指定COPY # 类似addENV #构建的时候设置环境变量
docker hub中 99% 镜像都是从这个基础镜像开始的
实战测试
编写dockerfile文件[root@iZbp1d0213clo5fn6z0fsfZ dockerfile]# cat mydockerfileFROM centosMAINTAINER yangsen<838725628@qq.com>ENV MYPATH /usr/localWORKDIR $MYPATHRUN yum -y install vimRUN yum -y install net-toolsEXPOSE 80CMD echo $MYPATHCMD echo "----end----"CMD /bin/bash# 通过文件构建镜像dockers build -f dockerifle文件路径 -t 镜像名:[tag] .[root@iZbp1d0213clo5fn6z0fsfZ dockerfile]# docker build-f mydockerfile -t mycentos:0.1 .返回Successfully built a72be511a71aSuccessfully tagged mycentos:0.1
测试
可以列出本地镜像变更历史
docker history
测试cmd
vim cmd-testFROM centosCMD ["ls","-a"][root@iZbp1d0213clo5fn6z0fsfZ dockerfile]# docker build-f dockerfile-cmd-test/cmd-test -t cmdtest .# run运行 命令生效[root@iZbp1d0213clo5fn6z0fsfZ dockerfile]# docker run bb3593814fbe....dockerenvbindevetchomeliblib64lost+foundmediamntoptprocrootrunsbinsrvsystmpusrvar[root@iZbp1d0213clo5fn6z0fsfZ dockerfile]#
实战tomcat镜像
准备镜像文件 tomcat压缩包 jdk压缩包

编写dockerfile文件
官方命名Dockerfile build的时候就不需要 -f 指令
MAINTAINER yangsen<838725628@qq.com>COPY readme.txt /usr/local/readme.txtADD jdk-8u291-linux-x64.tar.gz /usr/local/ADD apache-tomcat-9.0.46.tar.gz /usr/local/RUN yum -y install vimENV MYPATH /usr/localWORK $MYPATHENV JAVA_HOME /usr/local/jdk1.8.291ENV CALSSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV CATALINA_HOME /usr/local/apache-tomcat-9.0.46ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.46ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/binEXPOSE 8080CMD /usr/local/apache-tomcat-9.0.46/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.46/bin/logs/catalina.out
构建镜像docker build -t diytomcat .
启动[root@iZbp1d0213clo5fn6z0fsfZ yangsen]# docker run -d -p 3344:8080 --name yangtomcat -v /home/yangsen/tomcat/test:/usr/local/apache-tomcat-9.0.46/webapps/test -v //home/yangsen/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.46/logs diytomcat
发布镜像
登录[root@iZbp1d0213clo5fn6z0fsfZ /]# docker login --helpUsage: docker login [OPTIONS] [SERVER]Log in to a Docker registry.If no server is specified, the default is defined by the daemon.Options:-p, --password string Password--password-stdin Take the password from stdin-u, --username string Username[root@iZbp1d0213clo5fn6z0fsfZ /]#
提交镜像
[root@iZbp1d0213clo5fn6z0fsfZ /]# docker push yangsen/diytomcat:1.0
[root@iZbp1d0213clo5fn6z0fsfZ /]# docker tag 1cd48e02549a yangsen/tomcat:1.0
构建参数和环境变量
区别
arg只存在于镜像构建,构建完成之后不会保存在镜像,无法使用比那辆
docker image build -f arg-demo -t arg-3.0 —build-arg VERSION=2.0.0.2
—build-arg 会替换file里面的arg变量的内容
env 构建可以使用,作为环境变量永久保存在容器里面
ENV
ARG
容器启动命令
设置容器启动时的默认会执行的命令
docker system prune -f 删除所有已经退出停止的容器docker image prune -a 删除没有使用的镜像
区别
- cmd设置的命令,可以在run时候传入其他命令,覆盖掉cmd命令,但是entrypoint所设置的命令一定会执行
- 可以联合使用,entrypoint设置执行的命令,cmd设置参数
CMD
ENTRYPOINT
