开始
创建一个 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
正文完