首页 > 其他分享 >Docker 简介

Docker 简介

时间:2024-09-03 23:14:18浏览次数:4  
标签:容器 查看 -- 简介 进程 命名 Docker docker

首先说明一些特性:一个容器中只有一个主进程,遵循单一原则,否则一个容器挂了会导致多个进程挂掉;容器其实就是一个进程,docker可以管理这些进程。docker能够进行容器隔离,我们操作的其实是docker客户端,而不是server端。

docker info # 查看docker信息

docker基本概念

docker客户端可以操作本地服务器,也可以操纵远程服务器。服务器再去访问注册中心。注册中心有多个镜像仓库,也可以搭建私有镜像仓库。

  • 镜像:用于创建docker容器的模板

  • 容器:镜像运行的实体,独立运行的一个或多个应用

  • docker machine: 一个简化docker命令行安装的工具,通过一个简单的命令行即可运行。

docker解决的问题:本地环境和生产环境不一致的问题,方便应用快速迁移;应用程序资源使用问题;快速扩展、快速伸缩。容器技术严格上并不是虚拟化,没有客户机操作系统,是共享内核的。

直观感受client请求server

sudo apt install socat
# -v 提高可读性,unix-listen让socket在一个unix套接字上监听,unix-connect让socat连接到docker的unix套接字
socat -v UNIX-LISTEN:/tmp/dockerapi.sock UNIX-CONNECT:/var/run/docker.sock &
docker -H unix:///tmp/dockerapi.sock ps

docker容器隔离机制

Linux命名空间

namespace用来是内核用来隔离资源的方式,linux实现了六种不同类型的命名空间。

# fork新的进程,拥有新的命名空间
unshare --fork -m -u -i -n -p -U -C sleep 100
# 查看所有命名空间
lsn --output-all

容器进程命名空间

查看容器进程命名列表

# 启动一个nginx容器
docker run -d --name xsnginx nginx
# pull iamges完成之后
docker images ls # 显示当前安装的镜像
# 获取nginx主进程ID
docker top xsnginx
# 使用主进程ID查看其命名空间
sudo lsns -p <pid> --outpuy-all

可以看到命名空间维持在进程id下。

容器进程命名空间的体现

# 开启容器命名空间的配置
sudo vim /etc/docker/daemon.json
"userns-remap" : "default" # 或者使用"userns-remap" : "user:group"
sudo systemctl restart docker.service 
# 查看docker生成的默认用户配置
cat /etc/subuid # 表示宿主机使用dockremap用户,容器使用从属ID,范围为0~65536,与之对应的宿主机ID范围为165536~165536+65536

id <user>
# 运行容器,指定私有cgroupsn,指定user
docker run -d --cgroupns private --user root --name mynginx1 nginx
# 重启容器
docker restart mynginx1
# 以伪终端模式运行一个bash shell -i交互模式运行,-t伪终端
docker exec -it mynginx1 bash

宿主机内查看容器命名空间

容器内查看命名空间

明显可以看出的是,容器有自己的私有命名空间。

UTS命名空间:启动新容器,设置hostname与domain

// -d 指明后台运行容器
docker run -d --domainname abc.nick.com --hostname abcdefg --userns host --name mynginx2 nginx

# 进入交互界面
docker exec -it mynginx2 bash
# 查看主机名和域名
hostname
domainname
# 通过hostname和domainname访问应用
curl http://abcdefg
curl http://abcdefg.abc.nick.com
# 通过文件查看hostname和domainname
cat /proc/sys/kernel/hostname
cat /proc/sys/kernel/domainname

容器网络信息

# 运行一个工具容器
docker run -dit --name mycurl radial/busyboxplus:curl
docker exec -it mycurl sh
# mount命名空间
mount
# 网络信息
ifconfig

容器里查看

宿主机查看网络信息

容器控制组cgroup

cgroups全称是control groups,整合在了linux内核当中,把进程放到组中,对组设置权限,对进程进行控制

linux调度方式

  • CFS完全公平调度,在cgropus间按比例分配CPU时间
  • RT实时调度,对实时任务使用cpu时间限制

标签:容器,查看,--,简介,进程,命名,Docker,docker
From: https://www.cnblogs.com/solicit/p/18395632

相关文章

  • Modbus协议的入门简介 (2) - 从Modbus RTU说起
    Modbus协议的入门简介(1)-历史-CSDN博客Modbus协议的入门简介(2)-从ModbusRTU说起-CSDN博客1.主从通讯模式(Master/Slave)ModbusRTU是运行在串口上的Modbus协议,它采用了主从通讯模式。简单来说,在一条总线上,只有一个主站,可以有很多个从站。主站可以主动地发起通讯,......
  • Docker入门——什么是Docker
    1.什么是docker?docker是一种容器化技术,具体来说它是将应用程序及其依赖环境打包的一种软件,用于保证开发环境的一致性2.为什么需要docker?解决"在我的机器上能跑"的问题,即解决依赖环境一致性问题3.docker是怎么解决这个问题的?docker提供将应用程序及其依赖环境打包成镜像......
  • 使用docker部署tensorrtllm推理大模型baichuan2-7b
    简介大模型的推理框架,我之前用过vllm和mindie。近期有项目要用tensorrtllm,这里将摸索的过程记录下,特别是遇到的问题。我的环境是Linux+rt3090准备docker环境本次使用docker镜像部署,需要从网上拉取:dockerpullnvcr.io/nvidia/tritonserver:24.08-trtllm-python-py3Th......
  • 干货含源码!如何用Java后端操作Docker(命令行篇)
    目录干货含源码!如何用Java后端操作Docker(命令行篇)一、为什么要用后端程序操作Docker二、安装Docker1、安装Docker2、启动Docker三、使用Java后端操作docker1、构建docker镜像并生成容器2、执行完毕后删除容器和镜像3、在此基础上开发其他功能四、总结作者:watermel......
  • docker容器实验记录(一)
    容器没有父进程,PID==1是所有程序的根进程上帝进程死亡系统实例也就关闭了1.概述1.1技术起源Linux容器的起源-容器的起源可以追溯到1979年UNIX系统中提供的chroot命令,容器的最初的设计目标是为了隔离计算机中的各类资源,以便降低软件开发、测试阶段的风险,或者充当蜜......
  • docker安装
    1.卸载旧版首先如果系统中已经存在旧的Docker,则先卸载:yumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\docker-engine\docker-selinux2.配置......
  • Dockerfile 详解
    Dockerfile是一个用于定义Docker镜像构建过程的文本文件。它包含了一系列的指令,这些指令描述了如何从基础镜像创建一个新的镜像。Docker使用这些指令自动化地构建镜像,并且可以确保创建出的镜像是一致的、可重复的。Dockerfile的常用指令FROM指定基础镜像。例如:FROMu......
  • Docker-compose 详解
    docker-compose是一个用于定义和运行多容器Docker应用程序的工具。它使用一个docker-compose.yml文件来配置应用程序的服务、网络和数据卷,并通过简单的命令来管理这些服务。以下是docker-compose的一些核心概念和常用命令:docker-compose.yml文件docker-compose.yml是一......
  • minio-docker
    docker-composeversion:"3"services:minio:image:minio/minio:latestcontainer_name:miniorestart:alwaysports:-"9000:9000"-"9090:9090"......
  • Docker 常用命令
    镜像管理列出镜像dockerimages拉取镜像dockerpull<image>删除镜像dockerrmi<image>构建镜像dockerbuild-t<tag><path>容器管理列出运行中的容器dockerps列出所有容器(包括停止的)dockerps-a运行容器dockerrun[options]<image>......