Docker:容器化技术

引言

传统部署环境逐渐不适应现在的企业开发,为了追求更加轻量,更加容易管理项目,引入了docker容器化技术去实现更加高效的部署环境。

一.docker风光下的内核功能和常用命令

1.docker容器和虚拟机的区别

我们在底层和应用层之间引入了一层docker engine 代替了 guest os ,同时Hypervisor会对硬 件资源进行虚拟化,docker直接使用硬件资源,所以资源利用率相对docker

 2.docker 的整体架构图

1. 镜像(Image Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统
2. 容器(Container :容器是独立运行的一个或一组应用,是镜像运行时的实体
3. 客户端(client Docker 客户端通过命令行或者其他工具使用 Docker SDK
( https://docs.docker.com/develop/sdk/) ) Docker 的守护进程通信
4. 主机(host :一个物理或者虚拟的机器用于执行 Docker 守护进程和容器
5. 注册中心(Registry Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 Docker
Hub( https://hub.docker.com) ) 提供了庞大的镜像集合供使用。
6. Docker MachineDocker Machine 是一个简化 Docker 安装的命令行工具,通过一个简单的命令
行即可在相应的平台上安装 Docker
 3.容器之间的隔离性

Docker 容器之间的隔离性体现在以下几个方面:

进程隔离:
每个容器内部运行的进程只属于该容器,容器之间的进程互不可见,互不影响。

文件系统隔离:
每个容器有独立的文件系统,默认情况下,容器之间无法直接访问对方的文件和数据。

网络隔离:
容器有独立的网络命名空间,IP、端口等互不冲突。容器之间默认不能直接通信,除非通过 Docker 网络(如 bridge、overlay)进行连接。

资源隔离:
可以为每个容器分配 CPU、内存等资源限制,防止资源争抢。

用户隔离:
容器内的用户和主机或其他容器的用户相互独立。

总结:
Docker 利用 Linux 的命名空间(namespace)和控制组(cgroup)技术,实现了进程、文件、网络、资源等多方面的隔离,保证了容器之间的安全和独立运行。

4 docker常用基础命令
systemctl start docker //启动docker
docker --help //查看docker帮助文档
docker pull 镜像名字 //拉取镜像到本地
docker images  //显示docker pull的镜像资源
docker info  //显示 Docker 系统信息,包括镜像和容器数。
docker version   //显示 Docker 版本信息。
docker events   //从服务器获取实时事件
docker logs  //获取容器的日志
docker history   //查看指定镜像的创建历史。
docker create  //创建一个新的容器但不启动它
docker run :创建一个新的容器并运行一个命令
 docker run -it -d -p 81:80 --name nginx01 nginx //启动一个nginx服务#  -it    以互动方式启动#  -d     以后台方式启动#  --name 命名#  -p   端口号映射 本机端口号81隐射nginx服务端口号80
docker start 容器ID或者容器名字 //启动容器
docker restart 容器ID或容器名字 //重启容器
docker stop 容器ID或容器名字  //停止容器运行
docker kill 容器ID或容器名字 //强制杀死该容器
docker rm 容器ID或容器名字  //删除容器
docker logs 容器ID或容器名字 //查看容器日志信息
docker top 容器ID或容器名字 //查看容器运行的进程信息
docker inspect 容器ID或容器名字 //查看容器内部细节信息
//进入容器并交互
docker exec -it 容器ID或容器名字 bash 
docker attach 容器ID或容器名字

二.docker 镜像操作和容器管理

1.镜像是什么,镜像的原理是什么?为什么会有镜像?

镜像就好比一个类,容器就好比一个对象,镜像是构建容器的基础。

 镜像拥有一个最底层,我们可以在最底层上面构造一层又一层的方法对它进行增加服务内容

 2.镜像管理命令
docker build    //命令用于使用 Dockerfile 创建镜像。
docker rmi  // 删除本地一个或多个镜像。
docker commit //从容器创建一个新的镜像。
3.dockerfile

dockerfile是构建镜像的文本文件,是一条条命令和参数所写的脚本

 构建的三个步骤

①编写dockerfile文件

②docker build 命令构建镜像

③docker run 镜像运行容器实例

dockerfile的基础知识

①每条保留字指令都必须为大写字母且后面要跟随至少一个参数

②指令执行顺序从上到下,顺序执行

③#表示注释

④每条指令都会创建一个新的镜像并对镜像提交

关键字

FROM :            设置镜像使用的基础镜像
MAINTAINER:  设置镜像的作者  //已被弃用 用label代替
RUN:                 编译镜像时运行的脚步
CMD :               设置容器的启动命令
LABEL :           设置镜像标签
EXPOSE :        设置镜像暴露的端口
ENV :               设置容器的环境变量
ADD :                编译镜像时复制上下文中文件到镜像中
COPY :             编译镜像时复制上下文中文件到镜像中
ENTRYPOINT : 设置容器的入口程序
VOLUME :         设置容器的挂载卷
USER :              设置运行 RUN CMD ENTRYPOINT 的用户名
WORKDIR :      设置 RUN CMD ENTRYPOINT COPY ADD 指令的工作目录
ARG :                设置编译镜像时加入的参数
ONBUILD:         设置镜像的 ONBUILD 指令
STOPSIGNAL:  设置容器的退出信号量

 写一个简单的dockerfile例子

FROM  ubuntu
LABEL name="lion" RUN apt-get update && apt-get install -y vim
RUN echo "hello World" > /hello.txt
RUN mkdir /app
CMD [ "bin/bash" ]ENV MY_VAR=helloEXPOSE 8080
WORKDIR /appVOLUME [ "/data1","/data2" ]
docker build -t ubuntu01 -f dockerfile .

 4.docker数据卷

数据据的命令介绍


docker volume create  //创建数据卷docker volume inspect //查看数据卷的信息docker volume ls      //展示所有的数据卷docker volume prune   //删除容器未使用的数据卷docker volume rm      //删除指定的数据据

映射案例 在宿主机的文件修改会映射到容器内的文件 

 三.docker网络

1,docker 网络是什么,有什么作用?,解决了什么问题?

Docker 网络是容器间及与外部通信的虚拟网络。作用是让容器能互访、连外网、安全隔离。解决了容器间通信难、跨主机组网、动态分配 IP、流量隔离及负载均衡等问题,简化微服务网络管理。

2.docker网络的常用命令
//连接一个容器到一个网络
docker network connect   //Connect a container to a network
//创建一个网络
docker network create   //Create a network
//将容器从一个网络中断开
docker network disconnect //Disconnect a container from a network
//查看网络的详细信息
docker network inspect //Display detailed information on one or more networks
//查看网络列表
docker network ls //List networks
//移除所有未使用的网络
docker network prune //Remove all unused networks
//移除一个或多个网络
docker network rm //Remove one or more networks

容器之间通信方式一

通过docker 自带的网桥

 

通过容器的ip地址可以ping通

但是通过容器名则不行

 

容器之间通信方式二

通过自己创立的network

 

 

通过容器的ip地址和容器名都可以ping通

四.docker容器编排 

1.什么是docker容器编排

容器编排通俗来说一堆容器一起配合工作并且互不干扰

build :  构建或重新构建服务的镜像
config 解析、解析并呈现规范格式的 compose 文件,即检查配置文件
cp :       在服务容器和本地文件系统之间复制文件 / 文件夹
create 为服务创建容器
down :  停止并移除容器、网络
events 从容器接收实时事件
exec :    在正在运行的容器中执行命令
images    列出创建的容器使用的镜像
kill :       强制停止服务容器
logs :    查看容器的输出
ls :        列出正在运行的 compose 项目
pause:  暂停服务
port :    打印端口绑定的公共端口
ps     :  列出容器
pull :    拉取服务镜像
push :  推送服务镜像
restart :  重启服务容器
rm  :   删除已停止的服务容器
run :   对服务运行一次性命令
start :  启动服务
stop :  停止服务
top :    显示运行的进程
unpause 取消暂停
up :   创建并启动容器
version 显示 docker compose 版本信息
 2.dockercompose案例演示

dockerfile文件编写

FROM gcc:latest
WORKDIR /app
COPY main.cc .
RUN g++ main.cc -o server
EXPOSE 8080
CMD [ "./server" ]

docker-compose.yml文件编写

version: '3.8'
services:cpp-server:build: .ports:- "8080:8080"openresty:image: openresty/openresty:alpineports:- "8081:80"volumes:- ./nginx:/etc/nginx/conf.d

openresty_conf文件编写

server {listen 80;server_name localhost;location / {default_type text/html;content_by_lua_block {ngx.say("Hello from OpenResty!")}}
}

通过docker compose up --build命令执行

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/84332.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ping命令常用参数以及traceout命令

在网络故障排查和性能分析中,ping和 traceroute(Windows中通常称为 tracert)是两个极为重要的工具。它们帮助诊断网络连接问题,了解数据在网络中的传输路径。下面将详细介绍这两个命令的常用参数及其应用。 ping命令 ping命令用…

SpringBoot开发——Spring Boot异常处理全攻略:五大方案实战对比

文章目录 一、血泪教训:异常处理的代价二、五大异常处理方案详解2.1 全局异常处理(推荐方案)2.2 控制器级处理2.3 HTTP状态码注解2.4 ResponseEntity精细控制2.5 自定义异常体系(企业级方案)三、五大方案对比决策表四、四大避坑指南4.1 异常吞噬陷阱4.2 循环依赖问题4.3 异…

CodeBuddy 实现图片转素描手绘工具

本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 前言 最近在社交媒体上,各种素描风格的图片火得一塌糊涂,身边不少朋友都在分享自己的 “素描照”,看着那些黑白线条勾勒出的独特韵味&a…

2025.05.21华为暑期实习机考真题解析第二题

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 02. 灾区物资调度路径规划 问题描述 在一次严重的自然灾害后,LYA负责协调救援物资的配送工作。救援区域包含多个受灾乡镇和一个物资集结点,各个地点之间的道路状况各异,有些甚至…

Gartner《Optimize GenAI Strategy for 4 Key ConsumerMindsets》学习心得

一、引言 在当今数字化营销浪潮中,生成式人工智能(GenAI)正以前所未有的速度重塑着市场格局。GenAI 既是一场充满机遇的变革,也是一场潜在风险的挑战。一方面,绝大多数 B2C 营销领导者对 GenAI 赋能营销抱有极高期待,他们看到了 GenAI 在提升时间与成本效率方面的巨大潜…

探索链表的奇妙世界:从基础到高级应用

链表是计算机科学中一种基础且重要的数据结构,它如同一条由珠子串成的项链,每个珠子(节点)都包含着数据和指向下一个珠子的线索。 与数组相比,链表在插入和删除操作上更加灵活,无需预先分配固定大小的内存…

黑马点评双拦截器和Threadlocal实现原理

文章目录 双拦截器ThreadLocal实现原理 双拦截器 实现登录状态刷新的原因: ​ 防止用户会话过期:通过动态刷新Token有效期,确保活跃用户不会因固定过期时间而被强制登出 ​ 提升用户体验:用户无需频繁重新登录,只要…

Windows 中动态库.dll 的 .lib 文件有什么作用?

在 Windows 平台开发中, 动态链接库(Dynamic Link Library, DLL)。与之相关的还有一个常让人困惑的文件——.lib 文件。那么,这个 .lib 文件到底有什么作用呢? 一、什么是 .lib 文件? .lib 文件是 静态导入库(Import Library) 文件,它通常与动态链接库(DLL)一起生成…

细说STM32单片机FreeRTOS消息缓冲区及其应用实例

目录 一、消息缓冲区功能概述 二、消息缓冲区操作相关函数 1、相关函数概述 2、部分函数详解 (1)创建消息缓冲区 (2)写入消息 (3)读取消息 (4)消息缓冲区状态查询 三、消息…

【缓存】JAVA本地缓存推荐Caffeine和Guava

🌟 引言 在软件开发过程中,缓存是提升系统性能的常用手段。对于基础场景,直接使用 Java集合框架(如Map/Set/List)即可满足需求。然而,当面对更复杂的缓存场景时: 需要支持多种过期策略&#x…

IDA插件 MIPSROP的安装和使用方法

前言 笔者的IDA版本为9.0,刚开始根据一些博客描述以为将mipsrop.py拷贝到IDA的plugins目录即可,可操作后发现事情好像没这么简单,复制进去后就发现没有博客中所说的 MIPS ROP Finder ,笔者在网上搜索了很多博客后在 https://bbs.…

(1)转置后,行列式的值不变 (2)将行列式的任意两行互换位置后,行列式改变符号

以下是对原始内容在不改变内容本身的前提下进行的格式优化,以提升可读性和逻辑清晰度: ✅ 行列式的几何意义 行列式(determinant)是线性代数中一个非常重要的概念,它的几何含义可以从以下几个方面理解: &a…

最大似然估计(Maximum Likelihood Estimation, MLE)详解

一、定义 最大似然估计 是一种参数估计方法,其核心思想是: 选择能使观测数据出现概率最大的参数值作为估计值。 具体来说,假设数据 D x 1 , x 2 , … , x n D{x_1,x_2,…,x_n} Dx1​,x2​,…,xn​独立且服从某个概率分布 P ( x ∣ θ ) P(…

用go从零构建写一个RPC(3)--异步调用+多路复用实现

在前两个版本中,我们实现了基础的客户端-服务端通信、连接池、序列化等关键模块。为了进一步提升吞吐量和并发性能,本版本新增了 异步发送机制 和 多路复用支持,旨在减少资源消耗、提升连接利用率。 代码地址:https://github.com/…

FFmpeg 安装包全攻略:gpl、lgpl、shared、master 区别详解

这些 FFmpeg 安装包有很多版本和变种,主要区别在于以下几个方面: ✅ 一、从名称中看出的关键参数: 1. 版本号 master:开发版,最新功能,但可能不稳定。n6.1 / n7.1:正式版本,更稳定…

深度学习实战:从图像分类到文本生成的完整案例解析

1 图像分类案例 1.1 CIFAR10数据集介绍 cifar数据是torchvision第三方包提供的数据集 训练集5w 测试集1w y标签 10个类别 10分类问题 一张图形状 (32, 32, 3) import torch import torch.nn as nn from torchvision.datasets import CIFAR10 from torchvision.transforms i…

Android 添加系统服务的完整流程

[应用程序] (应用进程)│↓ 调用简单API [SoundManager] │ ├─ 代理模式门面模式(应用进程)│ ├─ 缓存数据 ←─ 装饰器模式(应用进程)│ └─ 转换异常 ←─ 适配器模式(应用进程)│↓ 通过Bind…

wan2.1代码笔记

GPU内存不够,可以先运行umt5,然后再运行wanpipeline,参考FLUX.1代码笔记,或者使用ComfyUI。 下面使用随机数代替umt5 embedding。 import torch from diffusers.utils import export_to_video from diffusers import Autoencoder…

环境搭建与工具配置

3.1 本地环境搭建 3.1.1 WAMP环境搭建漏洞靶场(一、二) WAMP(Windows Apache MySQL PHP)是搭建本地Web漏洞靶场的基础环境。 安装步骤: Apache:下载并安装最新版Apache HTTP Server,配置监…

STM32F446主时钟失效时DAC输出异常现象解析与解决方案

—### 现象概述 在STM32F446微控制器应用中,若主时钟(HSE)的晶体信号对地短路,但DAC(数模转换器)仍能输出变化信号,这一现象看似矛盾,实则与系统时钟切换机制密切相关。本文将从硬件…