Docker笔记(一)
Docker笔记(一)
背景描述:
最近在研究利用jenkins进行持续集成,主要根据jenkins的官方文档进行学习。在我本地部署的过程中,遇到了一个关于docker设置环境变量的问题,花了我6、7个小时去解决它。
我的想达到的目的是:使用jenkins的Pipeline根据自定义的脚本语法实现编译部署,编译过程中需要用到maven。按照官方的文档,我直接在jenkins上安装推荐的插件,但是没有解决问题,编译过程中总是报错误:
Pipeline代码:
pipeline {
environment {
remoteIp = "127.0.0.1"
}
agent any
tools {
maven 'maven-3.6.1'
}
stages {
stage('pullcode'){
steps{
git credentialsId: 'xx', url: 'https://xx'
}
}
stage('Build') {
steps {
sh '''
echo "开始编译打包过程"
echo "PATH = ${PATH}"
mvn clean && mvn package -DskipTests=true
'''
}
}
stage('Test'){
steps {
sh 'echo "Test stage"'
}
}
}
}
错误:
我查了一些网上的方法,都不好使。最终心一横,Pipeline构建中的命令直接在docker中执行,我自己在docker中安装一个不就完事了。
新的Pipeline脚本不定义maven工具:
pipeline {
environment {
remoteIp = "127.0.0.1"
}
agent any
stages {
stage('pullcode'){
steps{
git credentialsId: 'xx', url: 'https://xx'
}
}
stage('Build') {
steps {
sh '''
echo "开始编译打包过程"
echo "PATH = ${PATH}"
mvn clean && mvn package -DskipTests=true
'''
}
}
stage('Test'){
steps {
sh 'echo "Test stage"'
}
}
}
}
1.安装maven
1.1启动容器
以下这个命令是启动jenkins容器,如果没有会自动下载安装。
docker run -u root -d -p 8080:8080 -v jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean
1.2 查看id并进入容器
docker ps
docker exec -it d46a525cc4f4(改成当前的id) /bin/bash
1.3 下载解压
cd /home
wget https://mirrors.aliyun.com/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
tar -zxvf apache-maven-3.6.3-bin.tar.gz
1.4配置环境变量
这个我在网上搜到大量的博客都在说:
- 修改/etc/profile
source /etc/profile
使配置生效mvn -version
测试
是的,以上操作是可以生效,但是当你退出本次交互再进入时,mvn -version
就无效了,意味着这样配置环境变量是没有效果的。我就奇怪了,这些博客是咋写出来的呢?这么明显的错误都看不见?
先暂时跳过这个配置,反正也没用
2.保存镜像
我们在容器进行操作后,需要保存镜像:
-
在运行的容器内使用
apt-get update
命令进行更新。 -
在完成操作之后,输入
exit
命令来退出这个容器。 -
此时 ID 为 e218edb10161 的容器,是按我们的需求更改的容器。我们可以通过命令
docker commit
来提交容器副本。
$ docker commit -m="has update" e218edb10161 jenkinsci/blueocean
- 通过
docker images
查看保存的镜像
- 以后我们再启动容器时,要根据我们最新提交的镜像启动,否则之前所做的操作都无法生效:
docker run -u root -d -p 8080:8080 -v jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock modest_lamarr:v1.0
3设置mvn环境变量
查了好久资料才找到1.4配置环境变量不生效的原因:
/etc/profile中的变量不是自动就export的,完整的os在启动过程会有启动程序依次读取系统和用户的配置文件,但在容器里就没有这一步了,所以要自己导出才可以。
知道了原因,就好解决。我目前知道以下几个解决办法:
- run启动时指定环境变量
- run启动携带cmd,执行添加环境变量的命令
- 重新定制docker,在dockerfile中的entrypoint定义己启动执行
其实我觉得上述方法中最好的应该是第三个,这样可以不使用冗长的命令,便于迁移部署,交接的时候也不用写一堆文档。但是考虑到我目前容器还没完全配置好,先暂时使用第一个方法,当所有需求都确定后,再采用第三个方法重建一个镜像。
3.1启动命令
先进入容器,查看/etc/profile
中的PATH
变量,将其复制出来并在末尾加上你安装的maven
的bin
路径,讲这个新环境变量再启动容器时指定即可:
新的启动容器命令:
docker run -u root -d -p 8080:8080 -v jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -e "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/maven/bin" modest_lamarr:v1.1
参考:
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步