Docker-相关总结

概述

Docker 使用了进程隔离的技术来实现容器化。它通过使用 Linux 容器(LXC)技术或更现代的基于容器的技术(如 libcontainer 和 runc)来创建和管理容器。

在 Docker 中,每个容器都是一个独立的进程,运行在宿主机的操作系统上。Docker 使用 Linux 内核的功能,如 cgroups(控制组)和命名空间(namespace),来实现进程的隔离和资源控制。

cgroups

cgroups(Control Groups)是 Linux 内核提供的一种资源管理机制,用于限制和监控进程组的资源使用量。它允许对进程组(或进程的集合)进行资源控制、优先级管理和隔离。

cgroups 的主要功能包括:

  1. 资源限制:cgroups 可以设置进程组的资源限制,如 CPU 使用率、内存使用量、磁盘 I/O 等。这样可以防止某个进程组过度占用系统资源,影响其他进程组的运行。

  2. 优先级管理:cgroups 可以为不同进程组分配不同的资源优先级,确保关键任务或重要进程组能够获得足够的资源,提高系统的整体性能和响应能力。

  3. 资源统计和监控:cgroups 可以统计和监控进程组的资源使用情况,包括 CPU、内存、磁盘等。这样可以实时查看和分析进程组的资源消耗情况,进行性能优化和故障排查。

  4. 进程隔离:cgroups 可以将进程组隔离在不同的容器或虚拟环境中,每个容器都有自己的资源限制和隔离环境。这样可以实现容器化技术,提供独立的运行环境和隔离性。

cgroups 是 Linux 内核提供的一种强大的资源管理机制,被广泛用于容器化技术(如 Docker、Kubernetes)和虚拟化技术中,以实现资源控制、隔离和优化。它为系统管理员和开发人员提供了灵活和可定制的资源管理手段,帮助提高系统的效率和可靠性。

namespace

namespace(命名空间)是 Linux 内核提供的一种隔离机制,用于将系统资源抽象为不同的独立单元,在每个单元中提供独立的视图和隔离环境。

Linux 内核提供了多种类型的命名空间,用于隔离不同的系统资源,包括以下几种常见的命名空间:

  1. PID 命名空间:每个 PID 命名空间都有自己的进程 ID(PID)空间,使得进程在不同的命名空间中具有不同的 PID。这样可以实现进程隔离和独立的进程视图。

  2. Network 命名空间:每个 Network 命名空间都有自己的网络栈、网络设备和 IP 地址空间。这样可以实现网络隔离,使得每个命名空间中的进程可以具有独立的网络环境。

  3. Mount 命名空间:每个 Mount 命名空间都有自己的文件系统挂载点,使得进程在不同的命名空间中具有不同的文件系统视图。这样可以实现文件系统隔离和独立的文件系统环境。

  4. UTS 命名空间:UTS(Unix Timesharing System)命名空间用于隔离主机名和域名。每个 UTS 命名空间都有自己的主机名和域名,使得进程在不同的命名空间中具有不同的标识。

  5. IPC 命名空间:IPC(Inter-Process Communication)命名空间用于隔离进程间通信机制,如信号量、消息队列和共享内存等。每个 IPC 命名空间都有自己的 IPC 对象,使得进程在不同的命名空间中具有独立的通信环境。

通过使用命名空间,可以实现进程和资源的隔离,使得不同的命名空间中的进程具有独立的资源视图和环境。这为容器化技术(如 Docker、Kubernetes)和虚拟化技术提供了基础,实现了资源的隔离和独立运行环境的创建。

常用命令

配置Docker软件源

// 腾讯源
dnf config-manager --add-repo=http://mirrors.tencent.com/docker-ce/linux/centos/docker-ce.repo

//阿里源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

配置镜像源

复制代码
vim /etc/docker/daemon.json
// 阿里
{
"registry-mirrors": ["https://lahhbvh8.mirror.aliyuncs.com"]
}

//腾讯
{
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
复制代码

基本命令

systemctl start docker    // 启动Docker
systemctl stop docker    // 停止Docker
systemctl restart docker    // 重启Docker
systemctl enable docker    // 开机启动
systemctl status docker    // 查看状态
docker --version    // 查看版本

操作镜像

查看镜像

docker images

pull镜像

docker pull centos     //下载最新
docker pull centos:8.3.2011    //指定版本

tag镜像

docker tag 605c77e624dd gorust1999/alpine:v3  //PS:指定用户名(gorust1999)

push镜像

docker login    //登录 随后输入账号密码

docker push gorust1999/alpine:v2     //指定用户名 gorust1999 加上Tag

删除镜像

指定Tag || ID

docker rmi 300e315adb2f
docker rmi demo/centos:latest

镜像导出导入

docker save alpine > demo.alpine.tar    // 导出
docker load < demo.alpine.tar    // 导入

容器操作

查看容器

docker ps  // 查看所有运行的容器
docker ps -a   // 查看所有容器

Docker run

创建一个新的容器并运行一个命令

docker run 是日常用的最频繁用的命令之一,同样也是较为复杂的命令之一
命令格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS :选项
-i :表示启动一个可交互的容器,并持续打开标准输入
-t: 表示使用终端关联到容器的标准输入输出上
-d :表示容器放置后台运行
--rm:退出后即删除容器
--name :表示定义容器唯一名称
-p 映射端口
-v 指定路径挂载数据卷
-e 运行容器传递环境变量
IMAGE :表示要运行的镜像
COMMAND :表示启动容器时要运行的命令

docker run -it centos /bin/bash    // 启动交互式的容器 并在容器内执行/bin/bash 命令

docker run -it -d centos    // 启动一个容器 运行在后台

docker run -it -d --name mydemo centos // --name 自定义启动容器之后的名字

退出容器

exit: 容器停止并退出
ctrl+p+q:容器不停止退出

进入容器

docker exec -it cbfee91bda3b /bin/bash  // 进入一个后台运行的容器 并执行命令:/bin/bash
docker attach cbfee91bda3b  // 进入后台容器

区别:
docker exec:进入容器开启一个新的终端(常用) 执行 exit 退出的时候不会停止容器
docker attach:进入容器正在执行的终端 exit 退出会停止容器

启动/停止容器

docker start 07fb9c32ea61
docker stop 07fb9c32ea61
docker restart 07fb9c32ea61
docker restart MyCentos

删除容器

docker rm myLinux
docker rm -f myLinux    // 强制删除

查看容器操作日志

docker logs : 获取容器的日志

docker logs 9170ef3ad0fd

语法
docker logs [OPTIONS] CONTAINER
OPTIONS 说明:
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新 N 条容器日

容器转换为镜像

镜像是没有写入权限的,但是我们可以修改容器把容器制作为镜像

docker commit d4486a7dff1b mylinux_1.txt(镜像name)

端口映射

docker run -p 容器外端口:容器内端口 容器ID

docker run -d -p 84:80 mynginx:v2

数据拷贝

docker cp :用于容器与主机之间的数据拷贝。

 将主机/root/wwwroot目录拷贝到容器 5e324512adf1 的/root 目录下。

docker cp /root/wwwroot/ 5e324512adf1:root

将容器 5e324512adf1 的/root/wwwroot 目录拷贝到主机的/root 目录中。

docker cp 5e324512adf1:root/wwwroot /root

挂载数据卷

数据卷不依赖于容器,生命周期不受容器的控制,即多个容器可以共享一个数据卷 进行数据共享

docker run -v 容器外目录:容器内目录 容器 ID

docker run -d -v /root/www:/demo nginx

Dockerfile

指令

复制代码
FROM:声明基础镜像,使用现有的 Docker 镜像作为基础

MAINTAINER:声明镜像维护者

RUN:在镜像中运行命令

CMD:容器启动时默认执行的命令

EXPOSE:声明容器需要监听的网络端口

ENV:设置环境变量

ADD:添加文件到镜像中,将本地文件复制到镜像中

COPY:将本地文件复制到镜像中

WORKDIR:设置工作目录,用于构建过程中的文件操作

ENTRYPOINT:容器启动时默认执行的命令,与 CMD 不同的是,ENTRYPOINT 指定的命令参数可以在 docker run 调用中被覆盖。
复制代码

 

posted @   GJH-  阅读(884)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示