Dockerfile学习
Dockerfile学习
Dockerfile介绍
dockefile是用来构建docker镜像的文件,命令参数脚本。
构建步骤:
- 编写一个dockerfile文件
- docker build 构建成为一个镜像
- docker run 运行镜像
- docker push 发布镜像(DockerHub,阿里云镜像仓库)
Dockerfile指令(大小写敏感)
FROM #基础镜像,一切从这里开始构建,eg:centos
MAINTAINER #作者
RUN #镜像构建的时候需要运行的命令
ADD #步骤,添加一些文件到镜像里面,比如tomcat 的压缩包
WORKDIR #镜像工作的目录
VOLUME #挂在的目录
EXPOSE #暴露端口
CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD #当构建一个被继承 Dockerfile 这个时候就会运行ONBUILD 的指令,属于触发指令
COPY #类似ADD,将文件拷贝到镜像中
ENV #构建的时候设置环境变量
构建自己的centos
从docker仓库拉的centos 镜像是没有vim 命令的。我们创建一个自带vim命令的centos镜像。
在此之前可以看看别人的镜像是怎么制作的。
# 命令,查看镜像的历史
docker history nginx
# 结果
IMAGE CREATED CREATED BY SIZE COMMENT
605c77e624dd 2 years ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B
<missing> 2 years ago /bin/sh -c #(nop) STOPSIGNAL SIGQUIT 0B
<missing> 2 years ago /bin/sh -c #(nop) EXPOSE 80 0B
<missing> 2 years ago /bin/sh -c #(nop) ENTRYPOINT ["/docker-entr… 0B
<missing> 2 years ago /bin/sh -c #(nop) COPY file:09a214a3e07c919a… 4.61kB
<missing> 2 years ago /bin/sh -c #(nop) COPY file:0fd5fca330dcd6a7… 1.04kB
<missing> 2 years ago /bin/sh -c #(nop) COPY file:0b866ff3fc1ef5b0… 1.96kB
<missing> 2 years ago /bin/sh -c #(nop) COPY file:65504f71f5855ca0… 1.2kB
<missing> 2 years ago /bin/sh -c set -x && addgroup --system -… 61.1MB
<missing> 2 years ago /bin/sh -c #(nop) ENV PKG_RELEASE=1~bullseye 0B
<missing> 2 years ago /bin/sh -c #(nop) ENV NJS_VERSION=0.7.1 0B
<missing> 2 years ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.21.5 0B
<missing> 2 years ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B
<missing> 2 years ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 2 years ago /bin/sh -c #(nop) ADD file:09675d11695f65c55… 80.4MB
-
我们再/home/dockerfile目录下添加一个dockerfile文件。
FROM centos #一切从这儿开始,基础镜像是centos MAINTAINER sanqiangyuan #作者 ENV MYPATH /usr/local #创建一个环境变量 WORKDIR $MYPATH #指定工作目录,相当于镜像执行之后,自动到指定的目录去执行命令。 RUN yum -y install vim #执行具体的命令,下载vim 和 net-tools run yum -y install net-tools EXPOSE 80 #暴露一个端口 CMD echo $mypath #输出点东西,可以直接看到自己的镜像是否启动成功 CMD echo "----end----" CMD /bin/bash -
构建自己的镜像
#命令 docker build -f dockerfile文件路径 -t 镜像名:版本 . docker build -f mydockerfile-centos -t mycentos:0.1 . #构建成功 Successfully built e2badf21vcdfv Successfully tagged mycentos:0.1 -
测试运行
构建自己的tomcat镜像
在此之前可以看看官方的镜像是怎么制作的。
IMAGE CREATED CREATED BY SIZE COMMENT
fb5657adc892 2 years ago /bin/sh -c #(nop) CMD ["catalina.sh" "run"] 0B
<missing> 2 years ago /bin/sh -c #(nop) EXPOSE 8080 0B
<missing> 2 years ago /bin/sh -c set -eux; nativeLines="$(catalin… 0B
<missing> 2 years ago /bin/sh -c set -eux; savedAptMark="$(apt-m… 20.2MB
<missing> 2 years ago /bin/sh -c #(nop) ENV TOMCAT_SHA512=c2d2ad5… 0B
<missing> 2 years ago /bin/sh -c #(nop) ENV TOMCAT_VERSION=10.0.14 0B
<missing> 2 years ago /bin/sh -c #(nop) ENV TOMCAT_MAJOR=10 0B
<missing> 2 years ago /bin/sh -c #(nop) ENV GPG_KEYS=A9C5DF4D22E9… 0B
<missing> 2 years ago /bin/sh -c #(nop) ENV LD_LIBRARY_PATH=/usr/… 0B
<missing> 2 years ago /bin/sh -c #(nop) ENV TOMCAT_NATIVE_LIBDIR=… 0B
<missing> 2 years ago /bin/sh -c #(nop) WORKDIR /usr/local/tomcat 0B
<missing> 2 years ago /bin/sh -c mkdir -p "$CATALINA_HOME" 0B
<missing> 2 years ago /bin/sh -c #(nop) ENV PATH=/usr/local/tomca… 0B
<missing> 2 years ago /bin/sh -c #(nop) ENV CATALINA_HOME=/usr/lo… 0B
<missing> 2 years ago /bin/sh -c #(nop) CMD ["jshell"] 0B
<missing> 2 years ago /bin/sh -c set -eux; arch="$(dpkg --print-… 343MB
<missing> 2 years ago /bin/sh -c #(nop) ENV JAVA_VERSION=11.0.13 0B
<missing> 2 years ago /bin/sh -c #(nop) ENV LANG=C.UTF-8 0B
<missing> 2 years ago /bin/sh -c #(nop) ENV PATH=/usr/local/openj… 0B
<missing> 2 years ago /bin/sh -c { echo '#/bin/sh'; echo 'echo "$J… 27B
<missing> 2 years ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/local/… 0B
<missing> 2 years ago /bin/sh -c set -eux; apt-get update; apt-g… 11.3MB
<missing> 2 years ago /bin/sh -c apt-get update && apt-get install… 152MB
<missing> 2 years ago /bin/sh -c set -ex; if ! command -v gpg > /… 18.9MB
<missing> 2 years ago /bin/sh -c set -eux; apt-get update; apt-g… 10.7MB
<missing> 2 years ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 2 years ago /bin/sh -c #(nop) ADD file:c03517c5ddbed4053… 124MB
其实我们可以在别人的镜像上面做修改,然后打包生成自己的镜像。为了学习,还是从头制作一个吧。
-
准备tomcat镜像文件
需要两个压缩包,tomcat压缩包和jdk压缩包放在自己的工作目录
# 命令 cd /home/dockerfile/tomcat # 来到我们的工作目录 vim Dockerfile # Dockerfile是官方命名,用这个名字build镜像,不需要指定文件名,默认找Dockerfile文件构建 FROM centos MAINTAINER suanqianyuan ADD /home/tools/apache-tomcat-9.0.86.tar.gz /usr/local/ # ADD 会自动解压 ADD /home/tools/jdk-8u401-linux-x64.tar.gz /usr/local/ ENV MYPATH /usr/local WORKDIR $MYPATH ENV JAVA_HOME /usr/local/jdk1.8.0_401 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.86 ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.86 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin EXPOSE 8080 CMD /usr/local/apache-tomcat-9.0.86/bin/startup.sh && tail -f /usr/local/apache-tomcat-9.0.86/logs/catalina.out -
构建镜像
docker build -t mytomcat_02 . -
测试运行
# 运行我们的镜像。 docker run -d -p 9010:8080 -it mytomcat_02 # 查看运行状态 docker ps # CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 77c972ce2c6d mytomcat_02 "/bin/sh -c '/usr/lo…" 11 minutes ago Up 11 minutes 0.0.0.0:9010->8080/tcp, :::9010->8080/tcp musing_sinoussi测试一下
curl localhost:9010/
发布镜像
-
发布到DockerHub(一般不用,这个要连外网)
这个需要到官网注册账号才行。有了账号就可以登录了。
docker login --help Usage: docker login [OPTIONS] [SERVER] Log in to a 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登录之后就可以docker push了
Usage: docker push [OPTIONS] NAME[:TAG] Upload an image to a registry Aliases: docker image push, docker push Options: -a, --all-tags Push all tags of an image to the repository --disable-content-trust Skip image signing (default true) -q, --quiet Suppress verbose outputdocker push mytomcat_02- 发布到阿里云镜像
- 登录阿里云控制台
- 找到容器镜像服务
- 创建命名空间
- 上面步骤完成以后,会自动跳转到镜像仓库的基本信息页面,非常详细,可以跟着上面的步骤进行上传和拉取镜像
- 发布到阿里云镜像
浙公网安备 33010602011771号