更新Docker镜像
在Docker入门(1)中,我们初步尝试了Docker的特性,并将getting-started这个演示用的todo应用做了容器化尝试。接下来,我们会进一步尝试更新它的代码,并构建新的Docker镜像,最终把它推送到Docker镜像仓库中。
更新应用代码
之前,在没有任何todo item时,getting-started会在页面显示“No items yet! Add one above!”。现在,我们尝试修改这行文案内容。
编辑src/static/js/app.js文件
使用编辑器打开src/static/js/app.js文件,并做如下内容调整:
...
- <p className="text-center">No items yet! Add one above!</p>
+ <p className="text-center">You have no todo items yet! Add one above!</p>
...
构建新镜像
保存src/static/js/app.js文件后,就可以根据新文件内容来构建新镜像了:
docker build -t getting-started .
本地验证
构建新镜像后,我们可以通过docker run命令在本地验证修改效果。命令如下:
docker run -dp 3000:3000 getting-started
注意事项
在启动新docker镜像的容器时,有可能出现类似如下内容的错误:
docker: Error response from daemon: driver failed programming external connectivity on endpoint laughing_burnell
(bb242b2ca4d67eba76e79474fb36bb5125708ebdabd7f45c8eaf16caaabde9dd): Bind for 0.0.0.0:3000 failed: port is already allocated.
这个错误的原因是之前启动的旧容器还未停止,它已经占用了3000端口,导致新容器无法启动。要解决这个问题,需要首先把旧容器停掉。
删除旧的容器
如果你使用终端停止旧容器,可以依次执行如下命令:
- 通过docker ps命令查找容器ID;
docker ps
- 使用docker stop命令来停掉旧容器。根据docker ps获得的容器ID替换下面命令中的;
docker stop <the-container-id>
- 旧容器停止后,还可以使用docker rm命令来删除它;
docker rm <the-container-id>
你也可以一步实现停止并删除容器,只需要在docker rm命令中增加force即可。例如docker rm -f 。
如果你使用Docker Desktop停止容器,可以根据下面指令执行:
- 打开Docker Desktop的Container面板;
- 在需要删除的旧容器条目中,选择Action一栏的垃圾桶图标;
- 在弹出的对话框中,选择“Delete forever”即可。
启动新的容器
再次使用docker run命令,启动新容器:
docker run -dp 3000:3000 getting-started
打开浏览器,访问http://localhost:3000,就能看到更新文案后的页面啦。
分发Docker镜像
更新Docker镜像后,可以对外分发新镜像。完成该过程,需要使用Docker注册中心(Docker registry)。默认的Docker注册中心就是Docker Hub。
创建镜像仓库
要分发Docker镜像,首先需要创建一个Docker仓库并向其推送镜像文件。以下是具体操作流程:
- 在Docker Hub完成注册或登录;
- 点击页面的“Create Repository”按钮;
- 仓库名称可以使用getting-started;切记仓库可见性选择Public;
- 点击“Create”按钮,完成创建过程。
如果你在页面看到如下图所示内容,则证明Docker仓库已经创建成功,并且可以使用图中命令完成Docker镜像的推送。