专业全栈开发服务 | 前端 + 后端 + 移动端 + 小程序等 | 高质量项目定制开发

Weber 博客

分享知识,记录思考

Docker 入门篇

2025年7月30日
Docker
阅读9分钟

当我们了解完 Docker 的基础原理后,接下来我们将进入一个 Docker 使用。

使用Docker

安装 Docker 最快捷的方式就是使用 Docker 客户端了。下载 Docker

由于我是使用win11系统,我直接安装 Docker Desktop for Windows 下载完后,直接以安装软件方式安装即可。 

当安装完,打开 Docker 软件,就可以看到以下界面。

wechat_2025-07-30_162016_929.png

此时,我们也可以通过命令行 docker -v ,查看当前版本,

wechat_2025-07-30_162219_996.png

这个时候,我们 Docker 就已经在本机安装完成了。

国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器

{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "max-concurrent-downloads": 2,
  "max-download-attempts": 10,
  "registry-mirrors": [
    "https://dockerproxy.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.nju.edu.cn"
  ]
}

微信图片_2025-07-30_163350_091.png

项目配置 Docker

如何把项目提交到Docker,其实就是把项目提交到 Docker images 镜像中。

接下来我们使用一个简单Next项目,看如何把代码提交到 images 中去,我们先创建一个Next项目,即

npx create-next-app@latest

默认一顿时确认后,在执行命令  yarn dev  保证项目可以正常运行。

创建 .dockerignore 文件

在根目录新建 .dockerignore,写入:

Dockerfile
.dockerignore
node_modules
npm-debug.log
README.md
.next
docker
.git

作用类似于 .gitignore,排除不必要的文件和目录,以便在构建 Docker 镜像时,减小镜像大小并提高构建效率。

创建Dockerfile 文件

根目录新建 Dockerfile,写入:

FROM node:18-alpine
WORKDIR /app
COPY . .
RUN npm install --registry=https://registry.npmmirror.com && npm run build
CMD npm start
EXPOSE 3000

第1行: FROM node:18-alpine

- 指定基础镜像为 Node.js 18 版本的 Alpine Linux 变体
- Alpine 是一个轻量级的 Linux 发行版,镜像体积更小


第2行: WORKDIR /app

- 设置容器内的工作目录为 /app
- 后续的命令都会在这个目录下执行


第3行: COPY . .

- 将当前目录(宿主机)的所有文件复制到容器的工作目录( /app )中
- 第一个 . 表示宿主机当前目录,第二个 . 表示容器的当前工作目录


第4行: RUN npm install --registry=https://registry.npmmirror.com && npm run build

- 执行两个命令:
  - npm install --registry=https://registry.npmmirror.com :使用淘宝镜像源安装依赖包(提高国内下载速度)
  - npm run build :构建项目(通常是编译、打包等操作)
- && 表示只有前一个命令成功执行后才会执行后一个命令


第5行: CMD npm start

- 指定容器启动时默认执行的命令
- 这里是启动 Node.js 应用程序

第6行: EXPOSE 3000

- 声明容器将监听 3000 端口
- 这只是一个文档说明,实际端口映射需要在运行容器时通过 -p 参数指定


这是 Dockerfile 构建一个Next.js应用的Docker镜像。完整的指令和其含义可以参考 Dockerfile reference

整个流程是:

使用Node.js环境 → 设置工作目录 → 复制源码 → 安装依赖并构建 → 启动应用 → 暴露端口。

提交到 Docker Images

配置完上面文件后,我们就可能通过一行命令,把项目提交到 images 中去

docker image build -t my-app:0.0.1 .

这条命令用于根据当前目录下的 Dockerfile 构建一个新的 Docker 镜像。

- docker image build :这是 Docker 命令,用于构建镜像。
- -t my-app:0.0.1
  - -t 是 --tag 的缩写,用于为构建的镜像指定一个名称和标签。
  - my-app 是镜像的名称。
  - 0.0.1 是镜像的标签(tag),通常用于表示版本号。如果您不指定标签,Docker 会默认使用 latest 。
- .
  - 这个点号表示 Dockerfile 的路径,它告诉 Docker 在当前目录(即 d:\docker\my-app )查找 Dockerfile 。
  - 同时,它也指定了构建上下文(build context),即在构建过程中,Docker 守护进程可以访问的所有文件和目录。只有在构建上下文中包含的文件才能被 COPY 或 ADD 指令复制到镜像中。

在当前目录( d:\docker\my-app )下,查找 Dockerfile 文件,并根据其中的指令构建一个 Docker 镜像。构建完成后,这个镜像将被命名为 my-app ,并打上 0.0.1 的标签。

执行上面命令后,就可以在Docker images 中看到我们提交的 my-app 项目

wechat_2025-07-30_172623_071.png

wechat_2025-07-30_172633_904.png

也可以通过命令 docker images 获取到当前 images 信息:

wechat_2025-07-30_173150_500.png

开启 Docker Containers

现在有了镜像,我们开启一个容器运行我们的项目:

docker run -p 4000:3000 my-app:0.0.1

此时我们项目已经在容器中跑起来了

wechat_2025-07-30_174510_852.png

容器里项目正常运行,开在了容器的 3000 端口,映射到本地的 4000 端口,所以我们在本地打开 http://localhost:4000/,此时正常访问项目:

wechat_2025-07-30_174927_454.png

Docker Containers 界面:

wechat_2025-07-30_174634_815.png

我们可以对启动的容器进行启动、停止、删除等操作:

# 容器列表
docker container ls
# 停止容器
docker container stop container-id
# 启动容器
docker container start container-id
# 重启容器
docker container restart container-id
# 删除容器
docker container rm container-id

wechat_2025-07-30_182957_802.png

当然也可以直接在客户端中操作。

发布到 Docker Hub

我们已经创建了一个 my-app 镜像,现在就把镜像发布到 Docker Hub。

首先去 Docker Hub 注册一个账号,也可以在使用客户端的时候注册账号。通过命令 docker login  也可能查看登录状态及登录,由于我已经登录过了

wechat_2025-07-31_111803_772.png

使用 docker image tag 标记本地镜像,将其归入某一仓库,然后在推送到 Docker Hub :

## 增加标签
docker image tag my-app:0.0.1 593987196/my-app:0.0.1
## 推送 Docker Hub
docker image push 593987196/my-app:0.0.1

wechat_2025-07-31_112916_656.png

发布完毕后,你可以在 Docker 客户端的 Images 下的 Hub 选项栏中查到:

wechat_2025-07-31_113355_025.png

对应项目地址为:https://hub.docker.com/r/593987196/my-app

接下来其他人就可以直接摘取我的镜像文件:

docker pull 593987196/my-app:0.0.1

然后运行 docker run  开启项目:

docker run -p 4000:3000 593987196/my-app:0.0.1

订阅博客更新

喜欢这篇文章吗?订阅我们的博客,第一时间获取最新文章和技术分享

我们承诺不会发送垃圾邮件,您可以随时取消订阅

文章评论

发表评论

全部评论 (0)

加载评论中...