一起来学Docker(一)

简介: 一起来学Docker(一)

前言

目前正在出一个Docker系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~

Docker大家应该都听说过,特别是在当今云原生爆火的时代,更值得我们去学习,下面会带大家系统性的认识一下Docker,并结合一些例子,让大家快速上手~

好了, 废话不多说直接开整吧~

什么是Docker

Docker 是一个开源的应用容器引擎,基于Go语言 并遵从 Apache2.0 协议开源。我们可以将应用以及依赖打包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口, 容器性能开销极低。

我们知道发布一个应用到服务器上,要考虑到很多环境问题,但是使用Docker之后,我们就不用担心环境问题了,可以非常方便的交付应用,只需要在对应的机器上运行我们打包好的容器即可。

Docker其实是在LXC的基础上(1.5之后不再默认使用LXC)提供了一个高层的容器引擎,主要优势:

  • 轻量级资源使用、资源隔离。容器在进程级别隔离并使用宿主机的内核,而不需要虚拟化整个操作系统。容器可以使用自己的cpu、memory等。
  • 可移植性。跨主机部署,Docker镜像屏蔽了不同OS差异,它可以将环境配置进行抽象和应用打包,保证在不同的硬件机器上都可以部署。
  • 以应用为中心、自动构建、版本管理、组件重用、镜像共享。

与VM相比

传统VM的镜像只是基础镜像docker镜像是基础加应用,是一个软件从最顶层一直到最底层系统库的完整依赖栈。有了这样一个完整的依赖栈,再加上容器技术的隔离性,就能在任何地方把应用启动起来,且保证行为一致,只要内核在docker要求的最低版本之上就行【并不是模拟一个完整的OS】。

虚拟机的缺点:需要Hypervisor实现硬件资源虚拟化,内存资源占用高;启动慢,需要加载OS;

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。 容器销毁,数据随之被删除。任何保存于容器存储层的信息都会随容器删除而丢失

安装Docker

Docker是一个C/S架构的程序,Docker Client是客户端,Docker daemon是服务端。 我们可以通过[官网下载](https://www.docker.com/get-started/),来进行安装(根据你系统选择安装),安装步骤很简单,直接点就完了

首次启动可能会有点慢,要等待一会时间~

终端执行docker ps,如果没启动会报服务没启动的错误 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

如何实现资源隔离

通过CgroupNamespace实现了资源的隔离,从而实现了轻量级的虚拟化;主机通过CgroupNamespace将整个服务器划分为多个bins/libs,每个应用程序运行在独立的bins/libs中,每个bins/libs相当于从服务器中划分出的独立的资源

Docker/libcontainer:前者基于后者,前者处理上层业务,后者与内核交互,管理namespaces、cgroups、capabilities以及文件系统,为前者提供处理容器的创建(Factory)、容器生命周期管理(Container)、进程生命周期管理(Process)等一系列接口

当需要为Docker创建网络环境时,通过网络管理驱动networkdriver创建并配置Docker容器网络环境;当需要限制Docker容器运行资源或执行用户指令等操作时,则通过execdriver来完成。而libcontainer是一项独立的容器管理包,networkdriver以及execdriver都是通过libcontainer来实现具体对容器进行的操作。

镜像

Docker通过把应用的运行时环境和应用打包在一起,解决了部署环境依赖的问题; 通过引入分层文件系统这种概念,解决了空间利用率的问题; 不同的容器可以共享底层的只读镜像,通过写入自己特有的内容后添加新的镜像层,新增的镜像层和下层的镜像一起又可以作为基础镜像被更上层的镜像使用。这种特性可以极大地提高磁盘利用率。

Docker镜像是由多个文件系统(只读层)叠加而成。当我们启动一个容器的时候,Docker会加载只读镜像层并在其上添加一个读写层。如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏。当删除Docker容器,并通过该镜像重新启动时,之前的更改将会丢失。在Docker中,只读层及在顶部的读写层的组合被称为Union File System(联合文件系统)。 【对文件系统的修改作为一次commit来一层层地叠加】Union FS包括bootfs(引导文件系统)和rootfs。如centos镜像很小的原因(完整版4G,镜像200M),即与宿主机共用了bootfs,仅自己打包了rootfs部分。

光速入门

下面带着大家快速体验一下,Docker如何运行一个应用,主要分为以下几个步骤:

1.需要准备一个打包好的镜像,这里我们直接从docker hub远程仓库拉取,当然镜像也可以本地进行制作,这个后边教大家

  • 使用docker pull image命令拉取镜像
docker pull hello-world

2.查看是镜像列表

docker images
  • 输出
docker.io/hello-world                               latest              feb5d9fea6a5        2 years ago         13.3 kB

3.启动容器

docker run hello-world
  • 输出
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/
For more examples and ideas, visit:
 https://docs.docker.com/get-started/

这个是容器运行过程中输出的日志,说明我们应用成功被运行了~

结束语

本节到这里就结束了,docker命令很多,大家不要去背,如果忘了可以使用docker -h进行查看,下节给大家讲解一些常用的docker命令~

本着把自己知道的都告诉大家,如果本文对有所帮助,点赞+关注鼓励一下呗~

相关文章
|
3月前
|
运维 持续交付 Docker
在Docker中,Docker可以用来做什么?
在Docker中,Docker可以用来做什么?
|
5月前
|
Linux 应用服务中间件 nginx
|
6月前
|
JavaScript Linux Docker
【Docker】什么是Docker?
【4月更文挑战第20天】【Docker】什么是Docker?
|
6月前
|
关系型数据库 MySQL 应用服务中间件
docker
docker
115 2
|
JavaScript 应用服务中间件 API
Docker
Docker 是一种开源的容器化平台,可以让开发者在容器中快速构建、打包、发布和运行应用程序,从而实现应用程序的快速交付和部署。
470 1
|
Linux 测试技术 API
【Docker】Docker最近这么火,它到底是什么
【Docker】Docker最近这么火,它到底是什么
|
安全 Linux Docker
认识 Docker 的世界
Docker 简介:Docker 是一种运行于 Linux 和 Windows 上的软件,用于创建、管理和编排容器。 Docker 是在 GitHub 上开发的 Moby 开源项目的一部分。 Docker 公司,位于旧金山,是整个 Moby 开源项目的维护者。Docker 公司还提供商业版和社区版。Docker运行时与编排引擎:Docker 引擎是用于运行和...
248 1
认识 Docker 的世界
|
Docker 容器
Docker 初识
Docker 初识
58 0
|
NoSQL 安全 Linux
docker与gosu
gosu命令在docker的entrypoint.sh中经常用到,本文详细分析了gosu的作用和用法
773 0
docker与gosu
|
测试技术 Linux 持续交付
为什么会是Docker?
最近Docker容器化部署特别火热,那为什么说Docker是下一代的容器工具?回答这个问题之前,我们就服务器的历史演变来简单说明一下。
为什么会是Docker?
下一篇
无影云桌面