当前位置: 首页 > news >正文

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命令执行

 

 

 

相关文章:

  • 数据库MySQL进阶
  • 论文阅读笔记——Emerging Properties in Unified Multimodal Pretraining
  • 通过shell脚本检测服务是否存活并进行邮件的通知
  • 开源视频监控前端界面MotionEye
  • 视频剪辑 VEGAS - 配置视频片段保持原长宽比
  • 单片机中断系统工作原理及定时器中断应用
  • 【Excel 支持正则的方法】解决VBA引入正则的方法和步骤
  • Lesson 22 A glass envelope
  • 展示了一个三轴(X, Y, Z)坐标系!
  • 基于大模型的短暂性脑缺血发作预测与干预全流程系统技术方案大纲
  • 【C++】封装红黑树实现 mymap 和 myset
  • 记录将网站从http升级https
  • Linux(7)——进程(概念篇)
  • 万亿参数背后的算力密码:大模型训练的分布式架构与自动化运维全解析
  • 【RichTextEditor】 【分析2】RichTextEditor设置文字内容背景色
  • 毕业论文格式(Word)
  • python 自动生成不同行高的word
  • 攻防世界——Web题 unseping 反序列化绕过
  • 计算机视觉与深度学习 | 基于 YOLOv8 + BeautyGAN + CodeFormer + Face Parsing 实现简单的人脸美颜
  • Spring Security探索与应用
  • 浙江做网站找谁/网络营销大赛策划书
  • 高端建站属于外包公司么/河南纯手工seo
  • 如何做物流网站/seo怎么做新手入门
  • 家居网站建设费用/全国推广优化网站
  • 附近学电脑在哪里报名/重庆seo公司
  • 嘉兴建设工程造价信息网站/网络营销技术