美文网首页百人计划
10分钟docker入门

10分钟docker入门

作者: 千栩_105a | 来源:发表于2020-04-06 16:46 被阅读0次

    本文主要内容为笔者经验总结,非操作手册,内容提要:

    • 快速理解docker是什么?
    • 测试、开发人员能使用docker做什么?
    • 怎么使用docker?
    • K8S有什么用,什么时候用?
    • Docker 使用出现问题怎么办?

    帮你理解什么是docker?

    不太准确但很好理解的docker介绍

    绝大多数的服务端程序都需要运行在linux环境中,我们先来对比下一份JavaWeb编写应用(比如商城系统、博客管理系统、人事管理系统)的两种部署方式

    传统方法部署

    一份典型的传统JavaWeb应用部署文档:

    1. 准备linux环境
    2. 安装java环境
    3. 更改JAVA环境变量
    4. 安装启动mysql
    5. 配置mysql用户
    6. 执行sql脚本导入应用数据库
    7. 安装tomcat
    8. 更改数项tomcat配置(如端口、超时时间...)
    9. FTP上传应用文件到tomcat指定目录
    10. 启动tomcat,部署完成

    这基本是一个简单JavaWeb应用的基本步骤了,php应用、.net应用也都类似,运维同学应该很眼熟。很麻烦对吗?稍复杂一点应用的可能还需要在同一台机器上安装并配置nginx、redis、mq、...(很多中小型公司的确是全部应用环境在一台机器上😂)。应用需要部署10份?那乖乖重复10次吧!

    使用docker部署

    还是上面的那个应用,来看看使用docker方式的部署文档:

    1. 准备docker环境
    2. 操作docker下载应用包
    3. 操作docker使用应用包启动应用

    简单多了是吗?来我解释下:
    第1步的docker环境,其实就是一个应用软件,怎么安装将在下文介绍,上面的部署文档没有列出安装docker应用的步骤,是因为大家基本都是用云服务,云服务商(阿里云、腾讯云、亚马逊AWS、微软Azure等)是直接有docker环境提供的,购买后可以直接使用,不需要自己去安装

    第2步的应用包,一般由开发人员来制作,测试和运维人员无需关心,反正java、tomcat、mysql、应用文件、数据、配置都已经弄好了都在应用包里。提供应用包下载的服务叫做仓库(Registry),这个应用包叫做镜像(Image),是不是像手机从的应用商店下载APP安装包(仓库≈应用商店,镜像≈APP安装包)?

    第3步启动好的应用叫做容器(Container),镜像与容器的关系,类似于APP安装包和安装后的APP应用的关系,不过使用docker,你可以下载多个不同版本的镜像,还可以用一个镜像启动多容器(有点像应用多开)

    官方点的docker介绍

    docker是一个开源的应用容器引擎,它使用Go语言开发,基于Linux内核,对其中运行的应用进程之间进行封装隔离,由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。
    想了解更多docker来源或架构信息可参考:什么是docker

    docker官方维护了一个公共仓库:Docker Hub,常用的服务端应用如mysql、nginx、java、tomcat等都可以找到相应镜像,用户也可以创建自己的私有仓库(比如自己公司开发的应用不能公开到公共仓库时需要自己创建仓库)

    docker与虚拟机对比

    文件层面对比

    你可能觉得上文中的应用包(镜像)有点类似与连同操作系统和所有应用一起打包的系统快照,但其实镜像可以很轻很小,比如官方的hello-world镜像几KB,显然不可能包含整个一个内核。

    实际上,docker提供了一个标准化的Linux环境,这个环境已经包含在docker引擎中,有点像只包含特定linux系统的虚拟机。而镜像包,是基于此标准环境构建的,是这个标准上面的应用打包而成而来,基本只包含应用的文件,不包含底层的系统文件。

    运行机制对比

    同一个虚拟机上面运行的各个软件,可能共同操作同一份文件,可能抢占同一个端口,相互并非隔离。而同一docker上面运行的多个容器相互隔离,各容器各自管理自己的文件、端口。

    开发、测试人员使用docker能做什么

    搭建应用环境

    在测试或者开发机器上安装docker后,可以通过docker命令快速安装mysql、redis、mq、nginx等环境,省去复杂的依赖配置、安装、启动过程

    应用环境崩溃后快速恢复

    应用环境被玩坏了?删掉docker容器再启动一个就好了,全新环境又有了

    配置集群环境

    在一台机器上运行多个mysql好像很难,那我这个应用数据库是Mysql主从该怎么测试?用docker启动多个mysql容器就很简单

    测试docker构建的应用

    开发制作了docker镜像?那只能用docker来测了!!!

    拒绝背锅😜

    • 用docker前
      • 👩‍🔬测试:这里好像是个bug?
      • 🐒开发:一定是你环境不对,自己检查😎!
    • 用docker后
      • 👩‍🔬测试:这里好像是个bug?
      • 🐒开发:你环境有问题吧?
      • 👩‍🔬测试:环境在镜像里,而镜像你给我的😱

    docker怎么用

    安装docker

    需要在自己电脑上玩docker的话,就需要先安装了,步骤不细讲,如果需要这里有份详细的安装指南

    linux系统上安装docker

    推荐使用脚本安装

    curl -fsSL get.docker.com -o get-docker.sh
    sudo sh get-docker.sh --mirror Aliyun
    

    windows系统安装docker-desktop

    win7或更早版本

    需使用Docker Toolbox安装

    win10家庭版

    正常同win7一样需使用Docker Toolbox方法安装,因为此方式性能较低建议先伪装成win10专业版,笔者已通过此方法安装成功

    win10 专业版

    1.开启Hyper-V(控制面板 - 程序与功能 - 启用或关闭windows功能 - 勾选Hyper-V - 保存 - 重启)
    2.去官网下载最新安装包安装即可

    Mac系统安装docker-desktop

    官网下载最新安装包后安装

    配置建议

    国内镜像加速

    国内从 Docker Hub 下载镜像很慢,建议配置,配置方法参考

    如非必要国内不建议开启Kubernets

    Kubernets是一个管理多个机器上的docker的应用,简称K8s,介绍后面讲。如果打开Kubernets选项,会因为国内网络无法访问k8s站点会导致K8s永远在启动中,重启无法解决

    操作工具

    docker安装配置完就可以用你喜欢的终端工具操作docker了,比如windows的CMD或Powersheel、Mac Terminal、Linux terminal

    下载镜像

    浏览器打开Docker Hub,从顶部搜索框输入名称搜索(试着搜索mysql、nginx、java、tomcat、...),搜索结果列表中镜像一般命名规则为“用户名/镜像名”,其中部分没有用户名的镜像为官方提供的镜像。点开任一条目后会有详细介绍,我们一般复制页面右上的命令下载最新版本就可以了

    docker
    试试复制命令后打开终端粘贴执行吧👇👇👇
    docker pull nginx
    

    注:nginx是一个静态网页服务器程序

    下载完成后可以查看镜像列表

    docker images
    

    启动容器

    试试复制命令后打开终端粘贴执行吧👇👇👇

    docker run --name my-nginx -p 8888:80 --restart=always -d nginx
    

    上面的命令只有“docker run nginx”是必须的,解释下中间参数

    • --name my-nginx 是给启动的容器命名,其中“my-nginx”你可以随便改
    • -p 8888:80 是一个端口映射,nginx默认使用容器的80端口,但是因为docker容器是隔离的,在当前的容器外面你就访问不到这个端口,所以映射到系统的80端口
    • --restart=always 这个参数的作用是以后每次启动docker软件的时候让这个容器自动启动运行
    • -d 后台运行,没这个参数的话会进入容器的终端,我们这里不需要

    容器启动成功后可以浏览器打开http://localhost:8888查看
    使用如下命令可以查看运行中的docker容器,点击Docker Desktop任务栏图标打开Dashboard界面也可查看

    docker ps
    

    K8S有什么用,怎么用?

    不太准确但很好理解的K8S介绍

    假如在你的强烈建议下,你们的团队终于使用docker来部署应用了。起初你们的应用只单机部署(简单理解就是服务只运行在一台机器上),你通过Docker Dashboard或者用几个命令就可以查看管理它,测试也基本没什么问题。后来随着访问量持续上升一个docker快要撑不住了,这时候你们就可以多启动几个docker,将用户的访问分散到各个docker服务上,还可以按访问量规律随时调整,比如晚上19点-22点是访问量高峰,就启动10个docker容器,其余时间只保留5个节省资源,这样的多份部署的方式叫做集群

    当你们有大量的docker服务需要管理的时候,一个一个去连接输入命令控制显然地效率低下,这时候就该Kubernetes (简称K8S)上场了,它提供了一个图形化地网页界面Kubernetes Dashboard去管理你地docker集群,界面长这样:


    Kubernetes Dashboard

    怎么用K8S?

    先安装K8s

    这一步部署的是K8s核心服务,注意国内访问不到K8S站点不能直接开启K8S,Linux参考:使用 kubeadm 部署 kubernetes,Windows和Mac目前最简便安装K8S的方式是使用阿里提供的脚本

    再安装K8S Dashboard

    这一步部署的是K8S的网页界面,部署过程参考教程,部署完成后就可以浏览器打开下面的网页界面了

    http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

    Docker 使用出现问题怎么办?

    先日志看看什么问题:
    Mac使用如下命令获得实时日志信息:

    pred='process matches ".*(ocker|vpnkit).*"
      || (process in {"taskgated-helper", "launchservicesd", "kernel"} && eventMessage contains[c] "docker")'
    /usr/bin/log stream --style syslog --level=debug --color=always --predicate "$pred"
    

    在Windows上可以在 C:\ProgramData\DockerDesktop下的service.txt 查看Docker日志
    按日志中的问题百度试试能不能解决吧,实在解决不了的话,打开Docker Desktop顶上的TroubleShoot(BUG虫的图标),点那个“Reset to factory defaults”重置,注意会清理掉你所有的镜像和容器。

    相关文章

      网友评论

        本文标题:10分钟docker入门

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