在 Dokcer 横空出世之前,应用打包一直是大部分研发团队的痛点。在工作中,面对多种服务,多个服务器,以及多种环境,如果还继续用传统的方式打包部署,会浪费大量时间精力。

在 Docker 出现后,它以更高效的利用系统资源、更高效的利用系统资源、一致的运行环境、持续交付和部署、更轻松的迁移、更轻松的维护和拓展,6 大优点迅速火了起来。
Docker 的基础命令,堪称 Docker 的内功,只有把内功修炼好了,我们在 Docker 的学习路上才会更加顺畅,不会导致“走火入魔”。
接下来我将从与虚拟机的对比开始,以实战的方式,带大家更加了解,更会“玩” Docker。

1080×552 44.9 KB

– 左边为虚拟机,右边为docker环境 –
Server:物理机服务器
Host OS:构建的操作系统
Hypervisor:一种虚拟机软件,装了之后才能虚拟化操作系统
Guest OS:虚拟化的操作系统
Bins/Libs:执行命令、工具
App A:构建的软件
Docker Engine:跳过虚拟化内核的步骤,直接使用宿主机内核
从图片中我们可以清楚的了解到,相比于 Docker,虚拟机更加的臃肿。
虚拟机和容器都需要物理机以及操作系统,但是虚拟机有 Hypervisor 层以及 Guest OS 层。但是 Docker 是没有这两个部分的,只有一层 Docker Engine。

获取更多相关资料vx :ceshiren001

并且每个容器都和宿主机共享计算机的硬件资源以及操作系统。那么由Hypervisor带来的资源耗损,在容器这边是不存在的。所以Docker与虚拟机对比,是有很强大的优势的,当然,也会有一定的缺点。
优势(省去了虚拟化内核的步骤)

  1. 节省资源(CPU、内存)
  2. 秒级启动
  3. 轻量级方案(同样一台服务器可以启动几百个docker,但是不能启动几百个虚拟机)
    劣势
  4. 隔离性、安全性相比虚拟机更弱(比如,如果其中一个容器将内核给"搞坏了",那所有的容器就都无法正常工作了)
  5. 某些情况下服务器会挑内核(eg.编译c++)

而对于测试人员,Docker又为我们带来了什么样的便利呢?

  1. 搭建测试环境
  2. 搭建各类基础服务
  3. 搭建测试执行环境(自动化测试脚本执行环境)
    在刚开始的时候,由于网络的原因,我们在下载的镜像的时候,常常速度是非常慢的。所以如果下载镜像很慢的同学,可以尝试配置国内的加速器加速镜像下载
  4. 登录阿里开发者平台:
    开放云原生应用-云原生(Cloud Native)-云原生介绍 - 阿里云
  5. 点击“创建我的容器镜像”
  6. 注册/登录后,进入Docker 镜像仓库,选中加速器 Tab
    阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
  7. 根据个人需要, 选择运行Docker 的OS,按照要求修改Docker配置文件。

步骤如下:

修改配置文件 :
添加红色部分到
保存文件
好记性不如烂键盘,单单只背下来Docker的命令是不够的,还要自己多敲多去练习,才能更熟练、更深刻的掌握Docker。
下载镜像
查看已下载的镜像
我们可以看到刚刚下载的Jenkins镜像

那么,其中的每个字段又是什么意思呢?

删除镜像
我们可以看到,Jenkins镜像已经被成功删除了
下载指定版本的镜像
此时我们可以发现,镜像的TAG不再是latest而是我们所指定的版本号
将镜像打包成一个tar包

将打包的镜像加载出来

给镜像加tag号
打了tag之后,会发现多了一个3.6.0 tag版本的镜像,但是image ID和原本的保持一致

然后我们删掉这个镜像,发现提示untagged,且这个镜像被成功删除
给镜像改名称
然后我们就可以看到,多了一个叫做testjenkins的镜像,但是image ID和原本的保持一致
push镜像到镜像仓库
容器运行命令参数
容器管理命令参数
接下来我们继续使用Jenkins进行一个实战的演练
docker ps也是我们常用的一个命令,下面是docker ps后显示的启动容器信息,其中每个字段都有自己的含义

CONTAINER ID:容器ID(和image ID无关)
如何删除这个启动的容器呢?是否可以和镜像一样,直接rm呢?
从图中我们可以看到,如果直接删除运行中的容器会报错,需要先stop然后删除

或者直接
我们从图片中可以看出,虽然这个容器是启动的状态,但是使用docker rm -f依然可以直接删除
在docker ps 的时候我们可以看到,PORTS字段下面显示了两个端口号,这两个端口号是做什么的呢?
其实呀,这两个端口号,是容器故意对外暴露的端口号,我们可以通过端口映射的方式,使容器内部的端口号与宿主机的某个端口号产生链接。这样我们就可以通过端口号,去访问或者操作容器啦
如何指定端口号呢?就是使用 -p 参数
将宿主机的8080端口指向容器的8080端口,这样我们在宿主机的8080端口就可以访问到Jenkins啦
在启动的过程中,我们可能会碰到各种各样的问题,我们如何定位问题呢?
当然是使用查看log大法

学到这里,可能有同学会有疑虑啦,如果docker挂掉,在docker内产生的数据应该怎么办呢,这些数据应该如何保存呢
接下来,我们要了解的,docker是如何进行数据持久化的呢?
当我们启动容器时,添加了数据挂载的参数-v 宿主机_path:container_path,docker就可以通过数据挂载的方式,使容器和宿主机的数据进行同步保存,
接下来我们通过实战的方式,就可以看到docker是如何实现这一功能的
1.启动Jenkins,要增加-v挂载卷参数
注意:挂载权限:sudo chown -R 1000:1000 /home/docker/jenkins
2. 使用docker exec -it myjenkins bash进入刚启动的jenkins容器,并cat /var/jenkins_home/secrets/initialAdminPassword这一步是为了找到jenkins的启动密码

3.输入密码,进入Jenkins页面创建一个job。
4.删掉容器,重新执行之前的命令,重启Jenkins,进入页面,发现job没有因为容器被删而丢失
注意:如果容器无法成功启动,且log提示权限问题,则在启动命令中添加-u 0
docker exec -it {容器名称} bash
进入容器,exec的意思是在容器中运行一个命令。如果使用bash 并且指定了-it 就会打开容器的shell 交互

docker cp {container:name}:{container_path} {host_path}把宿主机上的一个文件copy到容器中

有一些容器启动时,我们需要给他添加一些初始的参数,比如mysql,我们需要给他添加一些初始的账号和密码,docker如何操作这种情况呢?让我们动动小手,演练一下吧

  1. 启动mysql容器,注意要加-e传递参数

  2. 通过数据库连接工具连接数据库
    host要填写宿主机的ip地址,Password是我们一开始设定的
    端口号填写映射的宿主机的端口号

  3. 在数据库中创建一个表

  4. 删掉容器,然后重启

  5. 进入刚刚创建的容器内的mysql路径下,发现有刚刚添加的表,这个就是容器的数据持久化的功能啦

我们接下来再思考一个问题,因为容器是有隔离性的。
如果容器之间互相链接可以用什么方式?
这里就要引入另外一个参数啦 --link,这个参数的作用就是把一台容器的网络信息,注入到另外一台容器中
老方法,我们还是通过testlink实战,体验一下这个功能吧
2.启动mariadb
3.启动tesklink,mariadb的信息注入到testlink容器中
4.查看日志,可以看到成功连接到mariadb

一个思考题,如果是三个容器需要连接呢,使用什么样的方式?
答案是:–env因为在docker中,–link就是通过环境变量的方式配置的。

现在很多网站的架构都是前后端分离,在这种情况下,我们应该如何使用docker分别启动前端和后端,且能互相通信呢?我们可以使用下面的命令
–net=container:conan:这样创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。
查看docker 的信息
获取容器/镜像的元数据
以上,我们通过实战的方式了解了docker的概念,熟悉了docker的一部分基础命令,看完文章后,就要熟悉练习了哦。下一次,将带大家通过3个实战练习selenium、prometheus+grafana、mysql的监控,带大家了解docker的招式法门,学会之后,我们就可以真正的带入工作,进行实战了。

测试必会 Docker 实战(一):掌握高频命令,夯实内功基础的更多相关文章

  1. ubuntu 12.04 安装Docker 实战

    2016-3-8 从网络服务商那里申请到一台Ubuntu测试服务器,用来测试安装Docker环境. 注:本人初学Docker,对Linux命令也仅是稍稍了解,如有错误,烦请告知. 查看系统相关信息 可 ...

  2. [置顶] Docker学习总结(3)——Docker实战之入门以及Dockerfile(三)

    应用镜像 csphere/wordpress:4.2 # cd docker-training/wordpress/ # ls -a . license.txt wp-config-sample.ph ...

  3. 【新】Docker实战总结

    >>> 目录 <<< Docker简介 Docker优势 Docker基本概念 Docker安装使用 Docker常用命令 Docker镜像构建 Docker本地仓 ...

  4. Docker实战之Redis-Cluster集群

    概述 接上一篇Docker实战之MySQL主从复制, 这里是Docker实战系列的第二篇,主要进行Redis-Cluster集群环境的快速搭建.Redis作为基于键值对的NoSQL数据库,具有高性能. ...

  5. Docker实战之Consul集群

    前言 最近参加了几场 Java 面试,发现大多数的微服务实践还是 Eureka 偏多,鉴于笔者的单位选型 Consul,这里对 Consul 做简单总结. 该篇是 Docker 实战系列的第三篇.传送 ...

  6. Docker实战之Zookeeper集群

    1. 概述 这里是 Docker 实战系列第四篇.主要介绍分布式系统中的元老级组件 Zookeeper. ZooKeeper 是一个开源的分布式协调服务,是 Hadoop,HBase 和其他分布式框架 ...

  7. Docker实战 | 第二篇:IDEA集成Docker插件实现一键自动打包部署微服务项目,一劳永逸的技术手段值得一试

    一. 前言 大家在自己玩微服务项目的时候,动辄十几个服务,每次修改逐一部署繁琐不说也会浪费越来越多时间,所以本篇整理通过一次性配置实现一键部署微服务,实现真正所谓的一劳永逸. 二. 配置服务器 1. ...

  8. Docker实战 | 第四篇:Docker启用TLS加密解决暴露2375端口引发的安全漏洞,被黑掉三台云主机的教训总结

    一. 前言 在之前的文章中 IDEA集成Docker插件实现一键自动打包部署微服务项目,其中开放了服务器2375端口监听,此做法却引发出来一个安全问题,在上篇文章评论也有好心的童鞋提示,但自己心存侥幸 ...

  9. 详解docker实战之搭建私有镜像仓库 - kurbernetes

    1.实战目的 搭建企业私有的镜像仓库,满足从开发环境推送和拉取镜像.当我们使用k8s来编排和调度容器时,操作的基本单位是镜像,所以需要从仓库去拉取镜像到当前的工作节点.本来使用公共的docker hu ...

随机推荐

  1. SpringBoot bean映射yml中的属性举例

    pom:导入配置文件处理器,配置文件进行绑定就会有提示 <dependency> <groupId>org.springframework.boot</groupId&g ...

  2. 详解BI系统中的任务调度

    任务调度是一个通用的计算机概念,可以简单地理解为计算机基于一定时间频率,自动执行一项进程任务.任务调度是操作系统的重要组成部分,Windows系统中的定时任务和Linux的Crontab都是常用的系统 ...

  3. 企业流程再造(BPR)--系统重构

    企业流程再造(BPR) 企业流程:指生产或服务过程中一连串活动的工作流程 企业流程再造:对企业流程所进行的根本性的在思考和彻底的再设计,以使企业的速度,质量,服务和成本等关键业绩指标获得根本性的改善

  4. Numpy怎样给数组增加一个维度

    Numpy怎样给数组增加一个维度 背景:很多数据计算都是二维或三维的,对于一维的数据输入为了形状匹配,经常需升维变成二维 需要:在不改变数据的情况下,添加数组维度:(注意观察这个例子,维度变了,但数据 ...

  5. visual studio 2019工具里添加开发中命令提示符的方法

    最新新装了visual studio 2019,发现默认的没有开发者命令提示符 现将添加步骤描述如下: 从VS2019菜单选择"Tools",然后选择"外部工具" ...

  6. 使用Google Closure Compiler高级压缩Javascript代码

    背景 前端开发中,特别是移动端,Javascript代码压缩已经成为上线必备条件. 如今主流的Js代码压缩工具主要有: 1)Uglify http://lisperator.net/uglifyjs/ ...

  7. html元素contenteditable属性如何定位光标和设置光标

    最近在山寨一款网页微信的产品,对于div用contenteditable属性做的编辑框有不少心得,希望可以帮到入坑的同学. 废话不多说了,我们先来理解一下HTML的光标对象是如何工作的,后面我会贴完整 ...

  8. java Web开发实现手机拍照上传到服务器

    第一步: 搭环境,基本jdk 1.6+apache tomcat6.0+myeclipse2014 1.我们要清楚自己的jdk版本.因为我们Apache Tomcat配置的成功的前提是版本相对应. 安 ...

  9. 如何使用vue-cli搭建好的项目

    本人是一枚前端小白,也是从零开始学习vue.js.由于闲着蛋疼,写一点自己的经验,可能有点low.是新手想上道的话,可以看看,如果有大神,也可以给我指导一下,小生感激不尽. 关于如何使用vue-cli ...

  10. 最小栈问题:题目描述:设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

    MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.get ...