更新应用并重新构建 Docker 镜像
zr - 2024-02-04 22:52:41 - 所属文档:Docker 快速入门文档
现在要对我们的应用做一点点小更新:
## 修改源码
1. 修改 `src/static/js/app.js` 文件的第 56 行:将 `No items yet! Add one above!` 修改为 `You have no todo items yet! Add one above!`
2. 输入之前使用过的命令,重新构建镜像
```
docker build -t todo-app .
```
3. 使用新版本镜像运行容器
```
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 命令删除容器
1. 使用 `docker ps` 命令获取容器的 ID
```
docker ps
```
2. 使用 `docker stop` 命令停止容器
```
# 将下方的 <the-container-id> 替换成你想停止的容器 ID
docker stop <the-container-id>
```
3. 容器停止后,可以使用 `docker rm` 命令删除它
```
# 将下方的 <the-container-id> 替换成你想删除的容器 ID
docker rm <the-container-id>
```
> 备注:
> 可以通过增加 `-f` 标志来合并上面的第 2、3 步,使用一条命令停止并删除容器。如:`docker rm -f <the-container-id>`
### 使用 Docker Dashboard 删除容器
通过 Docker Dashboard 可以很方便的删除容器,比通过 CLI 命令查找容器 ID 之后再将其删除要容易得多。
1. 打开 Docker Dashboard 之后,将鼠标悬停在应用程序容器上,在右侧会看到一系列可以对容器进行操作的按钮
2. 点击垃圾桶图标删除容器
3. 在弹出的确认窗口中真正删除它

> 备注:在 Docker Dashboard 中我们还看到了另一个非绿色图标显示的容器,这个容器是没有启动成功的,就是上一次执行命令出现报错的时候留下来的,我们也可以用同样的操作删除掉它。
> 
### 再一次使用新版本镜像运行容器
1. 运行新容器
```
docker run -dp 3000:3000 todo-app
```
2. 再一次访问 [http://localhost:3000](http://localhost:3000/) 将会看到我们更新之后的效果了

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