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 "[email protected]"

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主机模板)

你可能感兴趣的:(docker学习之路)