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 .
推送到私有仓库
-
首先,使用 docker login 命令登录到您的私有 Docker 仓库。您将被要求输入凭据以验证身份。
docker login your-registry-url
-
然后,您需要给您的镜像打上标签,以便将其推送到私有仓库。
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 .