Ubuntu容器持久化运行与目录共享
·
这个命令是使用 Docker 运行一个基于 Ubuntu 22.04 的容器,并保持容器持续运行。下面我将详细解释每个部分:
命令分解:
docker run -d --name ubuntu_package_$ECM_VERSION -v /home/public:/home/public ubuntu:22.04 tail -f /dev/null
-
docker run:Docker 命令,用于从镜像创建并启动一个新容器 -
-d:以"detached"(后台)模式运行容器 -
--name ubuntu_package_$ECM_VERSION:- 为容器指定名称
$ECM_VERSION是一个环境变量,会被替换为它的值- 例如,如果
ECM_VERSION=1.0,则容器名为ubuntu_package_1.0
-
-v /home/public:/home/public:- 挂载主机目录到容器中
- 格式为
主机目录:容器目录 - 这里将主机的
/home/public挂载到容器的/home/public
-
ubuntu:22.04:使用的 Docker 镜像名称和标签(Ubuntu 22.04) -
tail -f /dev/null:- 容器启动后执行的命令
- 这个命令不会做任何实际工作,只是保持容器运行(因为
tail -f会持续运行)
实际应用示例:
假设我们有一个 CI/CD 流水线,需要在一个干净的 Ubuntu 环境中构建软件包:
# 设置版本变量
export ECM_VERSION="1.2.3"
# 运行容器
docker run -d --name ubuntu_package_$ECM_VERSION \
-v /home/public:/home/public \
ubuntu:22.04 \
tail -f /dev/null
# 进入容器执行构建命令
docker exec -it ubuntu_package_$ECM_VERSION bash -c "
apt update &&
apt install -y build-essential &&
cd /home/public/source_code &&
make &&
cp output/pkg.deb /home/public/releases/$ECM_VERSION/
"
这个命令的典型使用场景:
- 持续集成环境:提供一个干净的构建环境
- 开发环境:保持一个长期运行的 Ubuntu 容器用于开发
- 文件处理:主机和容器之间共享文件进行处理
- 测试环境:为特定版本的软件提供隔离的测试环境
注意事项:
tail -f /dev/null只是一个保持容器运行的技巧,实际上不做任何工作- 如果没有其他操作,这个容器只会占用系统资源而不做有用工作
- 通常会在创建容器后使用
docker exec进入容器执行实际命令 - 主机和容器之间的文件共享要注意权限问题
更多推荐


所有评论(0)