借助Docker hub自己手动制作镜像(以Nginx镜像为例)


前言

Docker作为目前主流技术,主要有以下优点:

  • 简化程序:
    Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。
  • 节省开支:
    一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。
  • 多样化:
    Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。

在日常使用过程中,如果想获取镜像,通常通过docker search & docker pull即可获取到自己想要的镜像,但有时会出现官方镜像版本过低无法满足自己要求的情况,一方面不放心使用别人打的第三方镜像,一方面自己制作流程过于繁琐容易出问题,此时即可借助Docker hub自己来手动制作一个镜像。


一、Docker hub是什么?

目前 Docker 官方维护了一个公共仓库 Docker Hub,其中已经包括了数量超过 2,650,000 的镜像。大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。

Docker Hub地址:https://hub.docker.com/

二、镜像制作步骤

1.进入Docker hub官网,获取源文件

Docker hub官网


点击NGINX,进入NGINX介绍页:

Nginx镜像介绍页

这里就是Nginx镜像的介绍页,其中Tags中就是目前Docker hub上所有的Nginx镜像版本,今天我们主要讲如何通过Maintainers来手动制作镜像。


点击the NGINX Docker Maintainers:

Nginx官方镜像库

进入到Docker hub的官方脚本库了,这里就是本文的主角了:制作Nginx镜像的Dockerfile文件以及所有脚本。


2.制作镜像

将上述Dockerfile文件及脚本全部下载到本地:

Nginx脚本目录

注:我这里的DockerfileNginx1231就是Docker hub上的Dockerfile,没有作任何修改。


制作Nginx镜像:

  • 修改DockerfileNginx1231文件,将ENTRYPOINT ["/docker-entrypoint.sh"]改为ENTRYPOINT ["sh", "/docker-entrypoint.sh"],此处不改的话镜像启动时会报错。
  • 制作镜像,docker build -t nginx:1.23.1-0.2 -f DockerfileNginx1231 .
MacBook-Pro-2  ~/temp/nginxImage  docker build -t nginx:1.23.1-0.2 -f DockerfileNginx1231 .
[+] Building 2.3s (11/11) FINISHED
 => [internal] load build definition from DockerfileNginx1231                                                                                                                                                   0.4s
 => => transferring dockerfile: 46B                                                                                                                                                                             0.0s
 => [internal] load .dockerignore                                                                                                                                                                               0.3s
 => => transferring context: 2B                                                                                                                                                                                 0.0s
 => [internal] load metadata for docker.io/library/alpine:3.16                                                                                                                                                  1.8s
 => [1/6] FROM docker.io/library/alpine:3.16@sha256:7580ece7963bfa863801466c0a488f11c86f85d9988051a9f9c68cb27f6b7872                                                                                            0.0s
 => [internal] load build context                                                                                                                                                                               0.0s
 => => transferring context: 187B                                                                                                                                                                               0.0s
 => CACHED [2/6] RUN set -x     && addgroup -g 101 -S nginx     && adduser -S -D -H -u 101 -h /var/cache/nginx -s /sbin/nologin -G nginx -g nginx nginx     && apkArch="$(cat /etc/apk/arch)"     && nginxPack  0.0s
 => CACHED [3/6] COPY docker-entrypoint.sh /                                                                                                                                                                    0.0s
 => CACHED [4/6] COPY 10-listen-on-ipv6-by-default.sh /docker-entrypoint.d                                                                                                                                      0.0s
 => CACHED [5/6] COPY 20-envsubst-on-templates.sh /docker-entrypoint.d                                                                                                                                          0.0s
 => CACHED [6/6] COPY 30-tune-worker-processes.sh /docker-entrypoint.d                                                                                                                                          0.0s
 => exporting to image                                                                                                                                                                                          0.0s
 => => exporting layers                                                                                                                                                                                         0.0s
 => => writing image sha256:a684e750ca130ccc802c7235e96753eda7c91a59ade3ec344c2833f2307ff36c                                                                                                                    0.0s
 => => naming to docker.io/library/nginx:1.23.1-0.2                                                                                                                                                             0.0s

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
  • 查看镜像是否制作成功
MacBook-Pro-2  ~/temp/nginxImage  docker images |grep nginx
nginx                                                 1.23.                                                   a684e750ca13   23 hours ago    23.5MB
nginx                                                 1.23.1                                                  a684e750ca13   23 hours ago    23.5MB
nginx                                                 1.23.1-0.1                                              a684e750ca13   23 hours ago    23.5MB
nginx                                                 1.23.1-0.2                                              a684e750ca13   23 hours ago    23.5MB

3.验证镜像

查看新镜像版本(启动命令略):

MacBook-Pro-2  ~/temp/nginxImage  docker exec -it aeece508702743cecd /bin/sh
/ # nginx -v
nginx version: nginx/1.23.1
/ #

其余功能均验证无误,到此一个新版本的镜像就制作结束了。


总结

以上就是今天要讲的内容,本文简单介绍了如果借助Docker hub的官方脚本及Dockerfile文件来手动制作镜像,Dcoker技术是划时代的,它帮我们简化了很多步骤,欢迎大家讨论交流。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值