初步了解Docker及其使用(一)

2019/07/16 Tool 共 2739 字,约 8 分钟

记录初步了解 Docker 是什么,它的来源与应用。

历史问题

有句话,相信大部分开发者都说过一句话:“在我这是好的”。但为什么在其他环境下,就不好了呢~

在软件开发上,最大的麻烦之一,就是环境配置。用户计算机的环境不尽相同,比如某些库和软件没有或者版本不一致,都会引起 -It works on my machine-

不畏困难的开发者们就在想,能不能让软件自带环境再去安装呢,这样就从根本上解决了问题。也就是说软件需要什么环境,安装包就有什么。这样,就是 It works on every machine

解决问题的方式

虚拟机

学过操作系统的人,或者自己装过系统的人,可能听说或用过虚拟机。虚拟机是在一种操作系统里面运行另一种操作系统,比如在 Mac 系统里面运行 Windows 系统。

那么,我们将应用程序,安装在虚拟机里面。对于应用程序来说,它并不知道实际上计算机是什么操作系统,不影响它的运行。并且对于计算机而言,虚拟机就是一个文件,不需要了,删掉就可以了,也不会影响计算机的其他应用。

但这个方式有几个缺点,就很致命。

资源占用多。

哪怕应用只需要 1MB 的内存,虚拟机依然需要几百 MB 的内存才能运行。

冗余步骤多

​ 虚拟机是完整的操作系统,一些系统级的操作步骤往往无法跳过,比如用户登录。

启动慢

​ 启动程序,需要先启动虚拟机,等几分钟再启动程序了。

Linux 容器

虚拟机虽然实现很简单,但上述的缺点,还是很严重。于是,睿智的开发者们又通过 Linux 发展出了另一种虚拟化技术:Linux容器(Linux Containers LXC)

Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常的进程外面套了一个保护层。对于容器里面的进程来说,它接触道德各种资源都是寻你的,从而实现与底层系统的隔离。

PS:刚了解的我,也是看的懵懵懂懂,但看到一个比喻是这样:一艘货轮上装满了集装箱,OK,货轮即计算机。集装箱就是一个个容器,里面装着不同的应用程序(货物)。需要多大的内存,就用多大的集装箱。

那么,容器的有点有:(其实相对虚拟机来说的

资源占用少

​ 容器只占用应用程序需要的资源。多个容器还可以共享资源,虚拟机是独享资源,哪怕用不到那么多。

体积小

​ 容器只要包含用到的组件和库即可,不需要整个操作系统,所以相比虚拟机,它的体积小很多,并且没有太多冗余步骤。

启动快

​ 容器里面的应用,直接就是底层系统的的一个进程,而不是虚拟机的整个系统。所以速度就会快很多。

看起来,容器相对于虚拟机,简直是秒杀了。

Docker 是什么

Docker 属于 Linux 容器的一种封装,(毕竟 Linux 容器对于很多人来说不易用) 提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

Docker 将应用程序与该程序的依赖,打包在一个文件(货物~)里面。运行这个文件,就会生成一个虚拟容器(集装箱~)。程序在这个虚拟容器里运行,就好像在真是的物理机上运行一样。有了 Docker,就不用担心环境问题了。

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通代码一样。(PS:真的是十分棒的发明了。

Docker 用在什么地方

  • 提供一次性的环境。开发给测试提供一致的测试环境。

  • 提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态的扩容和缩容。

  • 组件微服务架构。通过多个容器,一台容器可以跑多个服务,因此在一个机器上就可以模拟出微服务架构。

Docker 安装

了解到 Docker 是一个开源的商业产品,所以有两个版本,一个是社区版(Community Edition, CE),和企业版(Enterprise Edition, EE)。社区版就是众多优秀的开发者维护并更新的。

Docker CE 的安装可以参考官方文档。

安装完成后,运行下面命令,查看是否安装成功

docker version
// 或者
docker info

因为 docker 用户需要 sudo 权限,为了避免每次都需要 sudo,可以把用户加入 docker 用户组。

PS:这里需要重新打开终端才生效,终端不行的话就重启服务器。

// 添加docker用户组
sudo groupadd docker

sudo usermod -aG docker $USER
// 将用户加入docker用户组。其中$USER是当前用户。

Docker 是服务器—客户端架构。命令行运行 docker 命令的时候,需要本机有 Docker 服务。如果这项服务没有启动,可以用下面的命令启动。

sudo systemctl start docker
// 或者
sudo service docker start

也可以开启 开机启动

sudo systemctl enable docker

// 关闭开机启动
sudo systemctl disable docker

最后,测试一下 Docker 服务

sudo 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/

文档信息

Search

    Table of Contents