Docker Hub 中99%的镜像都是从这个基础镜像过来的 FROM scratch

dockerfile 命令

都是大写的

  1. FROM # 基于镜像,或继承那个镜像
  2. MAINTAINER # 作者及邮箱 例:wpx<54544645@qq.com>
  3. RUN # 容器构建时需要执行的命令 列:yum -y install vim
  4. EXPOSE # 当前容器对外暴露的端口
  5. WORKDIR # 指定才创建容器后 终端登录进来的工作目录
  6. ENV # 用来在构建过程中设置环境变量(ENV 变量名 值)
  7. ADD # 讲宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和tar压缩包
  8. COPY # 复制文件或目录到镜像中,COPY src dest,COPY["src","dest"]
  9. VOLUME # 建立容器数据卷,用于数据的保存和持久化工作
  10. CMD # 指定容器启动后 要执行的命令,可以又多个但只有最后一个有效,CMD会被docker run 后面的参数替换
  11. ENTRYPOINT # 指定容器启动后 要执行的命令,和CMD一样,但其命令会在docker run 都追加
  12. ONBUILD # 当构建一个被继承的dockerFile是运行命令,父镜像在被子镜像继承后父镜像的onbuild被触发

CMD和ENTRYPOINT的区别

  1. CMD 只执行一个命令, run的时候带进去的 命令 会替换镜像中最后一个CMD的命令
  2. ENTRYPOINT 是追加命令

例子:myCentos

创建一个文件 mydockerfile.df

  1. FROM centos #在centos镜像的基础上构建
  2. MAINTAINER wpx<54544645@qq.com> #作者信息
  3. ENV MYPATH /usr/local #定义一个变量
  4. WORKDIR $MYPATH
  5. RUN yum -y install vim #安装vim
  6. RUN yum -y install net-tools #安装网络工具 ifconfig
  7. EXPOSE 80 #开放映射80端口
  8. CMD echo $MYPATH
  9. CMD echo "----bilud ok----"
  10. CMD /bin/bash

编译文件

  1. #编译构建
  2. [root@localhost dockerfile]# docker build -f mydockerfile.df -t mycentos:1.0 . #后面有个点
  3. #构建生产在本地镜像库中
  4. [root@localhost dockerfile]# docker images
  5. REPOSITORY TAG IMAGE ID CREATED SIZE
  6. mycentos 1.0 aa7f62477005 59 seconds ago 326MB
  7. tomcat002 1.0 70eda2cf84f6 35 hours ago 685MB
  8. #运行它,vim、ifconfig 命令都有了
  9. [root@localhost dockerfile]# docker run -it mycentos:1.0

一个镜像的变更历史

  1. [root@localhost dockerfile]# docker history nginx
  2. IMAGE CREATED CREATED BY SIZE COMMENT
  3. 605c77e624dd 3 weeks ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B
  4. <missing> 3 weeks ago /bin/sh -c #(nop) STOPSIGNAL SIGQUIT 0B
  5. <missing> 3 weeks ago /bin/sh -c #(nop) EXPOSE 80 0B
  6. <missing> 3 weeks ago /bin/sh -c #(nop) ENTRYPOINT ["/docker-entr… 0B
  7. <missing> 3 weeks ago /bin/sh -c #(nop) COPY file:09a214a3e07c919a… 4.61kB
  8. <missing> 3 weeks ago /bin/sh -c #(nop) COPY file:0fd5fca330dcd6a7… 1.04kB
  9. <missing> 3 weeks ago /bin/sh -c #(nop) COPY file:0b866ff3fc1ef5b0… 1.96kB
  10. <missing> 3 weeks ago /bin/sh -c #(nop) COPY file:65504f71f5855ca0… 1.2kB
  11. <missing> 3 weeks ago /bin/sh -c set -x && addgroup --system -… 61.1MB
  12. <missing> 3 weeks ago /bin/sh -c #(nop) ENV PKG_RELEASE=1~bullseye 0B
  13. <missing> 3 weeks ago /bin/sh -c #(nop) ENV NJS_VERSION=0.7.1 0B
  14. <missing> 3 weeks ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.21.5 0B
  15. <missing> 4 weeks ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B
  16. <missing> 4 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0B
  17. <missing> 4 weeks ago /bin/sh -c #(nop) ADD file:09675d11695f65c55… 80.4MB

发布到阿里云

登录阿里云 容器镜像服务进入仓库 有对应的示例

推送镜像到registry
  1. # 登录阿里云 仓库
  2. [root@localhost dockerfile]# docker login --username=tb30267377 registry.cn-hangzhou.aliyuncs.com
  3. Password:
  4. WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
  5. Configure a credential helper to remove this warning. See
  6. https://docs.docker.com/engine/reference/commandline/login/#credentials-store
  7. Login Succeeded #登录成功
  8. #改一下镜像名及版本,本地会保留原来的,所有版本仓库会多一个,可不做这一步
  9. $ docker tag aa7f62477005 registry.cn-hangzhou.aliyuncs.com/wpx123/my_images:1.1
  10. #push上去
  11. $ docker push registry.cn-hangzhou.aliyuncs.com/wpx123/my_images:1.1
  12. [root@localhost dockerfile]# docker push registry.cn-hangzhou.aliyuncs.com/wpx123/my_images:1.1
  13. The push refers to repository [registry.cn-hangzhou.aliyuncs.com/wpx123/my_images]
  14. 6ef115d68095: Pushed
  15. 2896c0715a13: Pushed
  16. 74ddd0ec08fa: Pushed
  17. 1.1: digest: sha256:0627e31ba66744a4d95c6fba65c4654062c2ef76e6b922699f45575138ee4fea size: 953
  18. #pull拉下来
  19. $ docker pull registry.cn-hangzhou.aliyuncs.com/wpx123/my_images:1.1
  20. #退出登录
  21. [root@localhost dockerfile]# docker logout
  22. Removing login credentials for https://index.docker.io/v1/