美文网首页
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 常用部署

    Docker学习之路 标签(空格分隔): Docker 常用命令 https://peihsinsu.gitboo...

  • docker学习之路

    docker官方文档:https://docs.docker.com 第一章 docker环境准备和安装 1.镜像...

  • 安装、启动、停止DOCKER

    在LINUX系统下安装DOCKER,是学习DOCKER必经之路。 没有接触过的新人,心里会充满恐惧。 实际操作很简...

  • dockerfile 常用易混指令--(1)

    学会写dockerfile是我们学习docker的必经之路;在写dockerfile的时候,感觉如下命令还是需要做...

  • Docker 架构中的几个核心概念

    一、Docker 开源之路 2015 年 6 月 ,docker 公司将 libcontainer 捐出并改名为 ...

  • Docker学习之路(一)介绍及安装Docker

    一、Docker介绍 1.Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及...

  • Docker之路

    每天晚上回到寝室都没事做,一直对Docker很好奇,正好学一下《Docker--从入门到实践》做此笔记。 镜像操作...

  • 【Docker学习笔记(三)】Dockerfile解析

    【Docker 学习笔记目录】 【Docker学习笔记(一)】简介、核心概念、安装以及常用命令 【Docker学习...

  • docker学习(1)

    docker学习(1) 容器发展之路 容器为什么出现 容器的作用 容器的应用场景 落后的旧时代 曾经win和lin...

  • Golang RoadMap

    Golang 学习之路 云计算时代的到来导致 Go语言越来越火, k8s, docker 这些容器管理工具都是基...

网友评论

      本文标题:docker学习之路

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