docker安装实验和docker容器的使用,云计算技术与应用报告
题目:Docker的安装和使用实验环境:ubuntu16.04,虚拟机的网络模式设为NAT模式,IP地址通过虚拟 DHCP 服务器自动分配。实验内容和要求:安装Docker并进行相关实验,熟悉Docker的相关操作。实验包括Docker的安装、镜像和容器的使用、容器的连接、容器间的通信和Nginx的使用。实验原理和机制:Docker是一种构建在LXC之上,基于进程容器的轻量级虚拟化解决方案,实现了
题目:Docker的安装和使用
实验环境:ubuntu16.04,虚拟机的网络模式设为NAT模式,IP地址通过虚拟 DHCP 服务器自动分配。
实验内容和要求:安装Docker并进行相关实验,熟悉Docker的相关操作。实验包括Docker的安装、镜像和容器的使用、容器的连接、容器间的通信和Nginx的使用。
实验原理和机制:
Docker是一种构建在LXC之上,基于进程容器的轻量级虚拟化解决方案,实现了应用程序级别的资源隔离。通过Docker技术,开发者把应用以及依赖包封装到一个镜像中,可以发布到Linux或Windows机器上。
Docker镜像就像停止运行的容器,镜像由多个层组成,每层叠加之后,从外部看来就如一个独立的对象。镜像内部是一个精简的操作系统(OS),同时还包含应用运行所必须的文件和依赖包。Docker镜像存储在镜像仓库服务(Image Registry)当中。Docker客户端的镜像仓库服务是可配置的,默认使用Docker Hub。镜像仓库服务包含多个镜像仓库(Image Repository)。同样,一个镜像仓库中可以包含多个镜像。
容器是镜像的运行时实例。正如从虚拟机模板上启动VM一样,用户也同样可以从单个镜像上启动一个或多个容器。虚拟机和容器最大的区别是容器更快并且更轻量级——与虚拟机运行在完整的操作系统之上相比,容器会共享其所在主机的操作系统/内核。容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过-P或-p参数来指定端口映射。
容器之间可通过IP、Docker DNS Server或joined容器三种方式通信。两个容器要能通信,必须要有属于同一个网络的网卡。满足这个条件后,容器就可以通过IP交互了。具体做法是在容器创建时指定相应的网络,或者将现有容器加入到指定网络。通过IP访问容器虽然满足了通信的需求,但还是不够灵活。因为我们在部署应用之前可能无法确定IP,部署之后再指定要访问的IP会比较麻烦。对于这个问题,可以通过docker自带的 DNS 服务解决。从 Docker 1.10 版本开始,docker daemon实现了一个内嵌的DNS server,使容器可以直接通过“容器名”通信。但使用 docker DNS 有个限制:只能在user-defined网络中使用。也就是说,默认的bridge网络是无法使用DNS的。joined容器可以使两个或多个容器共享一个网络栈,共享网卡和配置信息,joined容器之间可以通过127.0.0.1直接通信。
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强。
实验步骤:
实验1、Docker安装
1.查看linux内核的版本。
2.用清华大学的源替换原来的源。
3.更新ubuntu16.04的源。
4.安装docker。
5.查看docker版本。
6.启动docker服务,查看 docker 服务状态。
8.测试运行docker Hello World。
9.停止 docker 服务。
二、Docker使用
1.镜像使用
(1)列出镜像列表。
(2)拉取镜像(在本地主机上使用一个不存在的镜像前预先下载它)。
(3)搜索镜像。
实验2.docker 容器的使用
(1)查看docker客户端的所有命令使用方法。
(2)了解Docker运行时的命令使用方法。
(3)列出后台运行的容器列表。
(4)通过ubuntu14.04镜像创建一个容器,但不启动它。
(5)运行容器,运行成功后在容器中可以使用ubuntu14.04。(-i:以交互模式运行容器,通常与-t同时使用,表示开启了input功能。-t:为容器重新分配一个伪输入终端,通常与-i同时使用,表示开启了连接容器里的终端。ll:查看容器内所有文件。)
(6)在docker容器中运行一个Python Flask应用来运行一个web应用。
a.拉取镜像
b.运行容器(-d:让容器在后台运行,-P:将容器内部使用的网络端口映射到我们使用的主机上)
c.查看正在运行的容器
d.由图可知Docker开放了5000端口映射到主机端口32768 上,可以通过浏览器访问web应用
e.查看web应用程序日志(-f:让docker logs像使用tail -f一样来输出容器内部的标准输出)
f.停止web应用容器
g.移除web应用容器(容器必须是停止状态)
3.容器连接
(1)创建一个python应用的容器。
(2)将容器内部端口绑定到指定的主机端口(-P:容器内部端口随机映射到主机端口)。
(3)查看后台正在运行的容器。
(4)指定容器绑定的网络地址,这样我们就可以通过访问127.0.0.1:5001来访问容器的5000端口。
(5)容器命名。
4.docker容器间通信
(1)创建bridge网络 my_net2,指定网段和网关参数。
(2)参看网络配置。
(3)通过DNS server进行通信。
a.启动bbox1和bbox2两个容器
b.验证bbox2可以ping到bbox1
(4)默认的bridge网络无法使用docker DNS,如下。
a.创建bbox3和bbox4,均连接到bridge网络
b.bbox4无法ping到bbox3
(5)通过joined容器通信。
a.创建一个httpd容器,名为web1
b.创建busybox容器并通过–network=container:web1指定joined容器为web1,并查看busybox容器中的网络配置信息(Container模式就是在运行容器时通过–net指定另一个已经在运行的有单独Network Namespace的容器,与这个容器共享一个Network Namespace。在这种情况下,新建的容器没有自己的网卡,也不会给它分配IP,而是两个容器共享IP和端口空间)
c.查看 web1 的网络配置(docker exec命令能够在运行着的容器中执行命令)
d.可以看出busybox和web1的网卡mac地址与IP 完全一样,它们共享了相同的网络栈。 因此,busybox可以直接用127.0.0.1访问web1的http 服务
5.docker安装Nginx(engine x)
(1)以后台模式启动一个交互式容器,并将容器的 80 端口映射到主机随机端口。
(2)对容器内资源进行更新和升级。
(3)在容器内安装Nginx服务(指令中的y=yes,表示跳过系统提示,直接安装)
(4)在容器内安装文本编辑器vim。
(5)在容器中创建静态页面(-p表示创建目录及其下面的子目录)。
(6)在容器中编辑Nginx配置文件,修改路径。
(7)在容器中运行Nginx。
(8)在容器中查看进程(-e:显示所有进程,-f:全格式显示)。
(9)验证网站访问。
a.用ctrl+p ctrl+q将容器放于后台运行,再用docker ps命令查看后台运行的容器
b.访问nginx
c.在宿主机的浏览器,通过ubuntun16.04的ip地址和端口访问
出现的问题:
1.列出镜像列表失败。
2.拉取镜像失败。
3.两个容器无法通过“容器名”通信。(bbox1与bbox2)
4.在web1容器中找不到ip a命令。(command not found)
解决方案:
1.要先启动docker。
2.新建daemon.json配置文件,设置国内镜像源加速地址。
3.修改daemon.json文件,配置全部容器的DNS,重启docker使之生效
4.进行资源更新和升级。(apt-get update/apt-get upgrade)
更多推荐
所有评论(0)