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

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)

加载评论中...