美文网首页
docker学习之路

docker学习之路

作者: 人生这点事儿 | 来源:发表于2020-05-22 23:13 被阅读0次

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

    相关文章

      网友评论

          本文标题:docker学习之路

          本文链接:https://www.haomeiwen.com/subject/lunnwctx.html