使用 Docker 打包 Express 程序 2024-04-19
文章摘要
使用 Docker 打包 Express 程序,并提交到 Docker 仓库
一、创建 Dockerfile
在 Express 项目的根目录下创建一个名为 Dockerfile
的文件
# 使用官方 Node.js 镜像作为基础镜像
FROM node:18-alpine
# 工作目录设置为 /app
WORKDIR /app
# 将当前目录下的所有文件复制到工作目录中
COPY . .
# 安装依赖
RUN npm ci --production
# 设置环境变量
ENV NODE_ENV production
# 暴露 Express 应用程序的端口
EXPOSE 3000
# 启动 Express 应用程序
CMD ["node", "app.js"]
二、构建 Docker 镜像
在终端中,进入项目根目录
docker build -t my-express-app-name:latest .
这里 -t
参数用于指定镜像的名称(my-express-app-name
)和标签(latest
)。构建完成后,您将拥有一个名为 my-express-app-name:latest
的 Docker 镜像
三、登录 Docker 仓库
然后在终端中使用以下命令登录 Docker 仓库
docker login
四、推送镜像到 Docker 仓库
将构建好的镜像推送至 Docker Hub。假设您的 Docker Hub 用户名为 myusername
,将镜像推送至 myusername/my-express-app
仓库
docker tag my-express-app:latest myusername/my-express-app:latest
docker push myusername/my-express-app:latest
五、在服务器上部署
1、拉取镜像
docker pull myusername/my-express-app:latest
2、运行容器
使用以下命令创建并启动一个 Docker 容器
docker run -d --name my-express-app -p 80:3000 myusername/my-express-app:latest
-d
:让容器在后台运行。--name my-express-app
:为容器指定一个名称。-p 80:3000
:将主机的 80 端口映射到容器的 3000 端口,使得外部可以通过 80 端口访问 Express 应用程序。
至此,Express 应用程序已经部署到目标服务器,并可通过服务器的 IP 地址(如 http://server_ip
)访问。
六、注意:
如果 M 芯片的 Macbook 在构建镜像的时候出现下面的错误
[+] Building 0.9s (1/2) docker:desktop-linux
[+] Building 1.0s (2/2) FINISHED docker:desktop-linux
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 412B 0.0s
=> ERROR [internal] load metadata for docker.io/library/node:18-alpine 0.9s
------
> [internal] load metadata for docker.io/library/node:18-alpine:
------
Dockerfile:2
--------------------
1 | # 使用官方 Node.js 镜像作为基础镜像
2 | >>> FROM node:18-alpine
3 |
4 | # 工作目录设置为 /app
--------------------
ERROR: failed to solve: node:18-alpine: error getting credentials - err: exit status 1, out: ``
请用下面的方法解决:
sudo nano ~/.docker/config.json
需要更改 docker 配置文件,将“credsStore”的“桌面”,更改为“osxkeychain”