概述

容器这个概念可以说是伴随着Docker的发展而被广大网友所熟知的,为此,如今好多人将Docker与容器画上了等号。实际上,Docker仅仅是一个容器的管理器工具,不仅Docker,还有Podman、Buildah等容器管理工具。

Docker

Docker是Docker,Inc.这个日本公司开发的一组平台即服务(PaaS)产品,是一组管理容器的技术。现今好多人将Docker作为了容器的代名词。从应用角度来说,Docker的基本构架如下所示

在这里插入图片描述

原理

Docker技术使用Linux内核和内核功能(比如Cgroup和命名空间)来分隔进程,便于各进程互相独立运行。最初是基于LXC(LinuxContainers)技术打造,大多数人会将Docker与传统的Linux容器联系在一起,但后来它渐渐甩掉了对这些技术的依赖。

在这里插入图片描述

LXC可用作轻量型虚拟化技术,传统的Linux容器使用init系统来管理多种进程,但它对开发人员和用户来说体验不甚理想。Docker不仅运行容器之外,还具备其他多项功能red hat linux,包括简化用于建立容器、传输镜像以及控制镜像版本的流程。

工作流程

在这里插入图片描述

DockerEngine

DockerEngine是Docker的核心组件,用于建立和运行容器化应用程序。实际上,DockerEngine也是一个为运行容器而建立的运行时,致使容器化应用程序才能在任何基础设施上一致地在任何地方运行。

在这里插入图片描述

DockerEngine实际上就是我们一般安装的Docker免费docker主机,分为DockerCommunityEdition(Docker-ce)和DockerEnterpriseEdition(Docker-ee)两个版本DockerEngine坐落Containerd之上,提供额外的功能和提高的开发人员体验。Containerd

containerd是一个为运行容器而建立的运行时,一般作为Linux和Windows的守护进程使用。这个开源工具建立在操作系统内核功能之上,并通过具象层改进了容器管理,该具象层管理命名空间、cgroup、联合文件系统、网络功能等。这样,开发人员就毋须直接处理复杂性。

在这里插入图片描述

2017年3月,Docker将其核心容器运行时拉入一个名为containerd的独立项目,并将其捐献给云原生估算基金会(CNCF),开源地址。Containerd被设计成嵌入到一个更大的系统中,而不是被开发人员或最终用户直接使用。

在这里插入图片描述

3.Containerd是诸多容易运行时之一,各类容器运行时比较如下所示。知名的Kubernetes最初就以Docker(通过Dockershim)作为运行时,不过随着容器的标准化,Kubernetes舍弃了Docker,转而直接使用支持ContainerRuntimeInterface(CRI)的运行时。

在这里插入图片描述

安装

基本每位Linux发行版都在自己的软件库房中提供了Docker,我们直接使用对应的包管理工具就可以安装(比如,Ubuntu中sudoaptinstalldocker),然而,常常版本比较旧!

Docker官网安装

Docker容器管理工具 Podman Buildah 容器运行时 Containerd Docker Engine 安装教程 Docker Compose 权限处理 镜像源更换_免费docker主机

Linux发行版官方库房中提供的Docker一般版本是比较旧的,而Docker官方提供了自己的库房来提供针对各个Linux发行版的建立好的Dockers,我们这儿就是学习从Docker官方安装。

目前,Docker官网早已被封锁了,须要魔法上网才可以用!

安装相关依赖工具包:sudoaptinstallapt-transport-httpsca-certificatescurlsoftware-properties-commongnupglsb-release

在这里插入图片描述

添加Docker官方的GPG秘钥:curl-fsSL|sudogpg--dearmor-o/usr/share/keyrings/docker-archive-keyring.gpg

添加Docker官方库房:sudoecho”deb

arch=$(dpkg--print-architecture)signed-by=/usr/share/keyrings/docker-archive-keyring.gpg

$(lsb_release-cs)stable”|sudotee/etc/apt/sources.list.d/docker.list>/dev/null

此时,须要使用sudoaptupdate命令更新源列表,否则下边的命令会提示找不到对应的软件包

安装Docker:sudoaptinstalldocker-ce

在这里插入图片描述

有可能报错:

这是因为没有正确配置代理。Ubuntu手动的包管理工具apt并不会走里面设置的终端的代理环境变量,我们须要对其单独设置代理。具体方式就是编辑或则新建sudonano/etc/apt/apt.conf.d/95proxies文件,之后在其中输入如下内容:

Acquire::http::Proxy "http://127.0.0.1:7890";
Acquire::https::Proxy "http://127.0.0.1:7890";

等待安装结束,之后使用systemctlstatusdocker查看docker服务是否正常运行

可以使用sudosystemctlenabledocker命令将docker设置为开机自启动,以及其他systemctl命令来重启、停止等docker服务。

docker-compose

DockerCompose是一个拿来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,一般由多个容器组成,使用DockerCompose不再须要使用shell脚本来启动容器。

DockerCompose是Docker官方的开源项目linux标准教程,可以在Github上库房中找到其源码,库房中默认提供了针对不同系统的预编译二补码可执行文件,因而我们直接下载使用即可。

sudocurl-L”$(uname-s)-$(uname-m)”-o/usr/local/bin/docker-compose,注意URL中的v2.26.1是选择版本!

安装完成后,须要赋于可执行权限sudochmod+x/usr/local/bin/docker-compose

在这里插入图片描述

免费docker主机_Docker容器管理工具 Podman Buildah 容器运行时 Containerd Docker Engine 安装教程 Docker Compose 权限处理 镜像源更换

Compose通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,之后使用docker-compose脚本来启动,停止和重启应和应用中的服务以及所有依赖服务的容器,特别适宜组合使用多个容器进行开发的场景。

更换镜像源

目前,Docker官网镜像源早已被墙了(2024年9月8日,Docker解封了),国外好多备用源也陆续宣布停用!不过,我们仍然可以从网上找一些可用的源来使用。

直接sudonano/etc/docker/daemon.json输入

{
  "registry-mirrors": [
    "https://dockerhub.icu",
    "https://registry.docker-cn.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com",
    "https://ccr.ccs.tencentyun.com"
  ]
}

重启daemon进程sudosystemctldaemon-reload重启docker服务sudosystemctlrestartdocker配置权限处理

DockerEngine是一个完整的容器运行时环境,其中包括DockerCLI、DockerAPI和DockerDaemon。它使用UnixNetworkSocket在Docker顾客端和守护进程之间进行通讯。普通用户运行Docker会报错:

该错误的根本缘由是在默认情况下只有root用户和docker用户组成员能够访问docker.sock

解决方式一

好多文章给出的解决方式是直接使用命令sudochmod666/var/run/docker.sock修改权限,以使所有用户都可以访问该文件。该方式简单粗鲁,然而却是十分不安全的。

Docker容器管理工具 Podman Buildah 容器运行时 Containerd Docker Engine 安装教程 Docker Compose 权限处理 镜像源更换_免费docker主机

修改权限后,使用命令sudosystemctlrestartdocker重启Docker服务后所有用户就可以启动Docker了

解决方式二

正确的做法是将须要启动Docker的当前用户添到docker用户组。在安装Docker以后,默认都会创建一个名为docker的用户组,假如没有,则可以使用sudogroupadddocker来自动创建,之后使用sudousermod-aGdocker$(whoami)将当前用户添加到用户组即可!

在这里插入图片描述

注意,将用户添加到Docker用户组后须要使用命令sudosystemctlrestartdocker重启Docker服务才可以生效,SSH远程联接须要重启Session后才可以。

使用dockerpullxxx拉取镜像dockerrun-itxxx启动容器非ROOT用户容器

新创建的docker容器有默认用户,直接步入docker容器后就是root用户免费docker主机,但是没有密码。做开发使用时,好多工具要求不要使用root帐户!

使用命令dockerrun-it-u$(id-u):$(id-g)-v/etc/passwd:/etc/passwd-v/etc/group:/etc/group-v/home/zhaocs/WORKSPACE:/home/zhaocs/WORKSPACE-w/home/zhaocs/WORKSPACE--hostnameUbuntu22.04--nameUbuntu22.04ubuntu:22.04创建非root用户的容器。

以普通用户步入容器后,我们难以在容器中安装软件包,会报错E:Listdirectory/var/lib/apt/lists/partialismissing.。可以以root用户步入我们前面创建的容器dockerexec-u0-it容器的名子或ID/bin/bash来执行安装

参考:///linux/docker-permission-denied-daemon-socket-error:///architecture-of-docker/:///developer/article/2327654:///Dontla/article/details/131886858:///collabnix/dockerlabs:///p/490585683

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复