Docker封装

2024年1月4日 · 1117 字 · 3 分钟 · Docker封装

Docker 镜像封装

编写 Dockerfile

创建一个文本文件,命名为 Dockerfile,其中包含了构建 Docker 镜像所需的指令,比如基础镜像选择、环境配置、应用程序部署等。

# 指定基础镜像。在这里我们使用官方的Node.js基础镜像,这样可以省去自己安装Node.js的步骤。
FROM node:latest

# 设置工作目录。这个目录将作为运行命令的目录。
WORKDIR /app

# 将Node.js的包管理文件复制到工作目录。`package.json`和`package-lock.json`是定义项目依赖的文件。
COPY package*.json ./

# 安装项目依赖。`npm install`命令会查看`package.json`和`package-lock.json`文件,根据这些文件中列出的依赖来安装。
RUN npm install

# 拷贝本地代码到容器工作目录。
COPY . .

# 容器启动时执行的命令。这里假设我们的程序入口文件为index.js。
CMD ["node", "index.js"]

# 需要暴露的端口号。如果你的程序是一个web服务器,需要对外提供服务,那么需要将对应端口暴露出来。
EXPOSE 3000

构建镜像

在包含 Dockerfile 的目录下执行 docker build 命令,Docker 将根据 Dockerfile 中的指令构建出镜像。比如:docker build -t image-name:tag .

docker build -t image-name:tag .

运行容器

使用 docker run 命令基于构建好的镜像启动容器,可以通过参数指定端口映射、数据卷挂载等配置。

docker run --name my-container -d image-name:tag

  • 冷知识,我的容器为何会退出

如果容器中没有长期运行的进程,容器会直接退出,退出码0 “Exited (0)”:

如果你的 Docker 容器内没有一个长期运行的进程(比如一个服务监听端口的 Node.js 应用),容器将在启动命令执行完毕后退出。

这是因为 Docker 容器是围绕进程存在的,一旦主进程终止,容器自然就会退出。

  • 解决方案:
  • CMD 运行一个前台进程
  • 使用 docker run 命令的 -t 标志 为容器分配一个伪终端,这样即使没有前台进程,伪终端也可以保留开启状态 docker run -d -t your-image

测试和验证

在运行的容器中测试应用程序是否按预期工作。

提交/发布镜像

可以将构建好的镜像发布到 Docker 仓库中,以便其他用户或组织使用。 如果需要将镜像推送到远程仓库,可以使用 docker push 命令。

提交镜像: docker commit <容器名称或ID> <目标镜像名称>

推送命令示例: docker push username/image-name:tag .

推送到私有仓库

  1. 首先,使用 docker login 命令登录到您的私有 Docker 仓库。您将被要求输入凭据以验证身份。 docker login your-registry-url

  2. 然后,您需要给您的镜像打上标签,以便将其推送到私有仓库。 docker tag local-image:tag your-registry-url/your-repository:tag 其中 local-image:tag 是您本地镜像的标签,your-registry-url 是您私有仓库的地址,your-repository 是要推送的仓库的名称。

3.最后,使用 docker push 命令将镜像推送到私有仓库。 docker push registry.example.com/username/image-name:tag .

参考资料