如果要推广自己的软件,势必要自己制作 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.com 或 cloud.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/