目录
1.1什么是虚拟化
1.2什么是Docker
1.3容器与虚拟机的比较
1.4Docker组建
2、Docker安装
2.2设置ustc的镜像
2.3Docker的启动与停止
3、docker常用命令
3.1镜像
3.2容器相关命令
1.1什么是虚拟化
在计算机中,虚拟化(Vitualization)是一种资源管理技术,是将计算机的各种实体资源,比如服务器、网络、内存及存储等,予以抽象,转换后呈现出来,打破实体结构间的不可分割的障碍,使用户可以比原来的组态更好的方式来用用这些资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或者物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。
在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件对资源充分利用虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(VIP)、桌面虚拟化、服务虚拟化、虚拟机等。
1.2什么是Docker
Docker是一个开源项目,诞生于2013年初,最初是doCloud公司内部的一个业余项目。它基于Google公司退出的Go语言实现的。项目后来加入了Linux基金会,遵循了Apache2.0协议。
为什么选择Docker
-
更高效的利用系统资源
由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件的存储速度,都是比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。
-
更快速的启动事件
传统的虚拟机技术启动应用服务往往虚拟需要数分钟,而Docker容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级。甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间
-
一致的运行环境
开发环境中一个常见的问题是环境的一致性问题,由于开发环境、测试环境、生产环境不一致,导致有些Bug并未在开发过程中被发现,而Docker的镜像提供了除了内核外完整的运行时环境,确保了应用运行环境的一致性,从而不会再出现[这段代码在我的机器上运行没有问题]这类的问题!
-
持续交付和部署
对于开发和运维(DevOps)人员来说,最希望的就是一次创建或者配置,可以在任意地方正常运行。
使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过Dockerfile来进行镜像的构建,并且结合持续集成系统进行集成测试,而运维人员则可以直接在生产环境中快速的部署该镜像,甚至结合持续部署系统进行自动部署。
而且使用Dockerfile使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运维所需条件,帮助更好的生产环境部署该镜像。
-
更轻松的迁移
由于Docker确保了执行环境的一致性,使得应用的迁移更加容易。Docker可以在很多平台上运行,无论是物理机还是虚拟机、公有云。私有云。甚至是笔记本,其运行结果是一致性的。因此用户可以很轻松的将在一个平台上运行的应用,迁移到另外一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况
-
更轻松的维护和扩展
Docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更加的容易,也使得应用的维护更新变得更加简单,基于基础镜像进一步扩展镜像也变得非常简单,此外,Docker团队各个开源项目团队一起维护了一大批高质量的官方镜像,既可以直接在生产环境中使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。
1.3容器与虚拟机的比较
下面的图片Docker和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统的方式则是在硬件层面实现的。
与传统的虚拟机相比,Docker优势体现在启动速度快、占用体积小
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般为几十个 |
1.4Docker组建
1.4.1Docker服务器与客户端
Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker也提供了一个命令行工具Docker以及一整套RESful API。亦可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到另外一台宿主机的远程Docker守护进程
1.4.2Docker镜像与容器
镜像是架构Docker的基石。用户基于镜像来运行自己的容器。镜像也是Docker生命周期中“构建”部分。镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步的构建出来的:例如:
-
添加一个文件;
-
执行一个命令;
-
打开一个窗口;
也可以将镜像当做容器的“源代码”。镜像体积很小,非常“便携”,抑郁分享、存储和更新。
Docker借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker将这个模型运用到自己的设计中,唯一不同的是:集装箱运输货物,而Docker运输软件。
和集装箱一样,Docker在执行上述操作时,并不会关心容器中到底装了什么,它不管是web服务器,还是数据库,或者是应用程序服务器什么的。所有的容器都按照相同的方式将内容“装载”进去。
Docker也不关心你要把容器运到何方:我们可以在自己的笔记本中构建容器,上传到Refistry,然后下载到另一个物理的或者虚拟的服务器来测试,在把容器部署到具体的主机中,像标准集装箱一样,Docker容器方便替换,可以叠加,易于分发,并且尽量通用。
1.4.3Registry(注册中心)
Docker用Registry来保存用户构建的镜像。Registry分为共有和私有两种。Docker公司运行公共的Refistry叫做Docker Hub。用户可以在Docker Hub注册账号,分享并且保存自己的镜像(在Docker HUb 下载镜像巨慢,可以自己构建私有的Registry)。
2、Docker安装
Docker官方建议在ubuntu1中安装,因为Dock而是基于Ubuntu发布的,而且一般Docker出现问题Ubuntu是最先更新或者打补丁的,在很多版本的center os中是不支持更新最新的一些补丁包的。
1、yum包更新到最新
yum update
2、安装需要的软件包,yum-util提供yum-config-manager功能,另外两个是devicemappper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
3、设置yum源为阿里云
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4、安装docker
yum install -y docker-ce
5、查看是否安装成功
[root@centos7 ~]# docker -v
Docker version 24.0.2, build cb74dfc
2.2设置ustc的镜像
ustc是老牌的linux镜像服务提供者了,还在遥远的utuntu5.04版本的时候就在用,ustc的docker镜像加速器速度很快。ustc docker mirrror的优势之一就是不需要注册,是真正的公共服务。
http://lug.ustc.edu/wiki/mirrors/help/docker
编辑该文件
[root@centos7 ~]# mkdir -p /etc/docker/
[root@centos7 ~]# vim /etc/docker/daemon.json
在文件中输入如下内容
{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}
2.3Docker的启动与停止
启动docker:
systemctl start docker
停止docker:
systemctl stop docker.socket
查看docker运行状态
systemctl status docker
设置docker开机自启:
systemctl enable docker
3、docker常用命令
3.1镜像
查看镜像:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
搜索镜像:
docker search php
拉取镜像:
docker pull centos:7
删除镜像:
docker rmi 镜像id
3.2容器相关命令
3.2.1查看容器
查看正在运行的容器:
[root@centos7 ~]# docker ps
查看所有容器:
[root@centos7 ~]# docker ps -a
3.2.2创建与启动容器
创建容器命令
docker run
-i:表示运行容器
-t:表示容器启动后会进入其命令行,加入这两个参数后,容器创建爱你就能登录进去。即分配一个伪终端。
--name:为创建的容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者为映射到宿主机上的目录),可以使用多个v做多个目录或者文件映射。
注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上一个-d参数,则会创建一个守护式容器在后台运行(这样创建容器后就不会自动登录容器,如果只加-i,-t两个参数,创建后就会自动进入到容器中)。
-p:表示端口映射,前者是宿主主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
1、交互式方式创建容器
docker run -it --name=mycentos centos:7 /bin/bash
2、守护式方式创建容器
docker run -di --name=mycentos2 centos:7
登录容器:
docker exec -it mycentos2 /bin/bash
停止容器:
docker stop f7f6b0dbd985
启动容器
docker start mycentos2
mycentos2
3.2.3容器的文件操作
将宿主机中的文件拷贝到容器中:
docker cp anaconda-ks.cfg mycentos2:/usr/local
Successfully copied 3.58kB to mycentos2:/usr/local
进入mycentos容器中进行查看:
docker exec -it mycentos2 /bin/bash
ls
anaconda-post.log
将容器中的文件拷贝到宿主机中
docker cp mycentos2:/usr/local/anaconda-ks.cfg anaconda-ks2.cfg
Successfully copied 3.58kB to /root/anaconda-ks2.cfg
3.2.4目录挂载
创建一个新的容器:
[root@centos7 ~]# docker run -di -v /usr/local/mydata/:/usr/local/mydata --name=mycentos3 centos:7
cd0247073e3ff747fd68ada87a26e432f77446b069bea84cbe94109f63a69182
在该目录下创建文件:
vim /usr/local/mydata/test
写入内容:abcddd
进入mycentos中查看:
docker exec -it mycentos3 /bin/bash
cd /usr/local/mydata/
cat test
abcddd
3.2.5查看容器IP地址
查看容器的全部信息:
docker inspect mycentos3
查看指定信息:
docker rm cd0247073e3f
cd0247073e3f
删除某容器:
docker rm cd0247073e3f
cd0247073e3f