制作自己的镜像
为自己的 Web 项目构建镜像:把代码和依赖写进 Dockerfile,docker build 打成安装包再 run。改代码不想每次重建,就把目录挂进去;要连 Redis,就把两个容器放进同一网络。
系列:1. Wsl2安装CentOS7 · 2. Docker 简介和安装 · 3. Docker 快速安装软件 · 4. 制作自己的镜像 · 5. Docker-Compose发布与部署
示例项目:https://github.com/gzyunke/test-docker;本地路径 D:\projects\workspace_web\GuoguWebadmin。这是 Node.js + express 的后端接口,依赖 nodejs 与 express 等。
一、编写 Dockerfile
Dockerfile 文档。实用技巧:写文件时若总遇到运行/依赖错误,可先 docker run -it -d node:11 bash 进底镜像终端把环境配通,再把步骤抄回 Dockerfile(原文示例底是 node:11,文件里 FROM 是 node:14)。
二、Build 为镜像并运行
编译:docker build -t test:v1 .。-t 设置名字和版本。
命令参考:docker build。
运行:docker run -p 8080:8080 --name test-hello test:v1
-
-p映射容器端口到宿主机 -
--name容器名 -
-d后台运行
命令参考:docker run。
三、目录挂载
现存问题
-
改了项目代码不会立刻生效,要重新 build 和 run。 -
容器里产生的 log、库备份,删容器就丢。
几种挂载方式
| 方式 | 适合 |
|---|---|
bind mount |
宿主机目录映射进容器,挂代码和配置;可挂多个容器 |
volume |
容器创建管理、建在宿主机,删容器不丢;官方推荐,适合数据库 |
tmpfs mount |
临时文件放宿主机内存,不能多容器共享 |
文档:https://docs.docker.com/storage/

挂载演示
bind mount 用绝对路径:-v D:/code:/app
volume 只要一个名字:-v db-data:/app
示例:docker run -p 8080:8080 --name test-hello -v D:/code:/app -d test:v1
注意:挂载后容器里的代码会被本机目录替换。若没有 node_modules,要在代码目录执行 npm install --registry=https://registry.npm.taobao.org,否则可能 Error: Cannot find module 'koa'。本机没有 Node 的话先装 nodejs。
四、多容器通信
项目很少单跑,要配数据库、缓存。这里给 Web 加上 Redis 容器,演示互通:只要放进同一网络。
文档:docker network。
演示
创建名为 test-net 的网络:
docker network create test-net
运行 Redis 在该网中,别名 redis:
docker run -d --name redis --network test-net --network-alias redis redis:latest
一句话总结:Dockerfile 写清 FROM/ADD/WORKDIR/RUN/CMD,build 出带 tag 的镜像再 run;开发用 bind mount 挂代码,数据用 volume;多容器通信先 docker network create,再用 –network 把它们放在一起。
转载请注明来源:制作自己的镜像








