当我们了解完 Docker 的基础原理后,接下来我们将进入一个 Docker 使用。
使用Docker
安装 Docker 最快捷的方式就是使用 Docker 客户端了。下载 Docker
由于我是使用win11系统,我直接安装 Docker Desktop for Windows 下载完后,直接以安装软件方式安装即可。
当安装完,打开 Docker 软件,就可以看到以下界面。
此时,我们也可以通过命令行 docker -v ,查看当前版本,
这个时候,我们 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"
]
}
项目配置 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 项目
也可以通过命令 docker images 获取到当前 images 信息:
开启 Docker Containers
现在有了镜像,我们开启一个容器运行我们的项目:
docker run -p 4000:3000 my-app:0.0.1
此时我们项目已经在容器中跑起来了
容器里项目正常运行,开在了容器的 3000 端口,映射到本地的 4000 端口,所以我们在本地打开 http://localhost:4000/,此时正常访问项目:
Docker Containers 界面:
我们可以对启动的容器进行启动、停止、删除等操作:
# 容器列表
docker container ls
# 停止容器
docker container stop container-id
# 启动容器
docker container start container-id
# 重启容器
docker container restart container-id
# 删除容器
docker container rm container-id
当然也可以直接在客户端中操作。
发布到 Docker Hub
我们已经创建了一个 my-app 镜像,现在就把镜像发布到 Docker Hub。
首先去 Docker Hub 注册一个账号,也可以在使用客户端的时候注册账号。通过命令 docker login 也可能查看登录状态及登录,由于我已经登录过了
使用 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
发布完毕后,你可以在 Docker 客户端的 Images 下的 Hub 选项栏中查到:
对应项目地址为: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)