介绍
容器将进程及其文件系统视图和运行时设置打包在一起。像 Docker 这样的容器引擎可以构建镜像、从镜像运行容器、挂载存储、显示日志、在运行中的容器内执行命令,并在不再需要时移除容器。
在本实验中,你将使用 LabEx 环境中预装的 Docker 引擎。为了避免从公共仓库拉取镜像,本实验将使用缓存的本地基础镜像来构建一个小型的练习镜像。你将检查引擎、构建镜像、运行一个带有绑定挂载(bind mount)的命名容器、检查日志和生成的文件、在容器内执行命令,最后清理运行中的容器。
检查容器引擎
在此步骤中,你将确认 Docker 是否可用并检查本地镜像。容器工作流的第一步是了解你正在使用的引擎以及当前已存在的镜像。本实验通过使用缓存的基础镜像来避免公共拉取。
进入项目目录。
cd /home/labex/project
检查 Docker 版本。
docker --version
列出本地镜像。
docker image ls
你应该能看到 gcr.io/k8s-minikube/kicbase:v0.0.37,这是本实验用作本地构建基础的镜像。
查看并构建本地镜像
在此步骤中,你将检查准备好的 Dockerfile 并构建一个本地镜像。镜像是一个可重用的文件系统和元数据模板。容器则是从镜像创建的运行实例。
查看 Dockerfile。ENTRYPOINT 行非常重要,因为缓存的基础镜像有其自己的默认入口点。本实验设置了一个新的入口点,以便容器直接启动练习脚本。
cat Dockerfile
构建镜像并将其标记为 lfcs-container-demo:1.0。-t 选项用于指定名称和标签,最后的 . 告诉 Docker 使用当前目录作为构建上下文。
docker build -t lfcs-container-demo:1.0 .
构建成功后检查镜像。
docker image ls lfcs-container-demo:1.0
运行命名容器
在此步骤中,你将以分离模式(detached mode)运行该镜像。分离模式意味着容器在后台运行。该容器被命名为 lfcs-demo,并通过绑定挂载将宿主机上的 /home/labex/project/container-data 连接到容器内的 /data 目录。
运行容器。
docker run -d --name lfcs-demo -v /home/labex/project/container-data:/data lfcs-container-demo:1.0
显示容器 ID。
docker ps -q --filter name=lfcs-demo
列出运行中的容器并找到 lfcs-demo。
docker ps --filter name=lfcs-demo
检查日志并执行命令
在此步骤中,你将检查运行中的容器。日志显示了容器化进程的输出。绑定挂载允许你验证容器是否已将数据写入宿主机。docker exec 用于在运行中的容器内执行命令。
给容器一点时间来写入日志。
sleep 3
读取最近的容器日志。
docker logs --tail 5 lfcs-demo
检查通过绑定挂载写入的文件。
tail -n 5 container-data/container-output.log
在容器内运行命令,确认挂载的数据在容器内部可见。
docker exec lfcs-demo sh -c 'test -f /data/container-output.log && echo container-data-visible'
停止并移除容器
在此步骤中,你将清理运行中的容器。停止容器会结束其进程。移除已停止的容器会删除容器对象,但不会删除你构建的镜像。
停止容器。
docker stop lfcs-demo
移除已停止的容器。
docker rm lfcs-demo
检查清理情况。docker ps -a 会列出所有容器,包括已停止的容器。移除后,lfcs-demo 应该不再出现。
docker ps -a --filter name=lfcs-demo
总结
你练习了一个完整的 Docker 基础工作流:检查引擎、使用缓存的本地基础镜像、构建带标签的镜像、运行带有绑定挂载的命名分离容器、检查日志、在容器内执行命令,以及停止并移除容器。这些是深入学习引擎配置或编排主题前必须掌握的核心容器操作。



