docker 容器技术

docker 容器技术

一、学习目标

  1. 了解 Docker 与虚拟机的不同点,相比的优势
  2. 掌握 Docker 的启动方法、镜像与容器操作
  3. 掌握 Mysql tomcat Nginx Redis 等容器的部署方法
  4. 掌握 Docker 的备份与迁移方法
  5. 掌握 Docker 的面试题

二、docker简介

2.1、虚拟化


2.1.1、什么是虚拟化

​ 在计算机中,虚拟化(英语:Virtualization )是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。

​ 在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件对资源充分利用。

​ 虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化、桌面虚拟化、服务虚拟化、虚拟机等等。

2.1.2、虚拟化的种类

1、全虚拟化架构

​ 虚拟机的监视器(hypervisor )是类似于用户的应用程序运行在主机的 OS 之上,如VMware 的 workstation ,这种虚拟化产品提供了虚拟的硬件。

docker 容器技术_第1张图片

2、OS层虚拟化架构 (docker属于这种)

docker 容器技术_第2张图片

3、硬件层虚拟化

docker 容器技术_第3张图片

​ 硬件层的虚拟化具有高性能和隔离性,因为 hypervisor 直接在硬件上运行,有利于控制VM 的 OS 访问硬件资源,使用这种解决方案的产品有 VMware ESXi 和 Xen server。

​ Hypervisor是一种运行在物理服务器和操作系统之间的中间软件层 可允许多个操作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元”操作系统,它可以协调访问服务器上的所有物理设备和虚拟机,也叫虚拟机监视器(Virtual Machine Monitor VMM )。

​ Hypervisor是所有虚拟化技术的核心。当服务器启动并执行 Hypervisor 时,它会给每一台虚拟机分配适量的内存、 CPU 、网络和磁盘,并加载所有虚拟机的客户作系统。就是宿主机。

​ Hypervisor是所有虚拟化技术的核心 软硬件架构和管理更高效、更灵活,硬件的效能能够更好地发挥出来 。常见的产品有: VMware 、 KVM 、 Xen 等等。Openstack。

2.2、什么是docker?


docker 容器技术_第4张图片

2.2.1、容器技术

​ 在计算机的世界中,容器拥有一段漫长且传奇的历史。容器与管理程序虚拟化hypervisor virtualization HV )有所不同,管理程序虚拟化通过中间层将一台或者多台独立的机器虚拟运行与物理硬件之上,而容器则是直接运行在操作系统内核之上的用户空间。因此,容器虚拟化也被称为“操作系统级虚拟化”,容器技术可以让多个独立的用户空间运行在同一台宿主机上。

​ 由于“客居”于操作系统,容器只能运行与底层宿主机相同或者相似的操作系统,这看起来并不是非常灵活。例如:可以在 Ubuntu 服务中运行 Redhat Enterprise Linux ,但无法再Ubuntu 服务器上运行 Microsoft Windows 。

​ 相对于彻底隔离的管理程序虚拟化,容器被认为是不安全的。而反对这一观点的人则认为,由于虚拟容器所虚拟的是一个完整的操作系统,这无疑增大了攻击范围,而且还要考虑管理程序层潜在的暴露风险。

​ 尽管有诸多局限性,容器还是被广泛部署于各种各样的应用场合。在超大规模的多租户服务部署、轻量级沙盒以及对安全要求不太高的隔离环境中,容器技术非常流行。最常见的一个例子就是“权限隔离监牢”( chroot jail ),它创建一个隔离的目录环境来运行进程。如果权限隔离监牢正在运行的进程被入侵者攻破,入侵者便会发现自己“身陷囹圄”,因为权限不足被困在容器所创建的目录中,无法对宿主机进一步破坏。

​ 最新的容器技术引入了OpenVZ 、 Solaris Zones 以及 Linux 容器( LXC )。使用这些新技术,容器不在仅仅是一个 单纯的运行环境。在自己的权限类内,容器更像是一个完整的宿主机。对 Docker 来说,它得益于现代 Linux 特性,如控件组( control group )、命名空间(namespace )技术,容器和宿主机之间的隔离更加彻底,容器有独立的网络和存储栈,还拥有自己的资源管理能力,使得同一台宿主机中的多个容器可以友好的共存。

​ 容器被认为是精益技术,因为容器需要的开销有限。和传统虚拟化以及半虚拟化相比,容器不需要模拟层( emulation layer )和管理层( hypervisor layer ),而是使用操作系统的系统调用接口。这降低了运行单个容器所需的开销,也使得宿主机中可以运行更多的容器。

​ 尽管有着光辉的历史,容器仍未得到广泛的认可。一个很重要的原因就是容器技术的复杂性:容器本身就比较复杂,不易安装,管理和自动化也很困难。而Docker 就是为了改变这一切而生的。

2.2.2、容器与虚拟机的比较

(1)本质上的区别:

docker 容器技术_第5张图片

(2)使用上的区别:

docker 容器技术_第6张图片

从大小、运行、集成三方面对比。

虚拟机已死,容器才是未来。

2.2.3、docker的特点

(1)上手快

​ 用户只需要 几分钟, 就 可以把 自己 的程序 Docker 化 ”。 Docker 依赖于“写 时复制copy on write )模型 使修改 应用程序也 非常迅速 可以 说 达到 “随心 所致,代码即改的境界。

​ 随后 ,就可以创建容器来运行应用程序了 。大多数 Docker 容器只需要不到 1 秒即可启动 。由于去除了管理程序的开销,Docker容器拥有很高的性能同时同一台宿主机中也可以运行更多的容器 ,使用户尽可能的充分利用系统资源 。

(2)职责的逻辑分类

​ 使用Docker 开发人员只需要关心容器中运行的应用 程序 ,而运维人员只需要关心如何管理容器 。 Docker设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境一致性。 从而降低那种"开发"时一切正常,肯定是运维的问题(测试环境都是正常的,上线后出了问题就归结为肯定是运维的问题)。

(3)快速高效的开发生命周期

​ Docker的目标之一就是缩短代码从开发 、测试到部署 、上线运行的周期让你的应用程序具备可移植性,易于构建并易于协作 。(通俗一点说,Docker就像一个盒子,里面可以装很多物件,如果需要这些物件的可以直接将该大盒子拿走,而 不需要从该盒子中一件件的取)。

(4)鼓励使用面向服务的架构

​ Docker还鼓励面向服务的体系结构和微服务架构 。Docker推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序或者服务都可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或调试应用程序都变得非常简单同时也提高了程序的内省性。(当然,可以在一个容器中运行多个应用程序)。

2.3、docker的组件

2.3.1、docker的客户端和服务端

​ Docker是一个客户端服务器C/S架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果 。Docker 提供了一个命令行工具Docker以及一整套RESTful API 。你可以在同一台宿主机上运行 Docker 守护进程和客户端,也可以从本地的 Docker 客户端连接到运行在另一台宿主机上的远程Docker守护进程。

docker 容器技术_第7张图片

2.3.2、docker镜像

​ 镜像是构建 Docker 的 基石 。用户基于镜像来运行自己的容器。镜像也是 Docker生命周期中的“构建”部分 。镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步构建出来。例如:
添加一个文件
执行一个命令;
打开一个窗口。
也可以将镜像当作容器的“源代码”。镜像体积很小,非常“便携”,易于分享 、存储和更新 。

2.3.3、Registry(注册中心)

​ Docker用Registry来保存用户构建的镜像。Registry 分为公共和私有两种 。Docker 公司运营公共的Registry 叫做 Docker Hub 。用户可以在 Docker Hub 注册账号分享并保存自己的镜像(说明 :在 Docker Hub 下载镜像巨慢,可以自己构建 私有的Registry)。

2.3.4、docker容器

​ Docker可以帮助你构建和部署容器,你只需要把自己的应用程序或者服务打包放进容器即可。容器是基于镜像启动起来的,容器中可以运行一个或多个进程。我们可以认为,镜像是 Docker 生命周期中的构建或者打包阶段而容器则是启动或者执行阶段。容器基于镜像启动,一旦容器启动完成后,我们就可以登录到容器中安装自己需要的软件或者服务。

所以 Docker 容器就是:

一个镜像格式;

一些列标准操作;

一个执行环境;

​ Docker借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker将这个模型运用到自己的设计中唯一不同的是:集装箱运输货物而Docker运输软件。

​ 和集装箱一样 Docker 在执行上述操作时,并不关心容器中到底装 了什么,它不管是web 服务器,还是数据库,或者是应用程序服务器什么的 。所有的容器都按照相同的方式将内容 “装载”进去 。

​ Docker 也不关心你要把容器运到何方:我们可以在自己的笔记本中构建容器,上传到Registry 然后下载到一个物理的或者虚拟的服务器来测试,在把容器部署到具体的主机中。像标准 集装箱一样 Docker 容器方便 替换 ,可以 叠加, 易于 分发, 并且尽量 通用。

​ 使用 Docker 我们可以快速的构建一个应用程序服务器 、一个消息总线、一套实用工具 、 一个持续集成( CI 测试环境或者任意一种应用程序 、服务或工具。我们可以在本地构建一个完整的测试环境,也可以为生产或开发快速复制一套复杂的 应用程序栈。

三、docker的安装与启动

3.1、安装环境说明

​ Docker官方建议在 Ubuntu 中安装,因为 Docker 是基于 Ubuntu 发布的,而且一般Docker出现的问题 Ubuntu 是最先更新或者打补丁的。在很多版本的 CentOS 中是不支持更新最新的一些补丁包的。

​ 由于我们学习的环境都使用的是 CentOS 因此这里我们将 Docker 安装到CentOS 上。注意:这里建议安装在 CentOS7. x 以上的版本,在 CentOS6. x 的版本中,安装前需要安装其他很多的环境而且 Docker 很多补丁不支持更新 。

3.2、在VMware Workstation中安装CentOS7

资料中已经准备好了安装好的镜像,直接挂载就可以了。

3.2.1、挂载虚拟机

双击CentOS_64.vmx,则可以直接进入虚拟机。

docker 容器技术_第8张图片

3.2.2、编辑–虚拟网络编辑器

docker 容器技术_第9张图片

3.2.3、选择NAT网络模式

如果没有则“添加网络(E)…”,设置子网IP,这里用到的是192.168. 66网段

docker 容器技术_第10张图片

3.2.4、编辑虚拟机设置

docker 容器技术_第11张图片

3.2.5、设置网络适配器

设置网络适配器–选择NAT模式–点确定

docker 容器技术_第12张图片

注意:一定要设置成NAT模式,原因是我们需要和主机用同一个IP地址,并且可以上网,需要拉取docker镜像。

docker 容器技术_第13张图片

选择我已复制该虚拟机,否则会移动以前的虚拟机。

docker 容器技术_第14张图片

进入虚拟机之后先输入用户名和密码,用户名:root,密码:itcast

docker 容器技术_第15张图片

首先要查看一下这台虚拟机的IP地址,然后通过CRT远程访问,一般不在虚拟机里操作命令。

docker 容器技术_第16张图片

3.2.6、利用CRT进行连接

docker 容器技术_第17张图片

设置Hostname为虚拟机里的ip addr显示的IP地址,点connect。

docker 容器技术_第18张图片

点击Accept&Save,接受并保存。

crtconnect2

输入用户名和密码,勾选Save password,将密码保存,点OK

docker 容器技术_第19张图片

显示 [root@localhost ~]#表示连接成功

3.2.7、设置CRT远程连接工具

docker 容器技术_第20张图片

docker 容器技术_第21张图片

选择Linux风格

docker 容器技术_第22张图片

选择encoding为UTF-8模式

3.3、安装 docker

使用yum命令在线安装docker

yum install docker

docker 容器技术_第23张图片

中间安装会有两次确认,都输入y即可。

docker 容器技术_第24张图片

3.4、查看docker版本

docker -v

docker-v

-v就是-version的意思

3.5、启动与停止docker

1、启动docker

systemctl start docker

startdocker

2、停止docker

systemctl stop docker

stopdocker

3、重启docker

systemctl restart docker

restartdocker

4、查看docker状态

systemctl status docker

启动状态:

docker 容器技术_第25张图片

停止状态

docker 容器技术_第26张图片

3.6、查看docker信息

1、查看docker信息

docker info

2、查看docker帮助

docker --help

注意:是两个“-”

四、docker 镜像操作

4.1、什么是docker镜像

​ Docker镜像是由文件系统叠加而成(是一种文件的存储形式 )。最底端是一个文件引导系统即 bootfs,这很像典型的Linux/Unix的引导文件系统 。Docker用户几乎永远不会和引导系统有什么交互。实际上,当一个容器启动后,它将会被移动到内存中,而引导文件系统则会被卸载以留出更多的内存供磁盘镜像使用。Docker容器启动是需要的一些文件,而这些文件就可以称为Docker镜像。

docker 容器技术_第27张图片

4.2、拉取镜像

4.2.1、从Docker Hub拉取

​ Docker镜像首页,包括官方镜像和其它公开镜像。Docker Hub上最受欢迎的10大镜像(通过Docker registry API 获取不了镜像被 pull 的个数,只能通过镜像的 stars 数量,来衡量镜像的流行度。毫无疑问,拥有最高 stars 数量的库都是官方库)。

docker 容器技术_第28张图片

​ 国情的原因,国内下载 Docker HUB 官方的相关镜像比较慢,可以使用国内( docker.io的一些镜像加速器,镜像保持和官方一致,关键是速度块,推荐使用。

​ Mirror 与 Private Registry的区别:

​ Private Registry(私有仓库)是开发者或者企业自建的镜像存储库,通常用来保存企业内部的 Docker 镜像,用于内部开发流程和产品的发布、版本控制。

​ Mirror是一种代理中转服务,我们(比如 daocloud)提供的 Mirror 服务,直接对接 Docker Hub 的官方 Registry 。Docker Hub上有数以十万计的各类 Docker 镜像。

​ 在使用Private Registry 时,需要在 Docker Pull 或 Dockerfile 中直接键入 Private Registry 的地址,通常这样会导致与 Private Registry 的绑定, 缺乏灵活性。

​ 使用Mirror 服务,只需要在 Docker 守护进程( Daemon )的配置文件中加入 Mirror 参数,即可在全局范围内透明的访问官方的 Docker Hub ,避免了对Dockerfile 镜像引用来源的修改。

​ 简单来说,Mirror 类似 CDN ,本质是官方的 cache Private Registry 类似私服,跟官方没什么关系。对用户来说,由于用户是要拖 docker hub 上的 image ,对应的是 Mirror 。

​ yum/apt get 的 Mirror 又有点不一样,它其实是把官方的库文件整个拖到自己的服务器上做镜像,并定时与官方做同步;而 Docker Mirror 只会缓存曾经使用过的 image。

​ 目前国内访问 docker hub 速度上有点尴尬,使用 docker Mirror 势在必行。现有国内提供 docker 镜像加速服务的商家有不少,下面重点 ustc 镜像。

4.2.2、ustc的镜像

​ ustc是老牌的 linux 镜像服务提供者了,还在遥远的 ubuntu 5.04 版本的时候就在用。 ustc的 docker 镜像加速器速度很快。 ustc docker mirror 的优势之一就是不需要注册,是真正的公共服务。

https://lug.ustc.edu.cn/wiki/mirrors/help/docker

步骤:

1、编辑该文件: vi /etc/docker/daemon.json // 如果 该文件不存在 就 手动创建 ;说明:在 centos7.x 下, 通过 vi 。

vi-daemon

2、在该文件中输入如下内容:输入“i”进入编辑,并将以下文本复制到daemon.json中,“i”就是"insert"的首字母。

{
	"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

docker 容器技术_第29张图片

3、按ESC,退出编辑,并输入:wq保存并退出

docker 容器技术_第30张图片

4、一定要重启docker 服务,如果重启 docker 后无法加速,可以重新启动 OS。

vi-daemon

4.2.3、现在开始拉取centos:7镜像

docker pull centos:7

这里拉取是需要网速的,所以需要等待。

dockerpullcentos

4.2.4、克隆一个窗口搜索镜像

​ 如果你需要从网络中查找需要的镜像,可以通过以下命令搜索

docker search {镜像名称}

例如:docker search tomcat

docker 容器技术_第31张图片

  1. NAME :仓库名称
  2. DESCRIPTION :镜像描述
  3. STARS :用户评价,反应一个镜像的受欢迎程度
  4. OFFICIAL 是否官方
  5. AUTOMATED自动构建,表示该镜像由Docker Hub自动构建流程创建的

4.2.5、克隆另外三个窗口拉取其他镜像

docker pull tomcat:7-jre7

docker 容器技术_第32张图片

docker pull mysql

docker 容器技术_第33张图片

docker pull redis

docker 容器技术_第34张图片

docker pull nginx

docker 容器技术_第35张图片

4.2.6、列出镜像

docker images

docker 容器技术_第36张图片

  1. REPOSITORY:镜像所在的仓库名称
  2. TAG:镜像标签
  3. IMAGE ID:镜像 ID
  4. CREATED:镜像的创建日期(不是获取该镜像的日期)
  5. SIZE:镜像大小
  6. 这些镜像都是存储在 Docker 宿主机的 /var/lib/docker 目录

​ 为了区分同一个仓库下的不同镜像, Docker 提供了一种称为标签 Tag 的功能。每个镜像在列出来时都带有一个标签, 例如 12.10、12.04 等等。每个标签对 组成特定镜像的一些镜像层进行标记(比如,标签12.04 就是对所有 Ubuntu 12.04镜像层的标记)。这种机制使得同一个仓库中可以存储多个镜像。–版本号

​ 我们在运行同一个仓库中的不同镜像时可以通过在仓库名后面加上一个冒号和标签名来指定该仓库中的某一具体的镜像,例如 docker run name custom_container_name -it docker.io/ubunto :12.04 /bin/bash 表明从镜像 Ubuntu:12.04 启动一个容器 ,而这个镜像的操作系统就是 Ubuntu:12.04。在构建容器时指定仓库的标签也是一个好习惯。

列出镜像的 IMAGE ID:

docker images -q

docker 容器技术_第37张图片

注:仅列出镜像ID,主要用于删除。

4.2.7、删除镜像

1、删除一个镜像

docker rmi {image_id}

2、删除所有镜像

docker rmi `docker images -q`

注意:其中 docker images -q是用1左边的键进行包括,就是 ` 这个键。

rmi 可以理解为 remove image 的简写。

五、docker 容器操作

5.1、创建容器

创建容器参数说明:

1、创建容器命令:docker run

2、-i:表示运行容器

3、-t:表示容器运行后进入容器,加入-i 和 -t之后就会运行并进入到该容器,即分配一个伪终端。

4、–name:表示为创建的容器命名。注意:只有命名才有两个 -

5、-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个 -v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上

6、-d:在 run 后面加上 -d 参数则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加 -i -t 两个参数,创建后就会自动进去容器)

7、-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个 -p 做多个端口映射

5.1.1、交互式容器

创建一个交互式容器:取名为 mycentos

docker run -it --name=mycentos centos:7 /bin/bash

docker 容器技术_第38张图片

进入容器之后,注意:如果退出,容器也随之停止。

docker 容器技术_第39张图片

5.1.2、守护式容器

创建一个守护式容器:如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。命令如下(容器名称不能重复):取名为 mycentos1

docker run -id --name=mycentos1 centos:7

docker 容器技术_第40张图片

接着登录:

docker exec -it mycentos1 /bin/bash

dockerexecit

注意:退出容器之后,容器也不会停止。

dockerexecit1

5.2、查看容器

查看当前启动的容器

docker ps 

dockerps

查看所有容器(启动过的历史容器)

docker ps -a

dockerpsa

-a就是-all的意思。

查看最后一次启动的容器

docker ps -l

dockerpsl

-l 就是 -last 的意思。

5.3、启动和停止容器

5.3.1、启动容器

docker start {container id}/{names}

dockerstart

5.3.2、停止容器

docker stop {container id}/{names}

dockerstop

5.4、删除容器

5.4.1、删除指定容器

docker rm {container id}/{names}

dockerrm

注意:删除时不能删除正在运行的容器,否则会报错:

dockerrm1

You cannot remove a running container

5.4.2、删除所有容器

docker rm `docker ps -a -q`

docker 容器技术_第41张图片

六、部署应用

6.1、部署mysql应用

部署mysql应用一共分4步:

1、拉取mysql镜像

2、创建mysql守护式容器

3、进入mysql容器

4、登录mysql

6.1.1、拉取mysql镜像

docker pull mysql

6.1.2、创建mysql守护式容器

docker run -id --name=leyou_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

dockerrunmysql

6.1.3、进入mysql容器

docker exec -it leyou_mysql /bin/bash

dockerexecmysql

6.1.4、登录mysql

mysql -uroot -p123456

docker 容器技术_第42张图片

6.1.5、通过SQLyog远程连接

docker 容器技术_第43张图片

​ 这是由于新版本的MySQL使用的是caching_sha2_password验证方式,但此时的SQLyog还没有支持这种验证方式。

​ 解决方法就是将验证方式改为以前版本(5.7及以下)使用的验证方式mysql_native_password。具体的验证方式可以查看默认数据库’mysql’中user表plugin字段。

​ 在命令行中登录数据库时不会出现错误,在命令行中登录数据库,执行下面两句命令:

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

FLUSH PRIVILEGES;

第一句是修改加密规则,第二句是刷新权限

docker 容器技术_第44张图片

注意:一定是登录到mysql之后才能执行下面的语句。

docker 容器技术_第45张图片

6.2、部署tomcat应用

部署tomcat应用一共分5步:

1、拉取tomcat镜像

2、创建tomcat守护式容器

3、进入tomcat容器

4、将静态资源复制到tomcat容器的webapps文件夹下

5、访问tomcat静态资源

6.2.1、拉取tomcat镜像

docker pull tomcat:7-jre7

6.2.2、创建tomcat守护式容器

docker run -id --name=leyou_tomcat -p 8000:8080 tomcat:7-jre7

dockerruntomcat

6.2.3、进入tomcat容器

docker exec -it leyou_tomcat /bin/bash

dockerruntomcat1

进入tomcat容器之后可以看到 tomcat的路径为 /usr/local/tomcat

ls

tomcatls

通过ls可以看到 webapps文件夹

6.2.4、上传静态资源到宿主机,再复制到webapps下

1、上传静态资源到宿主机

第一步:按 Alt+p 键进入到上传命令页:

docker 容器技术_第46张图片

第二步:写入命令

put -r D:\01_itheima\备课\docker\资源\portal

docker 容器技术_第47张图片

docker 容器技术_第48张图片

2、复制portal到tomcat的webapp里

ll

docker 容器技术_第49张图片

docker cp portal leyou_tomcat:/usr/local/tomcat/webapps

docker 容器技术_第50张图片

可以通过 cd webapps 进入到 webapps文件夹下,通过 ls 查看该文件夹下的所有文件,可以看到 portal 已经被复制进去了。

6.2.5、访问静态资源

在浏览器里输入:http://192.168.66.132:8000/portal/index.html

docker 容器技术_第51张图片

注意:这里是8000端口,原因是创建守护式容器的时候 -p 里映射的端口号为8000。

6.3、部署redis应用

部署redis应用一共分3步:

1、拉取redis镜像

2、创建redis守护式容器

3、进入redis、测试存值取值

6.3.1、拉取redis镜像

docker pull redis

6.3.2、创建redis守护式容器

docker run -id --name=leyou_redis -p 6379:6379 redis

docker 容器技术_第52张图片

6.3.3、进入redis、测试存取值

通过redis-cli.exe进入redis,进入redis-cli.exe所在的目录执行以下命令:

redis-cli -h 192.168.66.132

进入到redis容器:

docker 容器技术_第53张图片

测试存取值

docker 容器技术_第54张图片

set mykey tom

get mykey

6.4、部署nginx应用

部署nginx应用一共分4步:

1、拉取nginx镜像

2、创建nginx守护式容器

3、修改 nginx.conf 文件,配置反向代理

4、访问反向代理静态资源

6.4.1、拉取nginx镜像

docker pull nginx

6.4.2、创建nginx守护式容器

docker run -id --name=leyou_nginx -p 80:80 nginx

docker 容器技术_第55张图片

测试nginx

docker 容器技术_第56张图片

6.4.3、修改 nginx.conf 文件,配置反向代理

由于 nginx.conf 文件在 nginx 容器里,不方便修改,所以需要把 nginx.conf 文件复制到宿主机中进行修改。

1、先将 nginx.conf 复制到宿主机

docker cp leyou_nginx:/etc/nginx/nginx.conf nginx.conf

docker 容器技术_第57张图片

2、修改宿主机中的 nginx.conf 文件

vi nginx.conf

docker 容器技术_第58张图片

由于要用到tomcat的IP,所以先查看tocmat的IP地址:

docker inspect leyou_tomcat

docker 容器技术_第59张图片

在http节点中加入以下配置:

server {
	listen 80;
	server_name www.leyou.com;
	location / {
		proxy_pass http://172.17.0.3:8080;
		index index.html index.htm;
	}
}

注意:nginx 和 tomcat 在同一台宿主机里,所以 nginx 要访问 tomcat 是在局域网内访问,所以不是映射出来的 8000 端口,而是 8080 端口

docker 容器技术_第60张图片

3、将配置文件再复制到 nginx 下

docker cp nginx.conf leyou_nginx:/etc/nginx/nginx.conf

4、重启nginx

docker restart leyou_nginx

docker 容器技术_第61张图片

6.4.4、访问静态资源

1、先配置 host 文件

docker 容器技术_第62张图片

2、访问 http://www.leyou.com/portal/index.html

docker 容器技术_第63张图片

七、镜像的备份与迁移

7.1、容器保存为镜像

docker commit leyou_nginx mynginx 

将 leyou_nginx 保存为 mynginx 镜像

leyou_nginx是容器名称
mynginx是新的镜像名称
此镜像的内容就是你当前容器的内容,接下来你可以用此镜像再次运行新的容器

nginxcommit

docker images

docker 容器技术_第64张图片

7.2、镜像备份

docker save -o mynginx.tar mynginx

将 mynginx 镜像打包为 mynginx.tar,其中 -o 可以理解为 -out

saveo

ls 查看

7.3、镜像恢复与迁移

1、先删除现有的 mynginx 镜像

docker rmi {leyou_nginx对应的IMAGE ID}

docker 容器技术_第65张图片

2、恢复 mynginx 镜像

docker load -i mynginx.tar

docker 容器技术_第66张图片

八、关于docker的面试题

8.1、什么是Docker

答:Docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中无缝运行。

8.2、什么是Docker镜像?

答:Docker镜像是Docker容器的源代码,Docker镜像用于创建容器。使用docker pull 命令拉取镜像。

8.3、什么是Docker容器?

答:Docker容器包括应用程序及其所有依赖项,作为操作系统的独立进程运行。

8.4、Docker容器有几种状态?

答:Docker容器可以有四种状态:运行;已暂停;重新启动;已退出;

你可能感兴趣的:(Python,docker,容器,运维)