我们在上一篇中介绍了Docker中三种网络,none.host和bridge,除了这三种网络,Docker还允许我们创建自定义网络,当我们要创建自定义网络时,Docker提供了三种网络驱动供我们选择:bridge.macvlan和overlay,其中macvlan和ovelay都是用于创建跨主机网络,我们后面在研究,本篇我们主要使用bridge驱动. 一.创建自定义网络 我们通过docker network create命令创建test_net1网络: $ sudo docker network…
容器之间可通过IP.Docker DNS Server或joined三种方式进行通信,今天我们来详细学习一下. 一.IP通信 IP通信很简单,前一篇中已经有所涉及了,只要容器使用相同网络,那么就可以使用IP进行访问,本节不做赘述. 二.Docker DNS Server 使用IP通信存在一个最大的问题就是容器的IP地址一般是随机的不固定的,所以导致这种方式不够灵活,对于这个问题,可以通过Docker自带的DNS服务器解决.这种方式使用也很简单,即启动容器时通过--name参数即可指定其域名.我们…
本节我们来看看Docker网络,我们这里主要讨论单机docker上的网络.当docker安装后,会自动在服务器中创建三种网络:none.host和bridge,接下来我们分别了解下这三种网络: $ sudo docker network ls NETWORK ID NAME DRIVER SCOPE 528c3d49c302 bridge bridge local 464b3d11003c host host local faa8eb8310b4 none null local 一.none网络…
我们在启动Docker容器时,默认情况下容器所使用的资源是没有限制的,这样就会存在部分特别耗资源的容器会占用大量系统资源,从而导致其他容器甚至整个服务器性能降低,为此,Docker提供了一系列参数方便我们对容器的CPU.内存.IO等进行限制.为了方便演示,我们这里使用progrium/stress镜像,这个镜像内置一个压力测试工具,通过它我们可以很方便进行实验.首先我们拉取此镜像: $ sudo docker pull progrium/stress Using default tag: lat…
数据共享是volume的关键特性,今天我们来看一下通过volume实现容器与host.容器与容器之间共享数据. 一.容器与host共享数据 在上一篇中介绍到的bind mount和docker manage volume,它们都可以实现容器与host之间共享数据,只是方式有所区别,bind mount在容器启动前便指定了volume所在host数据目录,并挂载到容器中了,容器启动后,我们向此目录写入数据,容器也能使用这些数据,而对于docker manage volume,有所不同,它在容器启动…
上一篇我们学习了容器的启动和常用的进入容器的方式,今天我们来看看如何控制容器起停以及容器删除操作. 一.stop.kill.start和restart stop.kill命令都可以停止运行的容器,二者不同之处在于,stop是先给容器中的进程发送SIGTERM信号,一段时间后在发送SIGKILL信号,这样可以让进程在退出前做一些善后工作,这样显得更加优雅,而kill命令则是直接杀掉容器中的进程. $ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREA…
本篇主要对容器相关核心知识进行梳理,通过本篇的学习,我们可以对容器相关的概念有一个全面的了解,这样有利于后面的学习. 一.什么是容器? 容器是一种轻量级.可移植.自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行.开发人员在本地创建的容器几乎无需任何修改就可以在生产环境上运行. 容器 VS 虚拟机 既然容器是为应用程序提供封装与隔离,那为什么不用虚拟机呢?我们首先来看下二者的对比: 从上图可以很明显看出,虚拟机是需要创建完整的操作系统环境以实现应用程序完全隔离,而容器则是共享宿主…
我们一般将应用部署在容器里面,而一个服务器上会有许许多多的容器,那么外界该如何访问我们的应用呢?答案是:端口映射. Docker可以将容器对外提供服务的端口映射到host的某个端口上,外网通过此端口访问容器,要开启此功能,容器在启动时需要通过-p参数指定映射的端口号. $ sudo docker run -d -p 80 nginx 0627d4b5aefe03d4d99a92b559d3e58d789c006961722178c9f1e94f0f270492 $ sudo docker ps…
上一篇我们介绍了Dockerfile的基本编写方法,这一节我们来看看Docker容器的常用操作. 一.容器的运行方式 容器有两种运行方式,即daemon形式运行与非daemon形式运行,通俗地讲就是长期运行和短暂运行,当我们的容器作为对外服务的时候需要采用damon形式运行,当我们的容器仅仅作为一个临时的工作环境那么使用非daemon形式运行是比较恰当的. 首先先来看看以非daemon形式如何运行容器,比我们启动一个容器然后执行ls -a命令: $ sudo docker run ubuntu:…
Pod 是一组紧密关联的容器集合,它们共享IPC.Network和UTS namespace,是 Kubernetes 调度的基本单元.Pod 的设计理念是支持多个容器在一个 Pod 中共享网络和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务. 一.Pod的定义 这里还是以我们之前做的webapp为例定义一个Pod,这是一个最简单的Pod定义 apiVersion: v1 kind: Pod metadata: name: webapp labels: app: webap…