测试开发CICD——Docker——如何修改 docker 容器的目录映射

当Docker容器的目录映射需要更改时,有三种策略:删除并重新创建容器、直接修改容器配置文件或使用`docker commit`创建新镜像。删除并重新创建简单但可能导致数据丢失;直接修改配置文件无需停服但复杂;`docker commit`创建新镜像方便且不影响原有数据,但会增加镜像管理成本。

问题背景

 docker run -d -p 9999:8080 -i --name tomcat7 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7
  • 创建容器时,指定了目录映射(-v)
  • 如果容器运行之后发现目录映射需要改怎么办?

删除原有容器,重新创建新的容器

删除容器

docker rm -f 容器ID/名字

重新创建容器

 docker run -d -p 9999:8080 -i --name tomcat7 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat:7

重新指定需要映射的目录

优点

简单粗暴,在测试环境用的更多

缺点

如果是数据库、服务器相关的容器,创建新的容器,又得重新配置相关东西了

修改容器配置文件(重点)

暂停 Docker 服务

systemctl stop docker

进入 Docker 容器配置文件目录下

cd /var/lib/docker/containers/
ls

进入某个容器的配置文件目录下

容器ID 就是文件夹名称,可通过 docker ps -aq 来查看,不过这是缩写,对照起来看就行

cd c614b6db4aed0c8d0c742baa09ff4e2c24761703586460b68633d7b66e62c633
ls

修改 config.v2.json

vim config.v2.json

  • 输入 / ,搜索映射的目录(webapps)
  • 也可以找到 MountPoints 
  • 若需要重新指定主机上的映射目录,则改绿圈的两个地方
  • 若需要重新指定容器上的映射目录,则改蓝圈的两个地方
 
MountPoints 节点

其实是一个 json 结构的数据,下图

重新启动 Docker 服务

systemctl stop docker
docker start tomcat7
cd /usr/local/tomcat/webapps
ls

重新映射目录成功!!

注意

优点

直接操作配置文件没有副作用,算简单

缺点

需要暂停 Docker 服务,会影响其他正常运行的 Docker 容器

使用 docker commit 命令

停止 Docker 容器

docker stop tomcat7

使用 commit 构建新镜像

docker commit tomcat7 new_tomcat7
docker images

使用新镜像重新创建一个 Docker 容器

 docker run -d -p 9999:8080 -i --name tomcat77 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat:7

修改新容器的名字

如果新容器想用回旧容器的名字,需要先删了旧容器,再改名

docker rm -f tomcat7
docker rename tomcat77 tomcat7
docker ps

优点

  • 无需停止 Docker 服务,不影响其他正在运行的容器
  • 旧容器有的配置和数据,新容器也会有,不会造成数据或配置丢失,对新旧容器都没有任何影响

缺点

需要生成新的镜像和容器,管理镜像和容器的时间成本会上升

<think>好的,我现在需要帮助用户配置一个包含CI/CD、Docker和Jenkins的全流程开发与部署环境。用户可能已经了解了一些基础概念,但需要具体的步骤指导。首先,我应该结合用户提供的引用内容,整理出一个清晰的教程,确保每个步骤都正确无误,并且符合最佳实践。 首先,用户提供的引用中有关于如何创建自定义Jenkins镜像的内容,比如安装docker-ce-cli和BlueOcean插件[^1]。这应该是配置Jenkins环境的重要步骤。我需要先指导用户如何构建这个自定义镜像,使用Dockerfile,并运行容器。同时,引用[2]提到启动Jenkins容器时的各种参数,包括端口映射、卷挂载等,这些都需要详细说明,确保用户正确挂载必要的目录和文件,比如docker.sock和docker二进制文件,以便Jenkins容器能够执行Docker命令。 接下来,引用[3]和[4]涉及到Jenkins中的配置,比如安装插件、配置JDK、创建Pipeline任务等。用户可能需要知道如何在Jenkins中安装必要的插件,例如Git、Pipeline、Docker等,以及如何配置JDK环境。此外,配置GitLab的Webhook来自动触发构建也是关键步骤,需要详细说明。 我需要将整个流程分为几个主要步骤:环境准备、Jenkins部署、Pipeline配置、自动化触发、应用部署。每个步骤下再细分具体操作,比如构建镜像、运行容器、初始化Jenkins、安装插件、创建凭证、编写Jenkinsfile、配置GitLab Webhook等。同时,用户可能需要示例代码,比如Dockerfile和Jenkinsfile的内容,确保他们能够复制粘贴并调整以适应自己的项目。 另外,需要注意权限问题,比如在Docker容器中以root用户运行,或者处理挂载卷的权限,避免出现权限错误。例如,引用[2]中使用了--user root来提升权限,挂载docker.sock和docker二进制文件,这些都是为了让Jenkins容器能够与宿主机的Docker守护进程通信,执行构建和部署操作。 用户可能遇到的常见问题包括:Jenkins容器无法访问Docker、Pipeline脚本权限不足、GitLab Webhook配置错误等。在教程中应该提前指出这些潜在问题,并提供解决方案,比如检查挂载是否正确,确保插件已安装,测试Webhook的连通性等。 最后,需要生成相关问题,帮助用户进一步学习,比如性能优化、多环境配置、安全性措施等,这些能引导用户深入理解CI/CD流程的各个方面。</think>### CI/CD全流程配置教程(Docker+Jenkins) --- #### 一、环境准备 1. **安装Docker** ```bash curl -fsSL https://get.docker.com | bash -s docker systemctl enable docker && systemctl start docker ``` 2. **创建自定义Jenkins镜像** 新建`Dockerfile`,添加以下内容(安装docker-cli和BlueOcean插件)[^1]: ```dockerfile FROM jenkins/jenkins:2.346.1-jdk11 USER root RUN apt-get update && apt-get install -y lsb-release RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \ https://download.docker.com/linux/debian/gpg RUN echo "deb [arch=$(dpkg --print-architecture) \ signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \ https://download.docker.com/linux/debian \ $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list RUN apt-get update && apt-get install -y docker-ce-cli USER jenkins RUN jenkins-plugin-cli --plugins "blueocean:1.25.5 docker-workflow:1.28" ``` 构建镜像: ```bash docker build -t my-jenkins:2.346.1 . ``` --- #### 二、部署Jenkins容器 使用以下命令启动容器[^2]: ```bash docker run -d --name jenkins \ -p 8080:8080 -p 50000:50000 \ --user root \ -v /data/jenkins:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ -v $(which docker):/usr/bin/docker \ --privileged=true \ my-jenkins:2.346.1 ``` **关键参数说明**: - `-v /var/run/docker.sock`: 允许容器内执行宿主机Docker命令 - `--privileged=true`: 提升容器权限 - `-v $(which docker)`: 挂载宿主机Docker客户端 --- #### 三、初始化Jenkins配置 1. **访问控制台** 浏览器打开`http://服务器IP:8080`,输入初始密码(通过`docker logs jenkins`查看)。 2. **安装推荐插件** 选择"Install suggested plugins",包括Git、Pipeline、Docker等核心插件。 3. **配置JDK和Docker路径** - 进入 **Manage Jenkins > Global Tool Configuration** - 添加JDK路径(若宿主机已安装)[^3] - Docker路径填写`/usr/bin/docker` --- #### 四、配置Pipeline流水线 1. **创建凭证** - 在 **Credentials > System** 中添加Git仓库的SSH密钥或账号密码。 2. **新建Pipeline任务** - 任务类型选择 **Pipeline** - 在 **Pipeline** 选项卡中选择`Pipeline script from SCM`,配置Git仓库地址和凭证。 3. **编写Jenkinsfile示例** 在代码仓库根目录创建`Jenkinsfile`: ```groovy pipeline { agent any stages { stage('Build') { steps { sh 'docker build -t myapp:${BUILD_ID} .' } } stage('Test') { steps { sh 'docker run myapp:${BUILD_ID} npm test' } } stage('Deploy') { steps { sh 'docker tag myapp:${BUILD_ID} myapp:latest' sh 'docker-compose up -d' } } } } ``` --- #### 五、自动化触发配置(GitLab Webhook)[^4] 1. **GitLab设置** - 进入项目 **Settings > Webhooks** - URL填写`http://Jenkins-IP:8080/project/<任务名称>` - 触发事件选择`Push events` 2. **Jenkins配置** - 安装 **GitLab Plugin** - 在任务设置中启用 **Build when a change is pushed to GitLab** --- #### 六、部署验证 1. **查看流水线日志** 在BlueOcean界面(`http://IP:8080/blue`)可视化跟踪构建过程。 2. **检查运行容器** ```bash docker ps | grep myapp ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值