Docker 是一个开源的应用容器引擎,你可以将其理解为一个轻量级的虚拟机,开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。
1. 更高效的利用系统资源
2. 更快速的启动时间
3. 一致的运行环境
4. 持续交付和部署
5. 更轻松的迁移
6. 更轻松的维护和扩展
| 特性 | 容器 | 虚拟机 |
|---|---|---|
| 启动 | 秒级 | 分钟即 |
| 硬盘使用 | 一般为MB | 一般为GB |
| 性能 | 接近原生 | 弱于 |
| 系统支持量 | 单机支持上千个容器 | 一般几十个 |
1. 提供一次性的环境.比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境.
2. 提供弹性的云服务.因为 Docker 容器可以随开随关,很适合动态扩容和缩容.
3. 组建微服务架构.通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构.
对于我们的系统来说在项目运行过程中会存在这最高峰值,和最低峰值;
整个项目运行过程中并不是一直是平稳的访问,对于这种时候如果说一次性就部署N个机器但是实际上只有在某几个时候有高峰期其余时间没有就会显得比较浪费,
这个时候如果说通过docker虚拟多个机器,然后通过多docker进行控制启动与停止实现扩容和缩容
1. 加速本地开发。通过Docker能够快速搭建好开发和运行环境,并且该环境可以直接传递
2. 给测试和产品部署。
3. 自动打包和部署应用。
4. 创建轻量、私有的PaaS环境。
5. 自动化测试和持续集成/部署。
6. 部署并扩展Web应用、数据库和后端服务器。
7. 创建安全沙盒

本次安装的docker版本为docker-ce-18.03.1.ce,系统版本centos7
#1、更新update到最新的版本
yum update
#2、卸载老版本docker
yum remove docker docker-common docker-selinux docker-engine
#3、安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
#4、设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#5、查看docker版本
yum list docker-ce --showduplicates|sort -r
#6、安装docker
yum install docker-ce-18.03.1.ce -y
#7、启动docker
systemctl start docker
#8、加入开机自启
systemctl enable docker
#9、配置国内镜像
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://cr.console.aliyun.com/"]
}
#10、重启docker
systemctl start docker.service
#11.查询docker运行状态
ps -aux | grep docker
docker运行状态

命令: docker images
运行结果:

| 名称 | 含义 |
|---|---|
| REPOSITORY | 镜像名称 |
| TAG | 镜像标签 |
| IMAGE ID | 镜像ID |
| CREATED | 镜像创建时间 |
| SIZE | 镜像大小 |
命令 docker pull 镜像名(如:centos,ubuntu),例子:docker pull ubuntu
运行结果:

命令: docker rmi 镜像id(image id) 如: docker rmi ff0fea8310f3
运行结果:

命令: docker rmi -f 镜像id(image id) 如: docker rmi -f ff0fea8310f3
运行结果:

命令: docker rmi $(docker images -q)
运行结果:

命令 docker run --itd --name 容器名称,可以自定义(如:ubuntu_base) 镜像名:标签(如 ubuntu:latest)
docker run命令详解
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
运行结果

命令: docker ps
docker ps命令详解
OPTIONS说明:
-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
--format :指定返回值的模板文件。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
--no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。
运行结果

命令:docker exec -it 容器名称(如:ubuntu_base) 执行类型,这个可以从docker ps容器列表中的COMMAND看到(bash/sh) 例子: docker exec -it ubuntu_base bash
OPTIONS说明:
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
运行结果:

启动命令: docker start 容器名称(如:ubuntu_base)
启动命令运行结果:

关闭命令: docker stop 容器名称(如:ubuntu_base)
关闭命令运行结果 :

命令 : docker rm 容器名称(如:ubuntu_base)
运行结果

命令 : docker rm $(docker ps -a -q)
命令: docker export 容器名称(如:ubuntu_base) > 容器名称.tar 例子: docker export redis5 > redis5.tar
运行结果:

命令 : docker import 容器文件(redis5.tar) redis5:v1
运行结果:

命令 : docker save 镜像名称(ubuntu) > 文件名.tar 例子 : docker save ubuntu > ubuntu_base.tar
运行结果 :

命令 : docker load < 文件名.tar 例子: docker load < ubuntu_base.tar
运行结果 :

| 类型 | 导出的对象 | 导出文件大小 | 是否可回滚到历史层 |
|---|---|---|---|
| export & import | 将容器导出 | 小 | 否 |
| save & load | 用来将一个或多个image打包 | 大 | 是 |
相对于文件大小来说,save方式导出的文件比export方式导出的文件大
正是因为save方式保存了镜像的历史和层(layer),使其可以层回滚,即回滚到之前的历史层,
所以save方式导出的文件稍微大一些反观export方式,在导出过程中丢失所有的历史,导致其不可以层回滚,导出的文件会小一些可以通过 docker history 镜像名看到层关系
命令 : docker login
发布镜像的前提是必须要登录
执行命令结果:


Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
指定待扩展的父级镜像。除了注释外,在文件开头必须是一一个FROM指令, 接下来白指令便在这个父级镜像的环境中运行,直到遇到下一一个FROM指令。
通过添加多个FROM命令可以在同一个Dockerfile文件中创建多个镜像。
所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制。
就像我们之前运行了一个redis镜像的容器,再进行修改一样,基础镜像是必须指定的。
而 FROM 就是指定基础镜像,因此一个 Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令。
在 Docker Store 上有非常多的高质量的官方镜像,有可以直接拿来使用的服务类的镜像,如nginx 、 redis 、 mongo 、 mysql 、 httpd 、 php 、 tomcat 等;
如果没有找到对应服务的镜像,官方镜像中还提供了一些更为基础的操作系统镜像,如ubuntu 、 debian 、 centos、 alpine 等这些操作系统的软件库
一般会以alpine为主,因为节约的资源比较少
RUN 指令是用来执行命令行命令的。
格式:
RUN \<command\> (类似/bin/sh -cshell格式)
RUN ["executable", "param1", "param2"] (exec格式)
类似shell脚本风格的:
FROM alpine
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add gcc g++ libc-dev wget vim openssl-dev make linux-headers
RUN mkdir -p /usr/src/redis
RUN cd /usr/src/redis
RUN wget -O redis-4.0.11.tar.gz "http://download.redis.io/releases/redis-4.0.11.tar.gz"
RUN tar -xzf redis-4.0.11.tar.gz -C /usr/src/redis
RUN cd /usr/src/redis/redis-4.0.11 && make && make PREFIX=/usr/local/redis install
用来声明创建的镜像的作者信息。在上述代码中,xxh是用户名,xxh@qq.co .是邮箱。这个命令并不是必需的。
用来指明容器内进程对外开放的端口,多个端口之间使用空替隔力。
运行容器通过参数-p(大写)即可将EXPOSE里所指定的端口映射到主机上另外的随机端口,容器或主机就可以通过映射后的端口与此容器通信。
同时,我们也可以通过-p (小写)参数将dockerfile中EXPOSE中没有列出的端口设置成公开的。
向新镜像中添加文件,这个文件可以是一个主机文件,也可以是一个网络文件, 也可以是一个文件夹
设置容器运行的环境变量。在运行容器的时候,通过-e参数可以修改这个环境变量值,也可以添加新的环境变量
注:Dockerfile 中每一个指令都会建立一层, RUN 也不例外。
每一个 RUN 的行为,就和刚才我们手工建立镜像的过程一样:新建立一层,在其上执行这些命令,
执行结束后, commit这一层的修改,构成新的镜像。
使用 Dockerfile 定制镜像而上面的这种写法,创建了很多层镜像。
这是完全没有意义的,而且很多运行时不需要的东西,都被装进了镜像里,比如编译环境、更新的软件包等等。
结果就是产生非常臃肿、非常多层的镜像,不仅仅增加了构建部署的时间,也很容易出错。
这是很多初学Docker 的人常犯的一个错误。Union FS是有最大层数限制的,比如 AUFS,曾经是最大不得超过 42 层,现在是不得超过 127 层。
构建redis5-docker前的软件准备,如下图所示

dockerfile文件
#设置镜像
FROM centos:centos7
#复制文件
COPY ./Centos-7.repo /etc/yum.repos.d/CentOS-Base.repo
#更新镜像源
RUN yum clean all && yum makecache && yum -y update
#创建redis用户组和用户
RUN groupadd -r redis && useradd -r -g redis redis
#安装redis前环境准备
RUN yum -y install epel-release wget gcc automake autoconf libtool make gcc gcc-c++
#创建data目录和新文件
RUN mkdir /data && touch /data/redis-5.0.7.tar.gz
#共享data文件夹
VOLUME /data
#复制redis5的压缩包
COPY ./redis-5.0.7.tar.gz /data/redis-5.0.7.tar.gz
#解压redis5
RUN tar -zxvf /data/redis-5.0.7.tar.gz
#进入解压好的redis5并编译
RUN cd /redis-5.0.7 && make && make PREFIX=/data/redis-5.0.7 install
#开放端口
EXPOSE 6379
构建命令: docker build -t 镜像名称,可以自定义(redis5) .
执行结果




FROM centos
RUN groupadd -r redis && useradd -r -g redis redis
RUN yum update -y && yum install epel-release -y
RUN yum install wget -y && yum -y install bzip2
RUN wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-7.1.0/gcc-7.1.0.tar.gz
RUN mkdir -p /usr/src/gcc
RUN tar -xvf gcc-7.1.0.tar.gz -C /usr/src/gcc
RUN cd /usr/src/gcc/gcc-7.1.0 && ./contrib/download_prerequisites
RUN mkdir /usr/src/gcc/gcc-7.1.0/build
RUN cd /usr/src/gcc/gcc-7.1.0/build && ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
RUN cd /usr/src/gcc/gcc-7.1.0/build && make && make install
RUN wget https://github.com/antirez/redis/archive/6.0-rc2.tar.gz
RUN mkdir -p /usr/src/redis
RUN tar -zxvf 6.0-rc2.tar.gz -C /usr/src/redis
RUN cd /usr/src/redis/redis-6.0-rc2/ && CC=/usr/local/bin/gcc make && make install
Docker的镜像概念类似于虚拟机里的镜像,是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。
例如:一个镜像可以包含一个完整的ubuntu操作系统环境,里面仅安装了Mysql或用户需要的其它应用程序。
Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统被称为UnionFS。 镜像可以基于Dockerfile构建,Dockerfile是一个描述文件,里面包含若干条命令,每条命令都会对基础文件系统创建新的层次结构。
Docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
Docker利用容器来运行应用。
Docker容器是由Docker镜像创建的运行实例。Docker容器类似虚拟机, 可以支持的操作包括启动,停止,删除等。每个容器间是相互隔离的,容器中会运行特定的应用,包含特定应用的代码及所需的依赖文件。
可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
如果你使用过git和github就很容易理解Docker的仓库概念。Docker仓库的概念跟Git类似,注册服务器可以理解为GitHub这样的托管服务。
Docker仓库是用来包含镜像的位置,Docker提供一个注册服务器(Register) 来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像。 Docker运行中使用的默认仓库是Docker Hub公共仓库。
仓库支持的操作类似git,当用户创建了自己的镜像之后就可以使用push命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上pull下来就可以了。
如下图展示了Docker镜像的系统结构。镜像的最底层必须是一个称为启动文件系统( bootfs )的镜像,用户不会与这一层直接打交道。bootfs的上层镜像叫作根镜像 ( rootfs ),它在通常情况下是一个操作系统,如Ubuntu、 Debian 和CentOS等。
用户的镜像必须构建于根镜像之上。
图中所示的镜像1是通过在根镜像ubuntu上安装 MySQL来创建的。
在镜像1的基础上再安装一个redis,就又创建了镜像2。
利用镜像2启动的容器里面运行的是一个已 经安装好了MySQL和Nginx的centos系统。

1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
@作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors 1、什么是behaviors 2、behaviors的工作方式 3、创建behavior 4、导入并使用behavior 5、behavior中所有可用的节点 6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors 1、什么是behaviorsbehaviors是小程序中,用于实现
遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
有没有办法快速将表格格式的ruby哈希打印到文件中?如:keyAkeyBkeyC...1232343451253474456...其中散列的值是不同大小的数组。还是使用双循环是唯一的方法?谢谢 最佳答案 试试我写的这个gem(在表中打印散列、ruby对象、ActiveRecord对象):http://github.com/arches/table_print 关于ruby-如何以表格格式快速打印Ruby哈希值?,我们在StackOverflow上找到一个类似的问题:
电脑启动出现显示器黑屏是一个相当常见的问题。如果您遇到了这个问题,不要惊慌,因为它有很多可能的原因,可以采取一些简单的措施来解决它。在本文中,小编将介绍下面4种常见的电脑启动后显示器黑屏的原因,排查这些原因,快速解决! 演示机型:联想Ideapad700-15ISK-ISE系统版本:Windows10一、显示器问题如果出现电脑启动后显示器黑屏的情况。那么首先您需要检查一下显示器是否正常工作。您可以通过更换另一个显示器或将当前显示器连接到另一台计算机来检查显示器是否存在问题。如果问题仍然存在,那么您可以排除显示器故障的可能性。 二、显卡问题如果您的电脑配备了独立显卡,那么显卡故障也可能是导致电脑
文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定
TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是
文章目录一、项目场景二、基本模块原理与调试方法分析——信源部分:三、信号处理部分和显示部分:四、基本的通信链路搭建:四、特殊模块:interpretedMATLABfunction:五、总结和坑点提醒一、项目场景 最近一个任务是使用simulink搭建一个MIMO串扰消除的链路,并用实际收到的数据进行测试,在搭建的过程中也遇到了不少的问题(当然这比vivado里面的debug好不知道多少倍)。准备趁着这个机会,先以一个很基本的通信链路对simulink基础和相关的debug方法进行总结。 在本篇中,主要记录simulink的基本原理和基本的SISO通信传输链路(QPSK方式),计划在下篇记