从上一篇Docker快速入门(上),我们学习和了解了docker的安装和常用的命令,也尝试了如何通过一个dockerfile文件,可以快速创建一个docker镜像文件.也了解了docker镜像的结构.
在本小节中,我们将学习到docker如何管理自己的数据和如何让外部网络访问到docker容器以及如何快速构建多个docker镜像关联.
数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性
1. **数据卷**可以在容器之间共享和重用
2. 对**数据卷**的修改会立马生效
3. 对**数据卷**的更新,不会影响镜像
4. **数据卷**默认会一直存在,即使容器被删除
命令 : docker volume create 自定义数据卷名称
示例 : docker volume create my-vol

命令 : docker volume ls

命令 : docker volume rm 数据卷名称
示例 : docker volume rm my-vol
第一种(官方的)
命令 : docker run -itd -P --name 自定义容器名称 --mount source=数据卷名称(如:my-vol),target=/容器内部的文件夹中(如:/webapp) 镜像名:标签
示例 : docker run -d -P --name web --mount source=my-vol,target=/webapp training/webapp python app.py
第二种命令方式(常用)
命令 : docker run -itd --name 自定义容器名称 -v=数据卷名称(如:my-vol):/容器内部的文件夹中(如:/webapp) 镜像名:标签
示例 : docker run -d -P --name web -v my-vol:/wepapp python app.py

命令 : docker inspect 自定义的容器名称(如:web)
示例 : docker inspect web

在生产环境中,关于数据卷一般采用的宿主机的文件路径,作为数据卷.用来挂载到容器上.这样做的好处是,便于更新和修改应用程序
示例 : -v 宿主机文件(/data/redis5):/容器(/var)

对于docker里面的容器来说(也就是系统),
从系统来看是会独立的网络,同时也会有独立的ip,而如果说外部想要访问的话就需要暴露端口;
可以通过dockerfile中EXPOSE参数或者 docker run -p 的方式,如下示意图

命令 : docker run -it -p 宿主机端口(如:81):容器端口(如:80) --name 容器名 镜像名:标签
示例 : docker run -itd -p 6379:6379 --name redis5 redis5:latest
指令 : EXPOSE 端口号(如:6379)
示例 : EXPOSE 6379

expose指令只是开放端口
用来指明容器内进程对外开放的端口,多个端口之间使用空替隔力。
运行容器通过参数-P(大写)即可将EXPOSE里所指定的端口映射到主机上另外的随机端口,容器或主机就可以通过映射后的端口与此容器通信。
同时,我们也可以通过-p (小写)参数将dockerfile中EXPOSE中没有列出的端口设置成公开的。
docker安装后,默认会创建下面三种网络类型

默认情况下启动的Docker容器,都是使用 bridge,Docker安装时创建的桥接网络,每次Docker容器重启时,会按照顺序获取对应的IP地址,这个就导致重启下,Docker的IP地址就变.如下图

从上面的网络模型可以看出,容器从原理上是可以与宿主机乃至外界的其他机器通信的。
同一宿主机上,容器之间都是连接掉docker0这个网桥上的,它可以作为虚拟交换机使容器可以相互通信。
然而,由于宿主机的IP地址与容器的IP地址均不在同一个网段,不足以使宿主机以外的网络主动发现容器的存在。
为了使外 界可以方位容器中的进程,docker采用了端口绑定的方式,也就是通过iptables的NAT,将宿主机上的端口端口流量转发到容器内的端口上
在宿主机上,可以通过iptables -t nat -L -n,查到一条DNAT规则:
bridge模式的容器与外界通信时,必定会占用宿主机上的端口,从而与宿主机竞争端口资源,对宿主机端口的管理会是一个比较大的问题。
同时,由于容 器与外界通信是基于三层上iptables NAT,性能和效率上的损耗是可以预见的
无指定网络 使用 --network=none ,docker 容器就不会分配局域网的IP
主机网络 使用 --network=host,此时,Docker 容器的网络会附属在主机上,两者是互通的。
例如,在容器中运行一个Web服务,监听8080端口,则主 机的8080端口就会自动映射到容器中

缺点:
1)最明显的就是容器不再拥有隔离、独立的网络栈。容器会与宿主机竞争网络栈的使用,并且容器的崩溃就可能导致宿主机崩溃,在生产环境中,这种问题可能是不被允许的。
2)容器内部将不再拥有所有的端口资源,因为一些端口已经被宿主机服务、bridge模式的容器端口绑定等其他服务占用掉了
因为默认的网络不能制定固定的地址,所以我们将创建自定义网络,并指定网段:192.168.1.0/24 并命名为mynetwork
注意:这个网络段不要和宿主机的网络端冲突,不然会容易对宿主机产生影响
命令: docker network create --subnet=网络地址端(如:192.168.1.0/24) 自定义网络名称(如: mynetwork)
示例 : docker network create --subnet=192.160.1.0/24 mynetwork


这个工具是做什么呢?可以帮助我们快速的构建和对容器的启动以及停止等操作
Compose是 Docker 的服务编排工具,诞生主要是来帮助开发或运维人员很好地管理docker容器;减少繁琐的单个容器创建、删除等操作,比较适合组合使用多个容器进行开发的场景。
对于需要多个容器的操作,传统的方式是一个个的创建及运行,而composer则只需要通过一次性把这些命令写在docker-composer.yml文件中,以后每次启动这一整个环境的时候,只需要你只要敲一个 docker-composer up命令就ok了。
docker-compose up -d # 启动命令
docker-compose stop
docker-compose down
具体请参考这篇文章(https://www.cnblogs.com/minseo/p/11548177.html)
#下载安装
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
#修改权限
chmod +x /usr/local/bin/docker-compose
#安装完成后可以查看版本
docker-compose --version

docker-compose的默认模版文件为: docker-compose.yml。
和Dockerfile一样,它也是有自己的语法命令的。
其中定义的每个服务都必须通过image指令指定镜像或build指令(需要Dockerfile)来自动构建。
其它大部分指令都跟docker run中的类似。
需要注意的是docker-composer运用的时候一定要注意版本的问题,如下图显示

每个docker-compose.yml必须定义image或者build中的一个,其它的是可选的。 image 指定镜像tag或者ID
# 编排php,redis,nginx容器
version: "3.6" # 确定docker-composer文件的版本
services: # 代表就是一组服务 - 简单来说一组容器
nginx: # 这个表示服务的名称,课自定义; 注意不是容器名称
build: # 根据dockerfile构建镜像及构建为容器
context: ./nginx
image: nginx # 指定容器的镜像文件
container_name: nginx_compose # 这是容器的名称
ports: # 配置容器与宿主机的端口
- "82:80"
networks: ## 引入外部预先定义的网段
lrnp:
ipv4_address: 172.100.100.110 #设置ip地址
privileged: true # 执行特殊权限的命令
volumes: # 配置数据挂载
- /www/wwwroot/2007_SRM/00-1/lrnp/nginx/conf:/conf
working_dir: /conf #工作目录
php: # 这个表示服务的名称,课自定义; 注意不是容器名称
build: # 根据dockerfile构建镜像及构建为容器
context: ./php
image: php7 # 指定容器的镜像文件
container_name: php_compose # 这是容器的名称
ports: # 配置容器与宿主机的端口
- "9002:9000"
networks: ## 引入外部预先定义的网段
lrnp:
ipv4_address: 172.100.100.120 #设置ip地址
volumes: # 配置数据挂载
- /www/wwwroot/2007_SRM/00-1/lrnp/php/www:/www
redis: # 这个表示服务的名称,课自定义; 注意不是容器名称
image: redis5asm # 指定容器的镜像文件
networks: ## 引入外部预先定义的网段
lrnp:
ipv4_address: 172.100.100.130 #设置ip地址
container_name: redis_compose # 这是容器的名称
ports: # 配置容器与宿主机的端口
- "6380:6379"
volumes: # 配置数据挂载
- /www/wwwroot/2007_SRM/00-1/lrnp/redis:/redis
# command: top
# 设置网络模块
networks:
# 使用之前定义的网络
lrnp:
external:
name: lrnp
# 自定义网络
# nginx_net:
# driver: bridge
# ipam: #定义网段
# config:
# - subnet: "172.15.22.0/24"

在本小节中,我们学习了docker如何管理它自己的数据.即通过创建数据卷或者跟宿主机文件夹进行挂在关联.
也知道了如何让外部网络访问到docker,即通过开放端口.
也明白了如何让各个容器进行互联互通,是通过自定义网络段来进行内部互通.
最后,为了能更快速的管理多个docker镜像/容器,我们也学习docker-compose,用来管理
<<docker从入门到实践>>
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方式),计划在下篇记