1969 docker load -i ./ubuntu-1804-gn-fastrtps.tar
1970 sudo docker load -i ./ubuntu-1804-gn-fastrtps.tar
1971 ls
1972 docker image ls
1973 sudo docker image ls
1974 ls ~/
1975 ls ~/AndroidStudioProjects/
1976 sudo docker run -v ~/AndroidStudioProjects/:/home/ -it ubuntu-1804-gn-fastrtps
1977 docker ps -a
1978 sudo docker ps -a
1979 docker image ls -l
1980 docker image ls
1981 sudo docker image ls
1982 sudo docker run -v ~/AndroidStudioProjects/:/home/ -it ubuntu-1804-gn-fastrtps
1983 sudo docker ps -a
1984 docker image ls-l
1985 docker image ls -l
1986 docker image ls
1987 sudo docker image ls
1988 sudo docker run -v ~/AndroidStudioProjects/:/home/ -it ubuntu-1804-gn-fastrtps
1989 l
1990 ls -l
1991 sudo docker run -v ~/AndroidStudioProjects/:/home/ -it ubuntu-1804-gn-fastrtps
1992 history
1993 sudo docker ps -a
1994 docker ps -a
1995 sudo groupadd docker
1996 sudo usermod -aG docker $USER
1997 exit
1998 top
1999 ls
2000 docker image ls
2001 history
列举docker镜像的commit记录
docker history ubuntu-1804-gn-fastrtps:v1
IMAGE CREATED CREATED BY SIZE COMMENT
bba8a093448d 5 minutes ago /bin/bash 20.6kB 添加ssh-key
ebcf51b62520 2 weeks ago /bin/bash 23.6MB
一、docker命令
1、
sudo docker load -i ./ubuntu-1804-gn-fastrtps.tar
2、查看docker镜像
sudo docker image ls
3、docker run :通过一个镜像生成一个容器container,并且进入容器
sudo docker run -v ~/AndroidStudioProjects/:/home/ -it ubuntu-1804-gn-fastrtps
-i : 以交互模式运行容器
-t : 为容器重新分配一个伪终端,pipeline以上面这种方式出出现错误,shell通过这个进入后,后续命令无法使用
-d : 后台运行容器,并返回容器id
4、docker run进入容器内部后,想退出用exit命令
5、sudo docker ps -a
查看系统存在的docker容器
6、移除某个docker镜像
docker rmi createId
7、移除某个容器
docker rm containerId
删除所有已经停止的容器
docker rm $(docker ps -aq)
8、将某个容器保存为新镜像
docker commit -a "wangqingyuan" -m "添加新功能" containerId image(想要保存的镜像名称)
镜像名称:如下
第一个为ubuntu-1804-gn-fastrtps:v1
第二个为ubuntu-1804-gn-fastrtps
jenkins@mi-OptiPlex-7040:/home/httpd/www/html/100$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu-1804-gn-fastrtps v1 9ca392643cf4 16 hours ago 3.5GB
ubuntu-1804-gn-fastrtps latest ebcf51b62520 2 weeks ago 3.45GB
9、查看某个镜像的提交记录
jenkins@OptiPlex-7040:/home/httpd/www/html/100$ docker history ubuntu-1804-gn-fastrtps:v1
IMAGE CREATED CREATED BY SIZE COMMENT
9ca392643cf4 16 hours ago /bin/bash 2.33MB 添加jenkins账户的ssh-key,并在/usr/local/bin下创建一个repo镜像供jenkins用户使用
2a76e6042405 17 hours ago /bin/bash 37.6kB 添加gn软件链接
10、docker build 命令用于使用 Dockerfile 创建镜像。
如果本目录下有Dockfile文件
则docker build -t (image:tag) . 就可以创建某个tag的镜像
11、docker save将指定镜像保存为tar归档文件
docker save -o ubuntu-1804-gn-fastrtps.tar ubuntu-1804-gn-fastrtps:v1
注意:
1、刚开始使用docker需要sudo权限,如果不想用sudo,需要将本用户加入docker用户组
. 创建docker用户组 : sudo groupadd docker
. 将本用户加入docker用户组 : sudo usermod -aG docker $USER
二、pipeline docker
1、用的多应该是自动化编译、部署
jenkins用的是pipeline docker插件
pipeline使用agent代理一般就是用的docker代理,见jenkins的定义执行环境https://jenkins.io/zh/doc/pipeline/tour/agents/
经历:2020.04.02一开始使用的时候一直无法达到文档的效果,以为文档或者此功能有问题,其实是可以的
$ docker run -t -d -u 124:131 -w /home/jenkins/workspace/test -v /home/jenkins/workspace/test:/home/jenkins/workspace/test:rw,z -v /home/jenkins/workspace/test@tmp:/home/jenkins/workspace/test@tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** ubuntu-1804-gn-fastrtps:v1 cat
$ docker top 761cc2f7e6e2a4d05a6b5cf17f706c2e8e4699e86e9819978626e1330bafc1e5 -eo pid,comm
+ env
HOSTNAME=761cc2f7e6e2
RUN_CHANGES_DISPLAY_URL=http://10.221.64.180:8085/job/test/83/display/redirect?page=changes
NODE_LABELS=master
HUDSON_URL=http://10.221.64.180:8085/
HOME=/
BUILD_URL=http://10.221.64.180:8085/job/test/83/
JENKINS_SERVER_COOKIE=durable-df50e4fbdcf11307a31c00a96d9b7800
REPO_URL=/usr/local/bin/git-repo.git
WORKSPACE=/home/jenkins/workspace/test
NODE_NAME=master
STAGE_NAME=Test
EXECUTOR_NUMBER=0
BUILD_DISPLAY_NAME=#83
HUDSON_HOME=/home/jenkins
JOB_BASE_NAME=test
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
BUILD_ID=83
BUILD_TAG=jenkins-test-83
DISPLAY=unix:0
JENKINS_URL=http://10.221.64.180:8085/
JOB_URL=http://10.221.64.180:8085/job/test/
BUILD_NUMBER=83
JENKINS_NODE_COOKIE=9bb9deab-a7c4-4dc6-b8ab-4827a86a7e0f
RUN_DISPLAY_URL=http://10.221.64.180:8085/job/test/83/display/redirect
HUDSON_SERVER_COOKIE=7bb182a5840da61e
JOB_DISPLAY_URL=http://10.221.64.180:8085/job/test/display/redirect
CLASSPATH=
JOB_NAME=test
PWD=/home/jenkins/workspace/test
$ docker stop --time=1 761cc2f7e6e2a4d05a6b5cf17f706c2e8e4699e86e9819978626e1330bafc1e5
$ docker rm -f 761cc2f7e6e2a4d05a6b5cf17f706c2e8e4699e86e9819978626e1330bafc1e5
一开始认为无法进入镜像执行命令的原因:
1、jenkins用的docker run -t -d -u 124:131,因为用的用户id为124,一般我们用的镜像,自己通过-it进入镜像都是root用户,所以在上面的执行自己镜像里的专属命令时会出现找不到命令的情况,所以刚开始一直以为是没有进入镜像执行命令
2、为啥不用root而用uit为124的账户呢,据查是因为docker与宿主主机的内核为通过一个root用户,所以docker镜像理论上可以做一些宿主root用户做的事情,会有很大的隐患
3、看上面的env,以为还在宿主主机上运行,后来发现,这个是docker 124用户和jenkins系统变量合一起的
如何让jenkins通过docker代理真正好用呢,我的做法就是比较笨拙,
因为无法更改jenkins进入docker用户,所以只能在docker镜像里添加jenkins进去docker镜像的入口用户
做法:
1、在docker镜像里创建一个uid为124的用户,我给他命名为jenkins用户,但是uid为124,这样jenkins进去后就是jenkins用户,就不会提示(124用户invalid了)
2、为jenkins用户配置一些编译需要的环境,在这儿说一下我自己的配置(我的是在docker里编译linux应用,安卓应用,需要用repo , gn)
3、我将gn的目录放在/usr/local/bin里,但是无论改在用户设置环境变量还是在jenkins里系统变量的PATH里添加gn,都无法把gn下的可执行文件目录放入PATH(之前的工程是可以通过jenkins系统环境变量添加PATH的,这儿不知道为啥)
为了进度,智能换种办法,因为已经有PATH的/usr/bin路径,所以在/usr/bin里添加一个软连接(连接到/usr/local/bin/gn下的可执行文件)
4、在docker镜像的jenkins用户下添加ssh-key,并在gerrit上添加此ssh-key,所以可以下载代码了
5、在docker镜像的jenkins用户添加repo镜像,并在jenkins的job pipeline里添加REPO_URL环境变量,使其可以用repo
2、上面的是使用的docker agent,但是我想要的功能是:在docker 镜像里编译完成后,退出docker镜像并在volume对应的宿主主机上将docker镜像里编译的输出文件找出来并复制到htppd文件服务器,用于通过jenkins发送邮件
给触发编译的用户并携带版本地址
解决:使用docker插件的docker.image,可以在node里使用
https://docs.cloudbees.com/docs/admin-resources/latest/plugins/docker-workflow
http://10.221.64.180:8085/job/test/pipeline-syntax/globals
docker出问题:
https://plugins.jenkins.io/docker-plugin/
sudo chmod 664 /var/run/docker.sock不可以
+ docker inspect -f . ubuntu-1804-gn-fastrtps
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/containers/ubuntu-1804-gn-fastrtps/json: dial unix /var/run/docker.sock: connect: permission denied
sudo chmod 777 /var/run/docker.sock可以
OCI runtime create failed: container_linux.go:345: starting container process caused "chdir to cwd (\"/root/work\") set in config.json failed: