首页 > 其他分享 >Docker基本原理与常用命令

Docker基本原理与常用命令

时间:2024-02-05 17:13:30浏览次数:20  
标签:容器 隔离 基本原理 指定 常用命令 镜像 Docker docker

1 docker 架构

image.png

K8S:CRI(Container Runtime Interface)

Client: 客户端;操作docker服务器的客户端(命令行或者界面)

Docker_Host:Docker主机;安装Docker服务的主机

Docker_Daemon:后台进程;运行在Docker服务器的后台进程

Containers:容器;从镜像创建的运行实例.可以被启动, 开始, 停止, 删除.每个容器都是互相隔离的. 也可以把容器看作是一个简易的linux系统(包括root用户权限,进程空间, 用户空间,网络空间等)和运行在其中的应用程序.

Images:镜像、映像、程序包;Image是只读模板,其中包含创建Docker容器的说明。容器是由Image运

行而来,Image固定不变。

Registries:仓库;存储Docker Image的地方。官方远程仓库地址:https://hub.docker.com/search

 

2 Docker隔离原理

namespace 6项隔离 (资源隔离)

  实际上,Linux 内核实现 namespace 的一个主要目的就是实现轻量级虚拟化(容器)服务。在同一个 namespace 下的进程可以感知彼此的变化,而对外界的进程一无所知。这样就可以让容器中的进程产生错觉,认为自己置身于一个独立的系统中,从而达到隔离的目的。也就是说 linux 内核提供的 namespace 技术为 docker 等容器技术的出现和发展提供了基础条件。
  我们可以从 docker 实现者的角度考虑该如何实现一个资源隔离的容器。比如是不是可以通过 chroot 命令切换根目录的挂载点,从而隔离文件系统(Mount)。为了在分布式的环境下进行通信和定位,容器必须要有独立的 IP、端口和路由等,这就需要对网络进行隔离(Network)。同时容器还需要一个独立的主机名以便在网络中标识自己(UTS)。接下来还需要进程间的通信(IPC)、用户权限(User)等的隔离。最后,运行在容器中的应用需要有进程号(PID),自然也需要与宿主机中的 PID 进行隔离。也就是说这六种隔离能力是实现一个容器的基础,下面是linux提供的能力:

image.png

cgroups资源限制 (资源限制)

cgroup提供的主要功能如下:

资源限制:限制任务使用的资源总额,并在超过这个 配额 时发出提示

优先级分配:分配CPU时间片数量及磁盘IO带宽大小、控制任务运行的优先级

资源统计:统计系统资源使用量,如CPU使用时长、内存用量等

任务控制:对任务执行挂起、恢复等操作

group资源控制系统,每种子系统独立地控制一种资源。功能如下:

image.png

Dockerfile由一行行命令语句组成,并且支持以#开头的注释行。

基础的小linux系统。jdk;一般而言,Dockerfile可以分为四部分:基础镜像信息, 维护者信息, 镜像操作指令, 启动时执行指令。

 
指令说明
指令说明
FROM 指定基础镜像
NAINTAINER 指定维护着信息,已经过时,可以使用LABEL maintainer=xxx来替代
RUN 运行命令v
CMD 指定启动容器时默认的命令
ENTERPOINT 指定镜像的默认入口,运行命令
EXPOSE 声明镜像内服务监听的端口
ENV

指定环境变量。可以在docker run 的时候使用-e改变,会被固化到image的config里面

ADD 复制指定的src路径下的内容到容器中的dest路径下,src可以为url会自动下载,可以为tar文件会自动解压
COPY 复制本地主机的src路径下的内容到镜像中的dest路径下,但不会自动解压。
LABEL 指定生成镜像的元数据标签信息
VOLUME 创建数据卷挂载点
USER

指定运行容器时的用户名或者UID

WORKERFDIR 配置工作目录,为后续的RUN、CMD、ENTERPOINT指定配置工作目录
ARG

指定镜像内使用的参数,可以在build的时候,使用--build-args改变

OBBUILD  配置当创建的镜像作为其他镜像的基础镜像时,所指定的创建操作命令
STOPSIGNAL 容器退出的信号值
HEALTHCHRCK 健康检查
SHELL 指定使用shell时的默认shell类型

标签:容器,隔离,基本原理,指定,常用命令,镜像,Docker,docker
From: https://www.cnblogs.com/mtjb1dd/p/17099155.html

相关文章

  • Docker网络与存储
    网络:bridge模式:当Docker进程启动后,会在主机上创建一个名为docker0的虚拟网桥,主机上启动的docker容器会连接到这个虚拟网桥上.从docker0子网中分配一个ip给容器使用,并设置docker0的IP地址为容器的默认网关.在主机上创建一堆虚拟网卡设备vethpair设备,Docker将vethpair设......
  • docker中调试java代码
    以shiro550为例子在vulhub/shiro/CVE-2016-4437启动环境docker-composeup-d然后看一下当前容器启动的命令是java-jar/shirodemo-1.0-SNAPSHOT.jar将容器内的jar包复制出来dockercp容器id:/shirodemo-1.0-SNAPSHOT.jar.然后ijidea新建项目,并且解压jar包到项......
  • Docker:Failed to copy files, no space left on device
    主页个人微信公众号:密码应用技术实战个人博客园首页:https://www.cnblogs.com/informatics/问题描述在Mac上进行docker构建时,偶尔会遇到以下问题Failedtocopyfiles:userspacecopyfailed:write/var/lib/docker/volumes/xxx/_data/xxx.dbf:nospaceleftondevice......
  • Docker容器第三课:企业级应用部署-实战
    一、docker容器化部署企业级应用1.1使用容器化部署企业级应用必要性1.有利于快速实现企业级应用部署2.有利于实现企业级应用恢复1.2Docker参考资料官方网站 http://hub.docker.com/二、docker安装部署系统环境:CentOS72.1安装前准备工作查看内核版本是否大于3.10[jack@TEST~]#u......
  • docker安装
    前言  Docker是一个开源的应用容器引擎,是用Go语言实现的,Docker可以让开发者打包他们的应用和依赖包到轻量级、可移植的容器中,然后可以发布到任何Linux机器中。容器的优点很多,比如打包应用和依赖方便部署;做环境隔离,在做深度学习时就可以在容器中进行,安装各种包,不会污染到宿主机;......
  • Ubuntu下docker以及docker-compose安装
    Ubuntu下docker以及docker-compose安装Docker//使用官方脚本自动安装curl-fsSLhttps://test.docker.com-oget-docker.shsudoshget-docker.sh如果要使用Docker作为非root用户,则应考虑使用类似以下方式将用户添加到docker组:$sudousermod-aGdockeryour-user......
  • docker和k8s的区别
    docker是一个开源的应用容器引擎,开发者可以打包他们的应用以及依赖到一个容器中,发布到流行的liunx系统上,或者实现虚拟化。k8s是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等。一、虚拟化角度:传统的虚拟技术,在将物理硬件虚拟成多套硬件后,需要......
  • 一句话总结Docker与K8S的关系
    一句话总结:Docker只是容器的一种,它面向的是单体,K8S可以管理多种容器,它面向的是集群,Docker可以作为一种容器方案被K8S管理。下文继续具体介绍。1、容器的核心概念介绍这几个核心概念:OCI、CR、Runc、Containerd、CRI。1.1、容器运行规范容器运行规范OCI(OpenContainerInitiat......
  • Docker - 离线安装
    Docker-离线安装环境:centos8,docker25 1.安装包官方地址:https://download.docker.com/linux/static/stable/x86_64/   2.解压代码如下(示例):tar-zxvfdocker-18.06.3-ce.tgz  3.将解压出来的docker文件复制到/usr/bin/目录下注:不可修改目录,其中runc文......
  • 1.Dockerfile-nginx安装配置
    1.编译安装脚本mkdir  /data/docker/dockerfile/nginxcd  /data/docker/dockerfile/nginx拷贝nginx.1.24.0.tar.gz到这个目录下vimDockerfile,注意文件名必须是这个:FROMcentos:latest1MAINTAINERthisisnginxdockerfile#安装软件RUNyum-yinstallmakez......