docker 发布镜像

如果要推广自己的软件,势必要自己制作 image 文件。

1 制作自己的 Docker 容器

基于 centos 镜像构建自己的 centos 镜像,可以在 centos 镜像基础上,安装相关的软件,之后进行构建新的镜像。

1.1 dockerfile 文件编写

首先,需要在项目的根目录下,新建一个文本文件.dockerignore,写入下面的内容:

bash 复制代码
.git

上面代码表示,这个路径要排除,不要打包进入 image 文件。如果没有路径要排除,这个文件可以不新建。

然后,在项目的根目录下,新建一个文本文件 dockerfile_test,写入下面的内容::

bash 复制代码
FROM centos
MAINTAINER oehuosi<oehuosi@foxmail.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools


EXPOSE 80

CMD echo $MYPATH
CMD echo "-----end-----"
CMD /bin/bash

说明:

  • FROM centos,该 image 文件继承官方的 centos,有标签的话,可以用:连接。Docker Hub中 99% 镜像都是从这个基础镜像过来的FROM scratch , 然后配置需要的软件和配置来进行的构建
  • RUN命令在 image 文件的构建阶段执行,执行结果都会打包进入 image 文件;CMD命令则是在容器启动后执行。另外,一个 Dockerfile 可以包含多个RUN命令生效,但是只有最后一个CMD命令生效。
  • 指定了CMD命令以后,docker container run命令就不能附加命令了(比如/bin/bash),否则它会覆盖CMD命令。
  • 官方的 centos 镜像不包含 vim,net-tools 等软件,这里是在官方的 centos 的基础上安装了 vim,net-tools,并构建新的镜像文件
1.2 构建镜像
bash 复制代码
# 命令: docker build -f dockerfile 文件路径 -t 镜像名:[tag] .
docker build -f dockerfile_test -t mycentos:0.1 .

出现Successfully tagged mycentos:0.1之后,即表示构建完成。

说明:

  • tag 可以不加,不加的话,默认就是 latest

启动容器,然后查看下:

bash 复制代码
doker run mycentos
pwd
# /usr/local

# 此时 vim 和 ifconfig 也都可以使用了

拿到一个镜像的时候,可以通过 history 命令查看这个镜像是怎么一步一步制作起来的。

bash 复制代码
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

2 注册账号

首先,去 hub.docker.comcloud.docker.com 注册一个账户。然后登录。

bash 复制代码
# 查看登录命令帮助信息
docker login --help 

# Usage:  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

# 登录
docker login -u oehuosi

出现 Login Succeeded 即可表示登录成功了。

3 发布 docker 镜像

bash 复制代码
docker push mycentos
# 如果提示,那么去修改下镜像配置,给容器新增一个tag标签
docker tag 容器ID oehuosi/mycentos:0.1

# 再去重新提交
docker push oehuosi/mycentos:0.1
# 提交的时候也是一层一层的去进行提交的,我们等待片刻,即可push成功了。

# 如果还是push不上去,因为没有前缀的话默认是push到 官方的library
# 解决方法
# 第一种 build的时候添加dockerhub用户名,然后在push就可以放到自己的仓库了
docker build -t oehuosi/mycentos:0.1 .
# 第二种 使用docker tag #然后再次push
docker tag 容器id oehuosi/mycentos:0.1 
#然后再次push
docker push oehuosi/mycentos:0.1 
3.1 发布阿里云镜像服务上
  • 登录阿里云
  • 找到容器镜像服务
  • 创建命名空间
  • 创建容器镜像
  • 选择本地仓库

官网介绍:https://link.zhihu.com/?target=https%3A//cr.console.aliyun.com/repository/

相关推荐
梅见十柒31 分钟前
wsl2中kali linux下的docker使用教程(教程总结)
linux·经验分享·docker·云原生
O&REO3 小时前
单机部署kubernetes环境下Overleaf-基于MicroK8s的Overleaf应用部署指南
云原生·容器·kubernetes
运维小文4 小时前
K8S资源限制之LimitRange
云原生·容器·kubernetes·k8s资源限制
登云时刻4 小时前
Kubernetes集群外连接redis集群和使用redis-shake工具迁移数据(二)
redis·容器·kubernetes
wuxingge12 小时前
k8s1.30.0高可用集群部署
云原生·容器·kubernetes
志凌海纳SmartX13 小时前
趋势洞察|AI 能否带动裸金属 K8s 强势崛起?
云原生·容器·kubernetes
锅总13 小时前
nacos与k8s service健康检查详解
云原生·容器·kubernetes
BUG弄潮儿14 小时前
k8s 集群安装
云原生·容器·kubernetes
意疏14 小时前
【Linux 篇】Docker 的容器之海与镜像之岛:于 Linux 系统内探索容器化的奇妙航行
linux·docker
墨鸦_Cormorant14 小时前
使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像
redis·nginx·docker