开始
创建一个 nodejs 项目
npm init
再创建一个 index.js 添加以下内容
var http = require('http')
http.createServer(function (req, res) {res.end("hello")
}).listen(9999,function () {console.log(" 启动成功 ")
})
创建一个 Dockerfile 文件
FROM node:22-alpine3.18
COPY package.json .
WORKDIR /data
RUN echo " 在这里运行要执行的命令 "
COPY . .
EXPOSE 9999
CMD ["node","index.js"]
| 命令 | 使用方式 | 作用 |
|---|---|---|
| FROM | FROM 镜像名 | 在 build Docker 镜像过程中选择 Docker Hub 指定镜像 为基础镜像 |
| COPY | COPY 复制文件 被复制文件 | 在 build Docker 镜像过程中 复制指定文件到容器 |
| WORKDIR | WORKDIR 切换的目录 | 在 build Docker 镜像过程中 切换在 RUN 命令在容器的工作目录 类似于 linux bash 中的 cd |
| RUN | RUN 要执行的命令 | 在 build Docker 镜像过程中执行必要的命令 |
| EXPOSE | EXPOSE 端口 | 在 build Docker 镜像过程中声明容器使用的端口 |
| CMD | CMD [“ 服务名 ”, “ 参数 ”] | 在使用 Docker 镜像过程中用来启动服务 |
创建一个 .dockerignore 文件
Dockerfile
.dockerignore
| 文件名 | 作用 |
|---|---|
| .dockerignore | 添加不需要导入到容器的文件 已换行结束 |
| Dockerfile | Docker 镜像的构建文件 |
| index.js | Nodjs 的 web 服务文件 |
| package.json | Nodejs 的项目配置文件 |
构建镜像
使用以下命令构建镜像 . 是代表当前目录
docker build .
查看构建的镜像
使用以下命令查看构建完毕的镜像
docker images
结果如下
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 44ad42b77637 14 hours ago 147MB
| 名称 | 含义 |
|---|---|
| REPOSITORY | Docker 镜像名 |
| TAG | 一般用来标识 Docker 镜像版本 |
| IMAGE ID | Docker 镜像 id |
| CREATED | build 镜像时间 |
| SIZE | Docker 镜像的大小 |
修改镜像名称
用一下命令修改镜像名称
docker tag 44ad42b77637 nodejs:v1
上传镜像到 Docker Hub
注意上传到 Doker Hub 一定要名称修改为 用户名 / 仓库名称: 标识 示例如下
修改后会存在两个文件相同 两个名称不同的 Docker 镜像
docker tag 44ad42b77637 suchenqaq/test:v1
注册 Docker Hub 账号 然后在网页客户端创建对应的项目的仓库 执行以下登录命令登录 Docker Hhub 然后 输入账号和密码 即可登录
docker login
上传
docker push suchenqaq/test:v1
删除镜像
docker rmi -f suchenqaq/test:v1
创建并运行容器
docker run -d -p 9999:9999 -v C:\Users\Admin\PhpstormProjects\docker-study:/data:ro -v /data/node_modules --name nodejs nodejs:v1
-d代表在后台运行-p代表指定端口 参数格式:-p 母机端口: 容器端口示例:9999:9999--name设置运行时容器名称 参数格式:-name 名字-v文件互通会自动同步修改的文件 格式:-v 母机地址: 容器地址示例:C:\Users\Admin\PhpstormProjects\docker-study:/data不是上面的文件格式就是不同步的文件夹 容器地址加上:ro就是不同步容器的文件的意思 本质就是容器文件只能可读
查看运行的容器
docker ps -a
-a代表全部 显示运行和包括暂停的容器
结果如下
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cdfc131ee0b2 nodejs:v1 "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:9999->9999/tcp clever_blackburn
关闭运行的容器
docker stop cdfc131ee0b2
删除正在运行的容器
docker rm -f cdfc131ee0b2
-f代表强制-v容器使用-v进行互通就要加上这个删除volume
操作正在运行的容器
docker exec -it nodejs-server /bin/sh
-i代表要对容器进行操作-t代表以终端的形式进行操作
拉取容器
docker pull nginx:1.25.5
正文完