Docker基本概念

概述

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 .

Ref



《 “Docker基本概念” 》 有 3 条评论

  1. So this kind of thing frequently causes rotator cuff problems, including rotator cuff tears and rotator cuff tendinopathies and things like that, because of the shoulder just being kind of hunched forward where buy cheap cytotec pills

  2. The specific EGFR inhibitor AG1478 6 ОјM; Sigma Aldrich and the MAPK ERK inhibitor U0126 10 ОјM; Beyotime abolished the agonistic effect of TAM 1 ОјM on the expression of ОІ1 integrin, while the PI3K inhibitor Wortmannin 1 ОјM; Sigma Aldrich did not Fig priligy When you are sitting in the chemo chair, nobody is asking you to make them a sandwich

  3. The less frequent, but clinically significant, renal side effects include ARF, interstitial nephritis, nephrotic syndrome, and RPN what is priligy tablets

回复 agodelo 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

About Me

一位程序员,会弹吉他,喜欢读诗。
有一颗感恩的心,一位美丽的妻子,两个可爱的女儿
mail: geraldlee0825@gmail.com
github: https://github.com/lisuxiaoqi
medium: https://medium.com/@geraldlee0825