DOCKER的相关内容
1.什么是容器?
容器是对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。简单地说,一个容器包含了完整的运行时环境:除了应用程序本身之外,这个应用所需的全部依赖、类库、其他二进制文件、配置文件等,都统一被打入了一个称为容器镜像的包中。通过将应用程序本身,和其依赖容器化,操作系统发行版本和其他基础环境造成的差异,都被抽象掉了。
2.虚拟机对容器
传统无力服务器和虚拟机操作系统本身占用一定资源,CPU 内存利用率长期低于40%,存在大量浪费。容器进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 容器技术比虚拟机技术更为轻便、快捷。
3.传统部署方式
开发交付的是代码安装包,安装包对运行环境依赖有严格要求,开发和生产环境的不一致会随着应用的复杂性而加剧
从单体应用迁移到微服务架构,对应用的部署要求更高
每个服务使用的技术栈 和依赖的外部服务千差万别
如果使用虚拟化方式部署,需要为每个服务创建独立的操作系统和镜像
众多操作系统,以及系统镜像的维护是一个重大挑战
4.容器的部署方式
容器提供了一种更简洁的方式,容器镜像包含代码以及代码运行所以李爱的全部内容
开发团队交付的是可直接运行的镜像,而不是代码安装包
应用团队只需要从开发交付的镜像创建容器并运行
运维人员只需要管理运行容器的基础设施和容器的运行
5.容器的优势
最大的优势是不可变的,保证所有环境的一致性,生产环境出现问题时,开发人员可以在本地运行同样版本的镜像来定位问题,不存在环境问题引发的工作量
相比传统虚拟机更加的轻量化
秒级响应,新版本一旦出现问题可快速回滚至上一版本。
6.什么是DOCKER?
Docker是一个开源项目,诞生于2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的Go语言实现。项目后来加入了Linux 基金会,遵从了Apache 2.0 协议,项目代码在GitHub (https://github.com/docker/docker) 上进行维护。
Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。
用户操作Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。
7.仓库,容器,镜像
1)仓库Registry仓库是集中存放镜像文件的场所.Docker用Registry来保存用户构建的镜像。Registry分为公共和私有两种。Docker公司运营公共的Registry叫做Docker Hub。用户可以在Docker Hub注册账号,分享并保存自己的镜像(说明:在Docker Hub下载镜像巨慢,可以自己构建私有的Registry)。
2)镜像是构建Docker的基石。用户基于镜像来运行自己的容器。镜像也是Docker生命周期中的“构建”部分。镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步构建出来。Docker 镜像相当于一个只读的模板。镜像可以用来创建 Docker 容器
3)容器Docker 利用容器来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。容器是基于镜像启动起来的,容器中可以运行一个或多个进程。我们可以认为,镜像是Docker生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。容器基于镜像启动,一旦容器启动完成后,我们就可以登录到容器中安装自己需要的软件或者服务。(可以这样理解,从阿里云拉下来的mysql其实就是镜像文件)
8.安装DOCKER
yum install docker
9.docker 的常见命令
启动/停止/重启docker systemctl start/stop/restart docker
查看docker状态systemctl status docker
查看docker的概要信息 docker info
查看docker版本信息 docker --version
10.操作镜像
查看docker本地的镜像 docker images
搜索一个镜像docker search mysql
拉取镜像docker pull centos:7(一般用的不多,我感觉)
上传镜像 docker push 镜像名(到目前为止没用过)
删除docker镜像: docker rmi 镜像ID #删除镜像需要先删除该镜像生成的容器
查看镜像或容器详细信息docker inspect 容器或镜像ID
11.启动容器
上课使用启动容器的方法如下:(也可以使用:sudo docker start +容器ID/容器名[支持模糊查询]})
docker run -d --name=nginx-55 -p 97:80 -v nginx-vol:/usr/share/nginx/html nginx
创建容器:docker run
参数:
-i :表示交互式
-t :表示容器启动后会进入其命令行终端,加入这两个参数后,加入这两个参数后,容器创建就能登录进去,即分配一个伪终端
--name:为创建的容器命名
-v :表示目录映射关系(前者是宿主机目录绝对路径,后者是映射到宿主机上的目录),可以使用多个-v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d :在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器就不会自动登录容器,如果只加-i -t两个参数,创建容器后就会自动进去容器).
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口.可以使用多个 -p 做多个端口映射
后台启动容器,创建守护式容器:docker run -d 镜像名: tag | 镜像ID
进入容器,登录守护式容器:docker exec -it 容器ID/容器名称 /bin/bash
启动容器并进入,创建交互式容器::docker run -it --name=容器名称 镜像id|镜像名:tag
退出当前容器:exit
查看运行的容器:docker ps
查看所有容器,包括运行和非运行: docker ps -a
停止容器:docker stop 容器id|容器名称
启动停止的容器; docker start 容器id|容器名称
删除容器:docker rm 容器id|容器名称 #删除一个停止的容器
docker rm -f 容器id|容器名称 #强制删除一个容器,可以是运行状态
删除所有容器:docker rm -f (docker ps -a | awk '{print 1}')
12.宿主机和容器之间复制文件
宿主机复制文件到容器:docker cp 宿主机文件 容器名称:容器路径
容器中复制文件到宿主机:docker cp 容器名称:容器路径 宿主机目录
13.mysql容器部署
拉取MySQL镜像docker pull mysql:5.7
创建容器docker run -d --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
登录MySQL容器docker exec -it mysql /bin/bash