概述
Docker是非常重要的工具,大量应用于软件发布,集群部署等领域,在云服务,大数据,AI等行业蓬勃发展的今天,即插即用是对软件的基本要求,因此Docker应运而生,基本做到了软件随时下载,独立于环境运行,用后即删,是不可多得的利器
Linux容器
说Docker之前,得先提一下Linux容器。对Docker有所耳闻的朋友,都接触一种说法,即Docker和虚拟机很像,但其实二者差别很大的。
虚拟机就像一辆重型坦克,而Docker是一辆自行车,二者都可以用于代步,但体型差异迥异,Docker是基于Linux容器技术的
由于虚拟机存在过于重量级缺点,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC)。
Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。
由于容器是进程级别的,相比虚拟机有很多优势。
(1)启动快
容器里面的应用,直接就是底层系统的一个进程,而不是虚拟机内部的进程。所以,启动容器相当于启动本机的一个进程,而不是启动一个操作系统,速度就快很多。
(2)资源占用少
容器只占用需要的资源,不占用那些没有用到的资源;虚拟机由于是完整的操作系统,不可避免要占用所有资源。另外,多个容器可以共享资源,虚拟机都是独享资源。
(3)体积小
容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包,所以容器文件比虚拟机文件要小很多。
总之,容器有点像轻量级的虚拟机,能够提供虚拟化的环境,但是成本开销小得多。
Docker
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。
Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。
总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样
Linux上启动Docker 需要用户具有 sudo 权限
docker主要用途
Docker 的主要用途,目前有三大类。
(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
docker服务
docker是C/S架构,运行docker命令时,要先启动docker服务
systemctl方式: $ sudo systemctl start docker 或者service方式: $ sudo service docker start
image
在docker中,最重要的两个概念是image和container
Docker 把应用程序及其依赖,打包成一个文件,叫做image 文件。可以理解为image就是一个简化的,包含软件本身,以及软件所需要的库,以及所需要的操作系统在内的包
image 是二进制文件。实际开发中,一个 image 文件往往通过继承另一个 image 文件,加上一些个性化设置而生成。举例来说,你可以在 Ubuntu 的 image 基础上,往里面加入 Apache 服务器,形成你的 image。
docker image的相关操作
# 下载image。library/hello-world是 image 文件在仓库里面的位置,其中library是 image 文件所在的组,hello-world是 image 文件的名字 docker image pull library/hello-world # 或者省略组(library)的名字,直接下载 docker image pull hello-world # 删除 image 文件 $ docker image rm [imageName] # 列出本机的所有 image 文件。 $ docker image ls -a
image 文件制作完成后,可以上传到网上的仓库。Docker 的官方仓库 Docker Hub 是最重要、最常用的 image 仓库
Container
image是静态文件,docker在运行时会从image生成container文件,运行的是container实例。一个image文件,可以生成多个container实例。image和container的关系,可以理解为二进制可执行文件和进程之间的关系
image文件生成的container实例,本身也是一个文件,称为容器文件。也就是说,一旦container生成,就会同时存在两个文件: image 文件和container文件。
关闭container并不会删除container文件,只是container停止运行而已
终止运行的container文件,依然会占据硬盘空间,可以使用docker container rm命令删除
container相关命令:
## 从 image 文件,生成一个正在运行的容器实例 $ docker container run hello-world # 停止container $ docker container stop [containID] # 启动container $ docker container start # 删除container $ docker container rm # 列出本机正在运行的容器 $ docker container ls # 列出本机所有容器,包括终止运行的容器 $ docker container ls --all
c/s架构和context
docker是c/s架构,后台运行着dockerd程序,是server端
前台运行的是docker是client端。
请求通过client发送给server, server处理后返回给client
因此比如docker build等创建image动作,是需要把文件从docker client端上传给server的。这是docker build需要指定Context(上下文路径)的原因,该Context下的文件,需要首先全部上传到server端,然后再执行dockerfile里面的指令。因此docker build时的context路径下,尽量不要放不相关文件
# 最后的.表示当前路径作为context docker build -t nginx:v3 .
回复 how to get cheap cytotec for sale 取消回复