docker 镜像部署

2024/03/04 工作记录 共 2420 字,约 7 分钟

背景

同事给了一个自动生成视频的demo,我需要将其部署到服务器上面去。因为生成视频油GPU的计算,所以原有的部署方式不适用,需要部署到公有云tke。就涉及到到了docker

成长记录

什么是docker?

docker 是一个容器,它使用容器技术来实现应用程序的打包和部署,容器可以在任何系统上运行,而不需要事先进行任何修改。

Docker可以轻松地管理应用程序的多个版本和实现多环境部署(应用程序版本控制)还能使用容器技术隔离应用程序环境,可以避免应用程序之间的冲突和依赖问题(环境隔离)

docker 可视化工具页面

什么是镜像?

由docker 引擎构建打包的文件叫镜像,包含应用程序运行所需的所有代码、运行时和其他依赖项。这些镜像可以被视为应用程序的快照,可以在Docker容器中运行,每个容器都使用相同的镜像来启动应用程序。

docker 构建的镜像产物

如何构建docker镜像?

首先本地安装docker(建议安装一个可视化工具,方便查看)

然后写好dockerfile文件(将你的配置写进去)

执行docker build 命令 构建镜像

构建镜像

docker build -t node-docker .

docker build:这是告诉Docker你想要构建一个新的镜像的命令。

-t node-docker:-t指定一个标签(tag),通常用于镜像的版本控制和识别,默认使用latest。

.:这指定了Dockerfile的位置。.表示当前目录,意味着Docker会在当前工作目录查找名为Dockerfile的文件,并使用它来构建镜像。

执行docker run 命令运行镜像

命令运行镜像

docker run node-docker

运行的时候,还可以再带一些别的参数,这个就具体情况具体分析了

什么是DockerFile?

Dockerfile 是一个文本文件,它包含了一系列的指令和参数,用于自动化构建 Docker 镜像。 每一条指令都会在镜像中创建一个新的层,并对镜像进行修改。当 Dockerfile 执行时,它会按照从上到下的顺序逐步执行这些指令,最终生成一个可用的 Docker 镜像。

Dockerfile 的主要目的是提供一种快速、可重复的方法来创建和部署环境或应用程序。通过使用 Dockerfile,开发者可以确保无论在何处部署,应用程序的环境都是一致的,从而避免了常说的“在我机器上能运行”的问题

Dockerfile包含了一系列指令,告诉Docker如何构建镜像,例如从哪个基础镜像开始,如何安装依赖,如何复制文件到镜像中等。

DockerFile 常见的指令

FROM:指定基础镜像。 Dockerfile 都必须以一个 FROM 指令开始,用来指定一个已存在的镜像。

ENV:设置环境变量。

RUN:在镜像中执行命令。常用于安装软件包。

COPY:将文件或目录复制到镜像中。

WORKDIR:设置工作目录,即容器内部的当前目录。

EXPOSE:声明容器运行时监听的端口。

CMD:提供容器默认执行的命令。Dockerfile 中可以有多个 CMD 指令,但只有最后一个会生效。

FROM ghcr.io/puppeteer/puppeteer:latest

USER root

WORKDIR /app

COPY package.json yarn.lock ./

RUN yarn install

COPY . .

RUN yarn build

# 暴露应用程序端口(如果应用程序需要监听端口)
EXPOSE 3000

# 定义启动命令
CMD ["node", "app.js"]

什么是镜像部署

镜像部署服务是一种在云环境中管理和自动化扩展容器集群的方法,大概流程如下

开发一个应用程序,编写好DockerFile,使用 docker build 命令根据 Dockerfile 构建镜像

将镜像上传到镜像仓库。镜像部署服务从镜像仓库中拉取每个镜像,并自动将其部署。

部署完成后,服务会提供负载均衡和自动扩展,以确保应用程序的高可用性和可伸缩性。如果发现容器不再需要或不再需要自动扩展,镜像部署服务将自动停止或缩小容器。

在实际开发中都是自动化脚本实现的,我们只需要写好dockerfile文件就好了

安装docker

docker version: 查看是否安装了docker

docker info: 查看更加详细的docker信息

docker run: 创建和启动docker

docker ps: 列出正在运行的docker

docker images: 列出本地docker映像

我遇到的问题

使用官方提供的镜像,若官方镜像运行有问题

我就去网上寻找别的镜像,结果一堆错误,我用了FROM alpine:3.19

结果各种错误,原因是alpine 只提供了最基础的功能,简单理解就是阉割版

错误1: audioBuffer Failed to execute ‘decodeAudioData’ on ‘BaseAudioContext’: Unable to decode audio data

错误2: PIXI error Unable to auto-detect a suitable renderer.

错误3: The requested image’s platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested

建议:一定要使用官方提供的镜像,若官方镜像运行有问题;

那就一步一步进行排查问题。检查docker 版本,看一下系统架构,命令行添加参数,等等,具体问题具体分析,不建议自己网上查找或者使用第三方,容易残缺不全

走了不少弯路,浪费了一些时间,最后还是使用官方的镜像

总结

碰到自己知识盲区的时候,先看多看几遍官方文档。碰到问题解决不了了,弄一个不含任何业务代码的最小demo,多尝试。有时候会陷入自己思维怪圈,所以我们需要请教身边人。

做好问题记录,碰到什么问题,尝试过哪些解决方案。问题解决之后进行复盘


在技术的历史长河中,虽然我们素未谋面,却已相识已久,很微妙也很知足。互联网让世界变得更小,你我之间更近。

在逝去的青葱岁月中,虽然我们未曾相遇,却共同经历着一样的情愫。谁的青春不曾迷茫或焦虑亦是无奈,谁不曾年少过

在未来的日子里,让我们共享好的文章,共同学习进步。有不错的文章记得分享给我,我不会写好的文章,所以我只能做一个搬运工

我叫 sunseekers(张敏) ,千千万万个张敏与你同在,18年电子商务专业毕业,毕业后在前端搬砖

如果喜欢我的话,恰巧我也喜欢你的话,让我们手拉手,肩并肩共同前行,相互学习,互相鼓励

文档信息

Search

    Table of Contents