修改源码
- 修改
src/static/js/app.js文件的第 56 行:将No items yet! Add one above!修改为You have no todo items yet! Add one above! 输入之前使用过的命令,重新构建镜像
docker build -t todo-app .
使用新版本镜像运行容器
docker run -dp 3000:3000 todo-app
你可能会看到如下错误信息:
docker: Error response from daemon: driver failed ...... Bind for 0.0.0.0:3000 failed: port is already allocated.
之所以出现这个问题,是因为本机的 3000 端口已经被我们之前启动的容器占用了。要解决此问题,我们可以删除旧的容器。
删除容器
要删除容器,首先需要将其停止,然后将其删除。有两种方法可以停止并删除容器:
使用 CLI 命令删除容器
使用
docker ps命令获取容器的 IDdocker ps
使用
docker stop命令停止容器# 将下方的 <the-container-id> 替换成你想停止的容器 IDdocker stop <the-container-id>
容器停止后,可以使用
docker rm命令删除它# 将下方的 <the-container-id> 替换成你想删除的容器 IDdocker rm <the-container-id>
备注: 可以通过增加
-f标志来合并上面的第 2、3 步,使用一条命令停止并删除容器。如:docker rm -f <the-container-id>
使用 Docker Dashboard 删除容器
通过 Docker Dashboard 可以很方便的删除容器,比通过 CLI 命令查找容器 ID 之后再将其删除要容易得多。
- 打开 Docker Dashboard 之后,将鼠标悬停在应用程序容器上,在右侧会看到一系列可以对容器进行操作的按钮
- 点击垃圾桶图标删除容器
- 在弹出的确认窗口中真正删除它

备注:在 Docker Dashboard 中我们还看到了另一个非绿色图标显示的容器,这个容器是没有启动成功的,就是上一次执行命令出现报错的时候留下来的,我们也可以用同样的操作删除掉它。

再一次使用新版本镜像运行容器
运行新容器
docker run -dp 3000:3000 todo-app
再一次访问 http://localhost:3000 将会看到我们更新之后的效果了
回顾
在本节中,我们修改了源代码,同时重新执行了构建镜像命令。
虽然我们成功构建了新版本镜像,但是你可能已经注意到了两个小问题:
- 镜像更新之前添加的所有代办事项,全部都消失了,数据没有被保存起来
- 本次修改只是一个非常简单的文字更新,但是重新构建镜像的过程中,
Dockerfile文件列出的每一个步骤都需要重新执行一遍。肯定还有更高效的方式让容器感知代码的变化,而不必重新执行所有步骤。
之后的章节将会解决这两个问题,在开始解决这些问题之前,让我们先快速了解一下如何把我们构建好的镜像分享给其他人使用。
