docker学习之路

docker官方文档:https://docs.docker.com

第一章 docker环境准备和安装

1.镜像下载:http://mirrors.163.com/centos/7.9.2009/isos/x86_64/

2.CentOS7.x系统Minimal安装(略)

3.进入系统安装软件,配置国内阿里yum源:https://yq.aliyun.com/articles/525282?spm=5176.10695662.1996646101.searchclickresult.4dab2ffdCAzsGt

yum -y install epel-release 开源的yum源(可装,默认很多包)

yum clean all &&yum repolist

yum -y install conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccamp iproute net-tools telnet wget vim git  yum-utils device-mapper-persistent-data lvm2

4.配置网络地址

TYPE=Ethernet

BOOTPROTO=static

NAME=ens33

UUID=5a729bbe-61a7-48be-b8cc-8d4586f64cdb

DEVICE=ens33ONBOOT=yes

IPADDR=172.16.20.xx

NETMASK=255.255.255.0

GATEWAY=172.16.20.2

DNS1=114.114.114.114

5. 安装docker地址:

服务器时区和时间保持国内

同步时间:ntpdate time.windows.com

同步时区: cp /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime

hostnamectl set-hostname xxx

####selinux和firewalld关闭 

systemctl stop firewalld && systemctl disable firewalld

setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

systemctl restart docker &&systemctl enable docker

6 配置docker加速器

tee /etc/docker/daemon.json <<-'EOF'

{

"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]

}

EOF

systemctl daemon-reload&&systemctl restart docker

7 查看docker版本

docker version

docker info

默认存储位置:/var/lib/docker/overlay2/ => docker inspect image nginx

第二章  为什么学习docker

1. 上线流程繁琐       开发->测试->申请资源->审批->部署->测试等环节

2. 资源利用率低       普遍服务器利用率低,造成过多浪费

3. 扩容/缩容不及时  业务高峰期扩容流程繁琐,上线不及时

4. 服务器环境臃肿    服务器越来越臃肿,对维护、迁移带来困难为什么使用容器?

Docker设计目标: 

提供简单的应用程序打包工具 ;开发人员和运维人员职责逻辑分离;多环境保持一致性

Kubernetes设计目标:集中管理所有容器;资源编排;资源调度 ;弹性伸缩;资源隔离

选择docker的优势之处:

环境治理;提高服务器资源利用率;快速搭建新技术环境,不用学习复杂的部署环境;轻量级;虚拟化满足不了一些业务场景;完美构建微服务部署环境;一次构建,多地方部署;快速部署、迁移、回滚,不依赖底层环境;高度保持多个环境一致性

docker与传统虚拟机相比的不足之处:

安全性不如VM;隔离性不如VM;大规模不易管理,K8s应用而生;不易有状态应用部署;排查问题比较难;不支持Windows

Docker 基本使用

镜像是什么?一个分层存储的文件;一个软件的环境;一个镜像可以创建N个容器;一种标准化的交付;一个不包含Linux内核而又精简的Linux操作系统

镜像不是一个单一的文件,而是有多层构成。我们可以通过docker history 查看镜像中各层内容及大小,每层对应着Dockerfile中的一条指令。Docker镜像默认存储在/var/lib/docker/\中。

镜像从哪里来?Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容器镜像,Docker工具默认从这个公共镜像库下载镜像。地址:https://hub.docker.com

配置镜像加速器:https://www.daocloud.io/mirrorcurl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

docker与传统虚拟机的对比

Docker 常用命令

手动创建docker volume

docker volume create www

docker volume ls

docker volume inspect www

[

    {

        "CreatedAt": "2020-xx-xx T14:19:10+08:00",

        "Driver": "local",

        "Labels": {},

        "Mountpoint": "/var/lib/docker/volumes/www/_data",

        "Name": "www",

        "Options": {},

        "Scope": "local"

    }

]

docker run -d -v www:/usr/share/nginx/html nginx

Dockerfile 构建常见基础镜像

镜像用什么隔离

cgroups 资源限制:比如内存、CPU、硬盘、网络

namespace 资源隔离:进程、文件系统、用户等

ufs 联合文件系统:镜像增量式存储,提高磁盘利用率

需要持久化的数据:

1、日志,一般用于方便日志采集和故障排查;2、配置文件,比如nginx配置文件;3、业务数据,比如mysql,网站程序;4、临时缓存数据,比如nginx-proxy-cache

-v 数据卷名称或者源目录:容器目标

bind mounts注意点:

1、宿主机文件或者目录必须存在才能成功挂载 2、宿主机文件或者目录覆盖容器中内容

镜像分类:

1、基础镜像,例如centos(yum)、ubuntu(apt)、alpine(apk);2、环境镜像,例如php、jdk、python;3、项目镜像,打包好的可部署镜像。

第三章:企业级 Harbor 镜像仓库

Harbor是由VMWare公司开源的容器镜像仓库。事实上,Harbor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制 ,AD/LDAP集成以及审计日志等,足以满足基本企业需求。官方地址:https://vmware.github.io/harbor/cn/

1、安装docker与docker-compose

chmod +x docker-compose-Linux-x86_64 #单机容器编排工具

mv docker-compose-Linux-x86_64 /usr/bin/docker-compose

2、解压离线包部署

# tar zxvf harbor-offline-installer-v1.9.1.tgz

# cd harbor       # vi harbor.yml

hostname: 192.168.31.70

# ./prepare        # ./install.sh

3.上传的时候可能会报错 需要添加

{

"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],

"insecure-registries": ["172.16.20.24"]

}

4. 上传harbor镜像服务器

docker tag nginx:v1 172.16.20.xx/library/nginx:v1

docker login 172.16.20.xx

docker push 172.16.20.xx/library/nginx:v1

第四章 基于 Docker 构建企业 Jenkins CI平台

高效的CI/CD环境可以获得: 及时发现问题;大幅度减少故障率;加快迭代速度; 减少时间成本

安装gitlab

docker run -d \

  --name gitlab \

  -p 8443:443 \

  -p 9999:80 \

  -p 9998:22 \

  -v $PWD/config:/etc/gitlab \

  -v $PWD/logs:/var/log/gitlab \

  -v $PWD/data:/var/opt/gitlab \

  -v /etc/localtime:/etc/localtime \

  lizhenliang/gitlab-ce-zh:latest

访问地址:http://172.16.20.24:9999初次会先设置管理员密码 ,然后登陆,默认管理员用户名root,密码就是(Gaogao520)

git init

git add .

git config --global user.email "you@example.com"

git config --global user.name "Your Name"

git commit -m 'test-master'

git remote add origin http://172.16.20.24:9999/root/java-demo.git

git push origin master

安装Jenkins

准备JDK和Maven环境

# tar zxvf jdk-8u45-linux-x64.tar.gz

# mv jdk1.8.0_45 /usr/local/jdk

# tar zxf apache-maven-3.5.0-bin.tar.gz

# mv apache-maven-3.5.0 /usr/local/maven

docker run -d --name jenkins -p 80:8080 -p 50000:50000 -u root \

  -v /opt/jenkins_home:/var/jenkins_home \

  -v /var/run/docker.sock:/var/run/docker.sock  \

  -v /usr/bin/docker:/usr/bin/docker \

  -v /usr/local/maven:/usr/local/maven \

  -v /usr/local/jdk:/usr/local/jdk \

  -v /etc/localtime:/etc/localtime \

  --name jenkins jenkins/jenkins:lts

 使用/root/.ssh中私钥访问gitlab

Manage Jenkins->Manage Plugins-> Advanced ->Update Site
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

修改国内源:

cd /opt/jenkins_home/updates

sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && \

sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

docker restart jenkins   #重启jenkins容器生效。 

系统管理-->插件管理-->Installed  搜索git/pipeline,点击安装[非常快]。

发布测试

CI流程:

1、拉取代码;2、代码编译(java项目),产出war包;3、打包项目镜像并推送到镜像仓库;4、部署镜像测试

#添加参数化构建
This project is parameterized -> String Parameter

Name:Branch    # 变量名,下面脚本中调用

Default Value:master  # 默认分支

Description:发布的代码分支  # 描述

Pipeline脚本 

#!/usr/bin/env groovydef registry = "172.16.20.24"def project = "dev"def app_name = "java-demo"def image_name = "${registry}/${project}/${app_name}:${Branch}-${BUILD_NUMBER}"def git_address = "http://172.16.20.24:9999/root/java-demo.git"def docker_registry_auth = "a0a1386a-954b-42be-bc86-3fd473da193e"def git_auth = "4bdbdd5f-55a5-4bd8-946a-f618a916f652"pipeline { agent any stages { stage('拉取代码'){ steps { checkout([$class: 'GitSCM', branches: [[name: '${Branch}']], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]]) } } stage('代码编译'){ steps { sh """ pwd ls JAVA_HOME=/usr/local/jdk PATH=$JAVA_HOME/bin:/usr/local/maven/bin:$PATH mvn clean package -Dmaven.test.skip=true """ } } stage('构建镜像'){ steps { withCredentials([usernamePassword(credentialsId: "${docker_registry_auth}", passwordVariable: 'password', usernameVariable: 'username')]) { sh """ echo ' FROM ${registry}/library/tomcat:v1 LABEL maitainer lizhenliang RUN rm -rf /usr/local/tomcat/webapps/* ADD target/*.war /usr/local/tomcat/webapps/ROOT.war ' > Dockerfile docker build -t ${image_name} . docker login -u ${username} -p '${password}' ${registry} docker push ${image_name} """ } } } stage('部署到Docker'){ steps { sh """ REPOSITORY=${image_name} docker rm -f tomcat-java-demo |true docker container run -d --name tomcat-java-demo -p 88:8080 ${image_name} """ } } }}

Prometheus+Grafana 监控 Docker

cAdvisor (Container Advisor) :用于收集正在运行的容器资源使用和性能信息。

https://github.com/google/cadvisor

Prometheus(普罗米修斯):容器监控系统。

https://prometheus.io

https://github.com/prometheus

 Grafana:是一个开源的度量分析和可视化系统。

https://grafana.com/grafana/download

https://grafana.com/dashboards/193 (监控Docker主机模板)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容