docker初步使用集锦

 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:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值