使用Docker时共享主机操作系统的内核

时间:2019-04-09 06:45:01

标签: docker operating-system containers

  1. 如果我在我的Ubuntu计算机(充当主机OS-已安装Docker)上部署通过选择Alpine Linux作为基础映像构建的映像,那么这里将有两个内核在起作用-一个来自Ubuntu还有另一个来自阿尔卑斯山?我读到Docker容器将共享主机内核,因此我有点困惑。

  2. 如果我登录到正在运行的容器并发出另一个命令,那么从主机操作系统的角度来看,这将是另一个过程吗?还是这将是另一个线程?从来宾操作系统的角度来看,我认为这将是两个单独的过程。

请澄清。

2 个答案:

答案 0 :(得分:2)

  1. 他们共享您的主机内核。 Docker只是将一组进程隔离到一个容器中。

  2. 没有来宾操作系统,只有一个容器。并且进程在docker容器中运行,就像它们在您的主机上运行一样。如果在主机上运行top,则将在Docker容器中运行的所有进程视为任何给定容器的子进程。

答案 1 :(得分:2)

  1. “容器”只是一个抽象术语。这只是在主机(Ubuntu)上运行的另一个进程。由于您的来宾(Alpine)和主机(Ubuntu)都是基于Linux内核的操作系统。最后,您在来宾操作系统中运行的任何命令或程序都会(通过低级库)转换为系统调用,并提供给Ubuntu主机的内核。

  2. “容器”不过是主机内核对其应用一些通用策略的一组进程。因此,假设您在来宾操作系统中运行的任何命令或程序(如您所说的那样)<?php $conn = mysqli_connect('*****', '****', '*****', '*****'); if (isset($_POST['insert'])) { $file = addslashes(file_get_contents($_FILES["myfile"]["tmp_name"])); $query = "INSERT INTO tbl_images(name) VALUES('$file')"; mysqli_query($conn, $query); } ?> 都会在主机上创建一个进程,该进程具有与容器相同的内核所应用的策略。