DockerFile
概述我们可以把刚才的对容器的所有操作命令都记录到一个文件里,就像写更脚本程序。
之后用 docker build 命令以此文件为基础制作一个镜像,并会自动提交到本地仓库。
这样的话镜像的构建会变的透明化,对镜像的维护起来也更加简单,只修改这个文件即可。
同时分享也更加简单快捷,因为只要分享这个文件即可。
Dokcerfile 是一个普通的文本文件,文件名一般叫 Dockerfile
其中包含了一系列的指令(Instruction), 每一条指令都会构建一层,就是描述该层是如何创建的。
小试牛刀编辑 Dockerfile 文件cat Dockerfile
详细内容
FROM centos:6.7
MAINTAINER author "author@xxxx.com"
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd baiyp
RUN /bin/echo 'baiyp:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" > ...
Docker-Compose
Compose介绍 Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。 Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。
Compose和Docker兼容性
compose文件格式版本
docker版本
3.4
17.09.0+
3.3
17.06.0+
3.2
17.04.0+
3.1
1.13.1+
3
1.13.0+
2.3
17.06.0+
2.2
1.13.0+
2.1
1.12.0+
2
1.10.0+
1
1.9.1.+
Docker版本变化说明 Docker从1.13.x版本开始,版本分为企业版EE和社区版CE,版本号也改为按照时间线来发布,比如17.03就是20 ...
Docker-Swarm
什么是Swarm Swarm是Docker公司自研发的容器集群管理系统,Swarm在早期是作为一个独立服务存在,在Docker Engine v1.12中集成了Swarm的集群管理,和编排功能。可以通过初始化Swarm或加入现有Swarm来启用Docker引擎的Swarm模式。
Docker Engine CLI和API包括了管理Swarm节点命令,比如添加、删除节点,以及在Swarm中部署和编排服务,也增加了服务栈(Stack)、服务(Service)、任务(Task)概念
Swarm能干什么 Swarm是Docker 引擎内置(原生)的集群管理和编排工具。Docker Swarm是 Docker 官方三剑客项目之一,swarm是基于docker平台实现的集群技术,他可以通过几条简单的指令快速的创建一个docker集群,接着在集群的共享网络上部署应用,最终实现分布式的服务。
swarm节点
swarm是一系列节点的集合,而节点可以是一台裸机或者一台虚拟机。一个节点能扮演一个或者两个角色,manager或者worker。
manager节点
Docker Swarm集群需要至少一 ...
Docker仓库
什么是Docker仓库 Docker仓库的概念很好理解,就像是一个装载了许多镜像的仓库。Docker仓库有由Docker官方提供的公共仓库(Dokcer Hub),也有私有仓库。需要镜像时,如果这个镜像不存在,则可以去仓库中拉取(pull)镜像,默认是去公有仓库拉取。
公有和私有也很好理解,谁都可以来拿的就是公有仓库,只有得到私人允许才能拿的就是私有仓库。
仓库的工作原理
先来学习一下Docker仓库的工作原理,打好理论基础对于实际操作的理解会更深刻。
涉及的角色
Docker仓库使用时会涉及到三个角色,分别是:Registry Client(仓库客户端)、Docker Index(Index服务)与Registry(Docker仓库)。
这三个角色各有各的职责,互相协助来完成Docker仓库的使用。下面我绘制了一张图来简单说明三个角色各自的职责。
注意:虽然Registry不提供用户认证的功能,但可以通过Index对用户身份进行验证,验证方式是Index服务的Token的方式(Token就相当于Index认证用户身份后给用户发的合法凭证,个人觉得就像是官方认证后给个人办理 ...
Docker网络操作
Docker网络概述Docker网络原理 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。
Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法通过直接Container-IP访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即docker run创建容器时候通过 -p 或 -P 参数来启用,访问容器的时候就通过[宿主机IP]:[容器端口]访问容器。
四类网络模式
Docker网络模式
配置
说明
host模式
–net=host
容器和宿主机共享Network namespace。
container模式
–net=container:NAME_or_ID
容器和另外一个容器共享Ne ...
Docker数据管理
数据卷概述
数据卷实际上就是宿主机上的目录或者是文件,可以被直接mount 到容器当中使用 。
实际生成 环境中,需要针对不同类型的服务、不同类型的数据存储要求做相应的规划, 最终保证服务的可扩展性、稳定性以及数据的安全性。
为docker run 命令使用-v 选项即可使用volume,其实也就是将宿主机的文件挂载到容器中,默认挂载为rw的权限。
数据卷的特点
数据卷是目录或者文件,并且可以在多个容器之间共同使用 。
对数据卷更改数据容器里面,会立即更新 。
数据卷的数据可以持久保存,即使删除使用使用该容器卷的容器也不 影响 。
在容器里面的写入数据,不会影响到镜像本身
数据卷使用场景
日志输出
静态web页面
用配置文件
多容器间目录或文件共享
存储卷用法选项
-v选项:将存储卷挂载到哪个目录下
–volume-from选项:从哪个容器主机进行复制
Docker挂载方式
在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中。
目前Docker提供了三种不同的方式将数据从宿主机挂载 ...
Docker镜像操作
Docker 镜像使用
当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。
列出镜像列表
我们可以使用 docker images 来列出本地主机上的镜像。
docker images
各选项说明
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。
所以,我们如果要使用版本为15.10的ubuntu系统镜像来运行容器时,命令如下
docker run -t -i ubuntu:15.10 /bin/bash
如果要使用版本为 14.04 的 ubuntu 系统镜像来运行容器时,命令如下
docker run -t -i ubuntu:14.04 /bin/bash
如果你不指定一个镜像的版本标签,例如 ...
Docker文件系统
基础知识Linux 的 rootfs 和 bootfs
一个典型的 Linux 系统要能运行的话,它至少需要两个文件系统FS: bootfs + rbootfs
bootfs boot file system:包含 boot loader 和 kernel。用户不会修改这个文件系统。实际上,在启动(boot)过程完成后,整个内核都会被加载进内存,此时 bootfs 会被卸载掉从而释放出所占用的内存。同时也可以看出,对于同样内核版本的不同的 Linux 发行版的 bootfs 都是一致的。
rootfs root file system:包含典型的目录结构,包括 /dev, /proc, /bin, /etc, /lib, /usr, and /tmp 等再加上要运行用户应用所需要的所有配置文件,二进制文件和库文件。这个文件系统在不同的Linux 发行版中是不同的。而且用户可以对这个文件进行修改。
Linux 系统在启动时,roofs 首先会被挂载为只读模式,然后在启动完成后被修改为读写模式,随后它们就可以被修改了。
AUFS AUFS 是一种 Union File System( ...
Docker容器操作
Docker Hello World
Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。
输出Hello worlddocker run ubuntu /bin/echo "Hello world"
参数解析
docker: Docker 的二进制执行文件。
run: 与前面的 docker 组合来运行一个容器。
ubuntu 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像,如果不带版本号默认版本号为latest。
/bin/echo “Hello world”: 在启动的容器里执行的命令
以上命令完整的意思可以解释为:Docker 以 ubuntu:latest 镜像创建一个新容器,然后在容器里执行 bin/echo “Hello world”,然后输出结果。
运行交互式的容器
我们通过 docker 的两个参数 -i -t,让 docker 运行的容器实现“对话”的能力:
[root@localhost ~]# docke ...
Docker 安装
Ubuntu Docker 安装
Docker Engine-Community 支持以下的 Ubuntu 版本:
Xenial 16.04 (LTS)
Bionic 18.04 (LTS)
Cosmic 18.10
Disco 19.04
其他更新的版本……
Docker Engine - Community 支持上 x86_64(或 amd64)armhf,arm64,s390x (IBM Z),和 ppc64le(IBM的Power)架构。
卸载旧版本
Docker 的旧版本被称为 docker,docker.io 或 docker-engine 。如果已安装,请卸载它们:
sudo apt-get remove docker docker-engine docker.io containerd runc
当前称为 Docker Engine-Community 软件包 docker-ce 。
安装 Docker Engine-Community,以下介绍两种方式。
使用 Docker 仓库进行安装
在新主机上首次安装 Docker Engine-Community 之前 ...
Docker简介
Docker 简介Docker是什么 Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在GitHub 上进行维护。
Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。
Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。Docker 的基础是 Linux 容器(LXC)等技术。
(背景),云计算兴起后,服务器硬件扩展非常便利,软件服务部署成为了瓶颈,docker 趁势而兴。
docker 的特点
Docker是一个开源的引擎,基于 Go 语言 并遵从Apache2.0协议开源。可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器 ...
微服务简介
微服务简介什么是微服务架构 微服务的概念源于2014年3月Martin Fowler所写的一篇文章“Microservices”。
微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。
微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
微服务架构优势复杂度可控 在将应用分解的同时,规避了原本复杂度无止境的积累。每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界。由于体积小、复杂度低,每个微服务可由一个小规模开发团队完全掌控,易 ...