写点什么

docker

作者:
  • 2022 年 1 月 05 日
  • 本文字数:5778 字

    阅读完需:约 19 分钟

linux

查看系统内核版本 uname -r查看文件cat fileName fileName创建文件 cat >fileName创建文件 touch fileName查看文件路劲 whereis nginx查看端口 netstat -tunlp杀死进程 kill -9 pid拷贝文件 cp -r src dir查看监听IPV4端口  netstat -lnt | awk 'NR>2{print $4}' | grep -E '0.0.0.0:' | sed 's/. *://' | sort -n | uniq tar  解包:tar xvf FileName.tar  打包:tar cvf FileName.tar DirName  解压:tar zxvf FileName.tar.gz  压缩:tar zcvf FileName.tar.gz DirName
复制代码

安装

1.卸载旧版本

sudo yum remove docker \                  docker-client \                  docker-client-latest \                  docker-common \                  docker-latest \                  docker-latest-logrotate \                  docker-logrotate \                  docker-engine
复制代码

2.设置镜像仓库

sudo yum install -y yum-utils
sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
复制代码

3.安装 docker,默认最新版

 sudo yum install docker-ce docker-ce-cli containerd.io
复制代码

4.启动 docker

systemctl start docker
复制代码

5.运行

docker run hello-world
复制代码

6.查看镜像

docker image
复制代码

7.卸载

 yum remove docker-ce docker-ce-cli containerd.io  sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd
复制代码

8.配置阿里云镜像

sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{  "registry-mirrors": ["https://u9xcmjob.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker
复制代码

docker 的常用命令

帮助命令

docker versiondocker infodocker --help帮助文档 https://docs.docker.com/engine/reference/commandline/commit/
复制代码

镜像命令

docker分层下载资源,共用相同资源,在不同版本中,节约内存空间docker images --helpdocker images 查看所有本地镜像 docker search [name] 搜索镜像docker search --help 帮助命令提示docker pull [name]:[tag] 下载镜像docker rmi -f [name|id] [name|id] 删除镜像docker rmi -f $(docker iamges -aq) 全部删除镜像
复制代码

commit 镜像

docker commit -m=“信息” -a=“作者” 容器id 目标镜像名:[tag]  // 提交一个容器,成为镜像,存在本地
复制代码

容器命令

docker pull centos 下载系统#新建容器并启动docker run [可选参数] 镜像名#可选参数--name 容器的名字,区分容器-d 后台方式运行, 必须要有一个前台进程运行的容器-it 进入容器交互-p 设置端口 3344:80-P 随机端口-v 数据卷挂载-e 环境配置,密码-rm 容器退出时自动移除,用完就删除--link 容器关联,ping解决网络连通问题#列出所有运行中的容器docker ps [可选参数]-a 以前运行的容器 -n=number 显示最近创建的容器-q 显示所有容器的编号
#进入容器docker run -it centos /bin/bash(设置进入模式) 启动并进入容器
#退出容器exit 退出停止容器ctrl+p+q 退出不停止容器
#删除容器docker rm 容器id 删除指定容器,不包括运行中的容器docker rm -f $(docker ps -aq) 删除所有容器 加上-f是强制删除
#启动停止容器docker start 容器iddocker restart 容器iddocker stop 容器iddocker kill 容器id 强制停止当前容器
复制代码

常用其他命令

docker logs -tf [容器id] 查看日志docker top [容器id] 查看容器进程信息docker inspect [容器id] 查看镜像源数据
#进入正在运行的容器docker exec -it [容器id] /bin/bash 开启新的窗口(常用)docker attach [容器id] 不开启新的窗口
#容器文件拷贝到主机上docker cp [容器id]:容器内的路径 主机路径拷贝是一个手动过程,后面会使用 -v卷的技术实现自动过程
#查看镜像生成历史docker history 容器id
复制代码

更改地区时间

timedatectl set-timezone Asia/Shanghai
timedatectl status
date
复制代码

练习

ngxin

docker pull nginx 下载nginxdocker run -d --name name -p 3344:80 nginx 启动容器
修改文件要进入容器内部十分的麻烦,可以在外部提供一个映射路径,从而修改容器内部文件
docker run --restart always -it -p 3344:80 --name xxx -v /var/lib/docker/volumes/jenkins/_data/workspace/vue3-test_master/dist:/usr/share/nginx/html -v nginx:/etc/nginx/conf.d/ ea335eea17ab
复制代码

安装 mongo

// 运行mongo --auth 需要认证docker run -it --restart always -v /home/mongodbdata:/data/db --name chat_mongo -p 27017:27017 mongo 
复制代码

生成 node 容器

docker run -it --restart always --name koa-chat -p 9999:80 -v /var/lib/docker/volumes/jenkins/_data/workspace/koa-chat-pipeline/:/home/koa-chat-pipeline/ node
复制代码


解压缩命令

#压缩文件夹zip test.zip test#解压缩到指定位置 -dunzip test.zip -d ./test1 
复制代码

数据卷

#绑定主机与容器的映射关系docker run -it -v 主机目录:容器目录 centos /bin/bash 
#具名挂载和匿名挂载: /var/lib/docker/volumes/xxx/_datadocker volume ls // 查看所有的卷-v 容器内路径 // 匿名挂载-v name:容器内路径 // 具名挂载-v /宿主机路径:/ 容器内路径
#删除数据卷docker volume rm id
#挂载nginxro:只读rw:可读写docker run -d -p 8080:80 -v /etc/nginx:ro|rw nginx /bin/bash
注意:nginx 访问不了 /usr/sbin/nginx 或者 /usr/lib/nginx 重新启动nginx
注意:映射的数据卷文件夹被删除后,无法映射数据
#容器继承数据卷 docker run -it -p 27017:27017 --volumes-from bc4f9320c069 pl/nginx:1.0 /bin/bash
复制代码


docker 打包

#docker打包docker build [可选参数] --help-f dockerfile文件路径-t tag:1.0 版本号
docker build -f /home/admin/dockerfile.dockerignore -t test/pl:1.1 .
注意:启动镜像生成容器后,会产生数据卷,与主机产生映射关系
#容器之间关联数据卷--volumes-from // 数据卷绑定docker run -it --name docker02 --volumes-from dockero1 镜像名
#打包镜像为tar文件docker save -o dist.tar pl/dist:1.0
#导入镜像docker load -i name.tar
复制代码


#大写的是指令FROM CENTOSVOLUME 容器路径CMD echo "---end---"CMD /bin/bash
复制代码


dockerfile

指令

#dockerfile是用来构建docker镜像的文件,命令参数脚本#指令必须是大写FROM 基础镜像VOLUME 数据卷RUN 运行镜像COPY 将文件复制到镜像中ADD 将文件添加到镜像中WORKDIR 当前工作目录,进入容器时候的目录,通常是/目录EXPOSE 对外端口MAINTAINER 镜像谁写的ENV 配置环境CMD 容器启动时执行的命令,只有最后个有效,["ls", "-a"]ENTRYPOINT 容器启动时执行的命令,可以追加ONBUILD 构建时触发的命令
复制代码

发布镜像

#发布到dockerhub1.注册dockerhub账号2.登录账号3.docker login -u -p --help4.发布镜像上去,docker push  NAME[:TAG]
#发布到阿里云容器,主要参考官方文档1.登录阿里云2.找到阿里云镜像服务3.创建命名空间4.创建容器镜像
复制代码

总结



Jenkins

 #下载推荐版本 docker pull jenkinsci/blueocean #运行/var/jenkins_home/ docker run -v /etc/localtime:/etc/localtime -it --restart always -p 8080:8080 -p 5000:50000 -v jenkins:/var/jenkins_home/ -v /var/run/docker.sock:/var/run/docker.sock -v "$HOME":/home 镜像id #初始化默认密码 /var/jenkins_home/secrets/initialAdminPassword#选择默认配置,安装下载默认插件#创建用户#配置账号密码,为gitee的登录密码
#替换升级站点的URLhttp://mirror.xmission.com/jenkins/updates/update-center.json
#需要下載的插件NVM:node的包管理工具gitee:安装码云Generic Webhook Trigger :通用鈎子插件Publish Over SSH: 远程部署
#构建阶段使用yarn,shell脚本node -vnpm install -g yarn -registry=https://registry.npm.taobao.orgyarn -vyarn install --pure-lockfile #--pure-lockfile 这个参数是在服务器install不生成yarn.lock,防止服务器和本地代码冲突yarn run build
#jenkins构建报错error Command failed with signal "SIGKILL".服务器内存不足
复制代码

自动化部署

#jenkins构建映射到主机数据卷jenkins,用过nginx映射dist文件夹
复制代码

发邮件

#配置-> Extended E-mail NotificationSMTP服务器:smtp.qq.com用户默认邮件后缀: @qq.com#使用SMTP认证:用户名:1354528629@qq.com密码: pop3|SMTP 验证码#使用SSL协议SMTP端口:465#Jenkins Location系统管理员邮件地址:1354528629@qq.com
#项目->构建完成好->Editable Email NotificationProject Recipient List: 发送给谁,逗号隔开
复制代码

流水线 pipeline

#数据卷node服务路径/var/lib/docker/volumes/jenkins/_data/workspace/koa-chat-pipeline/
片段生成器#拉取代码checkout:拉取会放在workspace工作空间
#使用jenkinsfile,下载相应的插件Docker plugin and Docker Pipeline plugin.
# 发生错误Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?映射docker.sock -v /var/run/docker.sock:/var/run/docker.sock
#错误Got permission denied while trying to connect to the Docker daemon socketat unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/create?fromImage=node&tag=14.17.0": dial unix /var/run/docker.sock: connect: permission denied#问题:权限不够解决:sudo chmod 666 /var/run/docker.sock
#错误Error: EACCES: permission denied, scandir '/home/node/.npm/_logs'问题:$HOME宿主机下面权限没打开解决: chmod 777 /root/
复制代码

pipeline 发送邮件

    post { 		always{		//always部分 pipeline运行结果为任何状态都运行            emailext body:             	'''<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">    					<table width="95%" cellpadding="0" cellspacing="0"  style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">        					<tr>            					<td>            						<b><font color="#0B610B">Build Summary</font></b>            						<hr size="2" width="100%" align="center" />            					</td>        					</tr>        					<tr>            					<td>                					<ul>                    					<li>Project Name: ${PROJECT_NAME}</li>                    					<li>Build Number: # ${BUILD_NUMBER}</li>                    					<li>Build Cause: ${CAUSE}</li>                    					<li>Build Status: ${BUILD_STATUS}</li>                    					<li>Build Log: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>                    					<li>Build Url: <a href="${BUILD_URL}">${BUILD_URL}</a></li>                    					<li>Project Url: <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>                					</ul>            					</td>        					</tr>    					</table>				   </body>''', 			subject: '[Jenkins Build Notification] ${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!', 			to: '1354528629@qq.com;', 			from: '1354528629@qq.com'        }
success { //当此Pipeline成功时打印消息 echo 'success' } failure { //当此Pipeline失败时打印消息 echo 'failure' } unstable { //当此Pipeline 为不稳定时打印消息 echo 'unstable' } aborted { //当此Pipeline 终止时打印消息 echo 'aborted' } changed { //当pipeline的状态与上一次build状态不同时打印消息 echo 'changed' } }
复制代码

远程部署

#配置远程服务器连接信息 Manage Jenkins =》Configuration System ,两种方式(密码或者密钥)#生成密钥输入命令: ssh-keygen ,按照提示一直Enter键到底/root/.ssh 目录下会生成私钥和公钥id_rsa: 私钥id_rsa.pub: 公钥
复制代码

多分支流水线

#创建blue,使用gitee账号密码创建凭证
复制代码

jenkinsfile


pipeline { agent none stages { stage('rely') { agent { docker { image "node:14.17.1" args '-v /root/.m2:/root/.m2' } } steps { sh ''' node -v yarn -v yarn yarn build ''' stash includes: '**/dist/**', name: 'dist' } }
stage('docker') { agent any steps { unstash 'dist' sh ''' docker -v pwd docker build -t pl/dist:latest . docker save -o dist.tar pl/dist:latest ''' stash includes: '**/dist.tar', name: 'distTar' } }

stage('rep') { agent any steps { unstash 'distTar' sshPublisher(publishers: [sshPublisherDesc(configName: 'zhenfaroot', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: ''' cd /pl sh default.sh ''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'dist.tar,default.sh')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)]) } } }
}
复制代码

default.sh

docker rm -f pl-distdocker rmi -f pl/dist:latest
docker load -i dist.tardocker run -d --name pl-dist -p 80:80 pl/dist:latest

复制代码

Dockerfile

FROM nginx:alpine
COPY ./dist/ /usr/share/nginx/html/
EXPOSE 80
复制代码


发布于: 1 小时前
用户头像

关注

还未添加个人签名 2020.08.05 加入

还未添加个人简介

评论

发布
暂无评论
docker