Docker 基础应用与介绍
Docker 基础应用Docker 是一个开源的应用容器引擎基于 Go 语言开发。它允许开发者将应用程序及其所有依赖项如代码、运行时、库、环境变量和配置文件等打包到一个轻量级、可移植的“容器”中。这个容器可以在任何安装了 Docker 引擎的 Linux 或 Windows 机器上运行且保证了环境的高度一致性。Docker 的核心优势环境一致性解决“在我的机器上能运行”的问题Docker 将应用及其依赖打包在一起确保了开发、测试和生产环境的绝对一致极大减少了因环境差异导致的 Bug。轻量级与高效与传统虚拟机VM需要模拟完整的操作系统不同Docker 容器共享宿主机的操作系统内核。因此容器体积更小通常为 MB 级别启动速度极快秒级甚至毫秒级且对 CPU 和内存的资源消耗极低。卓越的可移植性“一次构建到处运行”。无论是在你的本地笔记本、公有云服务器还是本地数据中心只要目标机器安装了 Docker就可以无缝运行相同的容器。快速部署与弹性扩展通过 Dockerfile 可以实现镜像构建的自动化。结合 CI/CD持续集成/持续交付流程和 Kubernetes 等编排工具可以实现应用的快速交付和自动化弹性伸缩。隔离性与安全性每个容器都在独立的命名空间和 cgroups 中运行彼此隔离。一个容器的崩溃或资源耗尽通常不会直接影响宿主机或其他容器。docker 与虚拟机的区别Docker 容器虚拟机共享宿主机内核每台虚拟机有自己的内核隔离的是进程视图虚拟化整台计算机启动通常很快需要启动完整操作系统资源开销较小资源开销较大隔离通常弱于虚拟机隔离通常更强Docker 的安装在线安装Ubuntu和Centosdocker 再安装的时候可以使用离线安装或者是在线安装两种方式如果是在线安装的话推荐使用阿里云开源镜像站的安装方法他里面提供了docker的加速镜像源网址https://developer.aliyun.com/mirror/打开docker-ce 网站里面一共有两种安装方式、一种是Ubuntu一种是centos的。openeuler我这里使用的是openeuler操作系统openEuler 官方源中提供了开箱即用的 Docker 及相关组件。直接使用yum安装即可安装命令如下# 更新当前系统的yum 源[rootlocalhost ~]# yum update# 安装 Docker 引擎及常用组件[rootlocalhost ~]# yum install -y docker docker-compose# 查看当前安装docker的版本号[rootlocalhost ~]# docker versionClient: Version:18.09.0 EulerVersion:18.09.0.351 API version:1.39Go version: go1.21.4 Git commit: 6273e58 Built: Wed Apr818:05:592026OS/Arch: linux/amd64 Experimental:falseServer: Engine: Version:18.09.0 EulerVersion:18.09.0.351 API version:1.39(minimum version1.12)Go version: go1.21.4 Git commit: 6273e58 Built: Wed Apr818:05:332026OS/Arch: linux/amd64 Experimental:false# 查看docker进程 是否运行[rootlocalhost ~]# systemctl status docker● docker.service - Docker Application Container Engine Loaded: loaded(/usr/lib/systemd/system/docker.service;enabled;preset: disabled)Active: active(running)since Sun2026-08-0213:44:57 CST;13min ago Docs: https://docs.docker.com Main PID:25944(dockerd)Tasks:21(limit:31996)Memory:38.3M()CGroup: /system.slice/docker.service ├─25944 /usr/bin/dockerd --live-restore └─25952 containerd--config/var/run/docker/containerd/containerd.toml --log-level infodaemon.json文件调试在 Docker 中daemon.json 是 Docker 守护进程Docker Daemon的核心配置文件。通过修改这个文件可以自定义 Docker 的存储路径、日志大小、镜像加速地址、网络配置等。它的默认路径是/etc/docker/daemon.json[rootlocalhost docker]# cat/etc/docker/daemon.json{insecure-registries:[registry.access.redhat.com,quay.io],registry-mirrors:[https://q2gr04ke.mirror.aliyuncs.com,http://hub-mirror.c.163.com,https://docker.mirrors.ustc.edu.cn],bip:192.168.17.1/24,exec-opts:[native.cgroupdriversystemd],live-restore:false,dns:[114.114.114.114,8.8.8.8]}配置项 (Key)值 (Value)作用说明 (Description)insecure-registries[registry.access.redhat.com, quay.io]配置不安全的镜像仓库允许 Docker 通过 HTTP 而非 HTTPS 访问这些指定的私有仓库。registry-mirrors[https://q2gr04ke.mirror.aliyuncs.com, http://hub-mirror.c.163.com, https://docker.mirrors.ustc.edu.cn]配置国内镜像加速器地址加速从 Docker Hub 拉取镜像的速度包含阿里云、网易、中科大源。bip192.168.17.1/24自定义 Docker 默认网桥docker0的 IP 地址和子网掩码用于避免与宿主机或其他网络发生 IP 冲突。exec-opts[native.cgroupdriversystemd]配置容器运行时的 cgroup 驱动。设置为systemd能与操作系统的 systemd 更好地集成是 CentOS/openEuler 等系统的官方推荐配置。live-restorefalse配置 Docker 守护进程重启或停止时的行为。设为false表示当 Docker 服务停止时其管理的容器也会随之停止。dns[114.114.114.114, 8.8.8.8]为容器配置自定义的 DNS 服务器地址解决容器内部无法解析域名的问题配置了国内 114 DNS 和 Google DNS。其中bip的配置表示当前系统生成的docker0的网卡的IP地址。默认是172.17.0.1/16当该网卡使用的IP地址与宿主机的IP地址重复为一个网段时建议将docker0的IP地址进行修改。否则会导致docker容器无法正常使用。重启服务使daemon.json配置生效[rootlocalhost docker]# systemctl daemon-reload[rootlocalhost docker]# systemctl restart dockerJobfordocker.service failed because the control process exited with error code. Seesystemctl status docker.serviceandjournalctl -xeu docker.servicefordetails.注意这里再启动docker的时候报错我们可以使用journalctl -xeu docker.service来查看一下报错的原因是什么journalctl -xeu docker.service ./docker.log把journalctl 输出的日志保存到当前目录的docker.log 文件中tail -n 200 docker.log查看docker.log中最后200行的日志通过日志描述可以看到时我们配置的daemon.json中的live-restore 与 systemd 启动文件docker.service中的命令行参数发生了冲突两个参数重复使用了那我们把daemon.json中的live-restore删除后重新在家启动即可。修改后的配置{insecure-registries:[registry.access.redhat.com,quay.io],registry-mirrors:[https://q2gr04ke.mirror.aliyuncs.com,http://hub-mirror.c.163.com,https://docker.mirrors.ustc.edu.cn],bip:192.168.17.1/24,exec-opts:[native.cgroupdriversystemd],dns:[114.114.114.114,8.8.8.8]}重启服务并重新加载配置[rootlocalhost docker]# systemctl daemon-reload[rootlocalhost docker]# systemctl restart docker重启完成之后查看docker0的IP地址是否已经修改了与我们配置文件中的一致查看docker的镜像仓库与镜像加速地址是否修改namespace和CgroupNamespace 决定容器“能看见什么”cgroup 决定容器“能使用多少资源”。它们都是 Linux 内核能力并不是 Docker 自己发明的。Docker 负责配置这些能力runc 等 OCI Runtime 负责创建。Linux 宿主机内核容器 A 的进程容器 B 的进程Namespace A进程、网络、挂载等视图Namespace B独立的视图cgroup ACPU 1核、内存 512MBcgroup BCPU 2核、内存 1GBNamespace 用于隔离系统资源的“视图”。容器里的程序看起来像运行在独立系统中但实际上仍是宿主机上的普通 Linux 进程。Linux 内核为不同进程保存不同的资源对象引用。执行系统调用时内核根据当前进程所属的 Namespace访问对应的资源对象。PID Namespace隔离进程编号和进程列表。Network Namespace隔离网络资源包括网卡 IP 地址 路由表 防火墙规则 端口 Socket使用下面的参数会共享宿主机网络docker run --networkhost nginxMount Namespace隔离文件系统挂载视图。容器中挂载或卸载文件系统一般不会影响其他容器。User Namespace隔离用户和 UID/GID。启用 User Namespace 后可以将容器内 rootUID 0 映射为宿主机普通用户例如 UID 100000需要注意普通 Docker 默认配置下容器内 root 不一定自动映射成宿主机普通用户。需要配置 userns-remap或者使用 Rootless Docker。cgroupcgroup 全称是 Control Groups用于统计和限制一组进程能够使用的资源。现代 Linux 通常使用 cgroup v2但核心原理相同。限制内存docker run --memory512m nginx:表示容器最多使用大约 512MB 内存。超过硬限制且无法回收时内核可能触发 OOM并终止容器中的进程。限制 CPUdocker run --cpus1.5 nginx:表示容器最多获得约 1.5 个 CPU 核心的计算能力但不一定固定运行在某个核心上。限制进程数量docker run --pids-limit100 nginx:防止容器创建过多进程例如避免 Fork Bomb 耗尽宿主机 PID。查看资源统计docker stats显示的 CPU、内存、网络和 I/O 数据很多来自 cgroup 统计信息。对比项Namespacecgroup核心作用隔离资源视图统计和限制资源解决的问题容器能看到什么容器能使用多少典型对象PID、网络、挂载、主机名CPU、内存、进程数、I/O是否限制资源一般不负责是是否隐藏资源是一般不负责docker 镜像docker 镜像原理Linux文件系统由bootfs和rootfs两部分组成bootfs包含bootloader引导加载程序和 kernel内核rootfs root文件系统包含的就是典型 Linux 系统中的/dev /proc/bin/etc等标准目录和文件不同的linux发行版bootfs基本一样而rootfs不同如ubuntu centos等docker镜像原理Docker镜像是由特殊的文件系统叠加而成最底端是 bootfs并使用宿主机的bootfs第二层是root文件系统rootfs,称为base image然后再往上可以叠加其他的镜像文件统一文件系统UnionFile System技术能够将不同的 层整合成一个文件系统为这些层提供了一个统一 的视角这样就隐藏了多层的存在在用户的角度看来只存在 一个文件系统一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像最底部的镜像成为基础镜像。当从一个镜像启动容器时Docker会在最顶层加载一个读 写文件系统作为容器docker 镜像相关命令查看docker镜像# 查看镜像: 查看本地所有的镜像[rootlocalhost ~]# docker images镜像名称 版本号 镜像ID 镜像存在时间 镜像大小 REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 5d0da3dc97642years ago 231MB[rootlocalhost ~]# docker images -q #查看所有的镜像ID5d0da3dc9764搜索镜像:从网络中查找需要的镜像dockersearch 镜像名称 NAME:镜像的名称 DESCRIPTION镜像的描述 STARS镜像的大小 OFFICIAL镜像是否是官方维护 如果至位【ok】则代表该镜像是官方维护的镜像 注意如果需要查看镜像的版本号则需要到https://hub.docker.com的docker镜像仓库官方网站中去查看[rootlocalhost ~]# docker search nginxNAME DESCRIPTION STARS OFFICIAL nginx Official build of Nginx.19730[OK]unit Official build of NGINX Unit: Universal Web …25[OK]nginx/nginx-ingress NGINX and NGINX Plus Ingress Controllers fo…89nginxinc/nginx-unprivileged Unprivileged NGINX Dockerfiles144nginx/nginx-prometheus-exporter NGINX Prometheus ExporterforNGINX and NGIN…39nginxinc/nginx-s3-gateway Authenticating and caching gateway based on …6nginx/unit This repository is retired, use the Docker o…64nginx/nginx-ingress-operator NGINX Ingress OperatorforNGINX and NGINX P…2nginxinc/amplify-agent NGINX Amplify Agentdockerrepository1nginx/nginx-quic-qns NGINX QUIC interop1nginxinc/ingress-demo Ingress Demo4nginxproxy/nginx-proxy Automated nginx proxyforDocker containers …132nginxproxy/acme-companion Automated ACME SSL certificate generation fo…131bitnami/nginx Bitnami nginx Docker Image184bitnami/nginx-ingress-controller Bitnami Docker ImageforNGINX Ingress Contr…32ubuntu/nginx Nginx, a high-performance reverse proxywe…112nginxinc/nginmesh_proxy_debug0nginxproxy/docker-gen Generate files fromdockercontainer meta-da…16nginxinc/mra-fakes30kasmweb/nginx An Nginx image based off nginx:alpine and in…7nginxinc/nginmesh_proxy_init0nginxinc/mra_python_base0nginxinc/ngx-rust-tool0rancher/nginx-ingress-controller12拉取镜像:从Docker仓库下载镜像到本地镜像名称格式为名称:版本号如果版本号不指定则是最新的版本。 如果不知道镜像版本可以去docker hub搜索对应镜像查看dockerpull 镜像名称[rootlocalhost ~]# docker pull centosUsing default tag: latest latest: Pulling from library/centos a1d0c7532777: Pull complete Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177 Status: Downloaded newer imageforcentos:latest docker.io/library/centos:latest[rootlocalhost ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE centos latest 5d0da3dc97642years ago 231MB删除镜像dockerrmi 镜像id# 删除指定本地镜像dockerrmidockerimages-q# 删除所有本地镜

相关新闻

Fastboot模式下查看安卓分区信息:从驱动安装到命令实战

Fastboot模式下查看安卓分区信息:从驱动安装到命令实战

1. 项目概述:为什么需要查看Fastboot分区信息? 当你把安卓设备通过数据线连接到电脑,屏幕上显示一只兔子躺在扳手旁的画面时,你就进入了Fastboot模式。这个模式对于开发者、玩机爱好者和维修人员来说,是一个功能强大的…

2026/9/28 10:09:28 阅读更多 →
Adobe-GenP:创意工作者的技术解决方案

Adobe-GenP:创意工作者的技术解决方案

Adobe-GenP:创意工作者的技术解决方案 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 在数字创作领域,Adobe Creative Cloud套件是设计师、摄…

2026/10/2 3:13:19 阅读更多 →
基于springboot的流浪猫狗救助系统(源码+lw+部署文档+讲解等)

基于springboot的流浪猫狗救助系统(源码+lw+部署文档+讲解等)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/9/28 17:52:04 阅读更多 →

最新新闻

Java宿舍管理系统源码解析:选型、部署与答辩优化指南

Java宿舍管理系统源码解析:选型、部署与答辩优化指南

简介:一套基于JSP/Servlet的Java宿舍管理系统完整源码,面向Java Web初学者、课程设计与毕业设计人群,帮助理解高校宿舍管理场景下的登录认证、学生/宿管/管理员多角色权限划分,以及学生管理、楼宇宿舍分配、住宿登记、系统配置等核…

2026/10/4 8:42:53 阅读更多 →
用@符号让AI瞬间看懂你的笔记:Agent Client for Obsidian的Note Mentions完全指南

用@符号让AI瞬间看懂你的笔记:Agent Client for Obsidian的Note Mentions完全指南

用符号让AI瞬间看懂你的笔记:Agent Client for Obsidian的Note Mentions完全指南 【免费下载链接】obsidian-agent-client Bring AI agents into Obsidian via Agent Client Protocol (ACP), such as Claude Code, Codex and Gemini CLI. 项目地址: https://gitco…

2026/10/4 8:42:53 阅读更多 →
Python新手练习路线:从环境搭建到小项目实战避坑指南

Python新手练习路线:从环境搭建到小项目实战避坑指南

如果你最近打算学 Python,大概率会收到同一个建议:多练习。但真正的问题马上就来——练什么?按什么顺序练?装好解释器之后第一步到底干嘛?我自己刚入门的时候就是卡在这,看了一堆教程,代码抄了一…

2026/10/4 8:42:53 阅读更多 →
磁盘空间告警排查实战:从Codex缓存到WinSxS组件存储的根因定位

磁盘空间告警排查实战:从Codex缓存到WinSxS组件存储的根因定位

周二下午三点十七分,告警群里又一次弹出那条熟悉的消息:C盘剩余空间不足10%,当前剩余8.2GB。上一次我清理完临时文件,两天后又满了;上一周我迁走了开发环境缓存,撑了四天。这次我没有急着动手,而…

2026/10/4 8:42:53 阅读更多 →
STM32F415ZG与MR25H40CDF:工业存储掉电保护与高频写入的MRAM方案

STM32F415ZG与MR25H40CDF:工业存储掉电保护与高频写入的MRAM方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 8:42:53 阅读更多 →
苹果开发者账号申请与APPID配置全指南:避坑实战经验

苹果开发者账号申请与APPID配置全指南:避坑实战经验

很多做iOS开发的朋友,第一次接触苹果开发者账号的时候,都会被那一套流程搞得有点懵。明明App都写完了,结果卡在申请账号、创建APPID这些环节上,前前后后折腾一两周的大有人在。我自己也帮团队和客户处理过不少类似的申请&#xff…

2026/10/4 8:41:53 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →