首页 > 其他分享 >DOCKER20231217: 容器引擎Docker

DOCKER20231217: 容器引擎Docker

时间:2023-12-17 11:55:06浏览次数:37  
标签:容器 container 仓库 DOCKER20231217 镜像 Docker docker

 

 

 

1.1 Docker简介

 

1.1.1 什么是Docker?

一种轻量级的操作系统虚拟化技术,基于Go语言实现的开源容器项目,诞生于2013年,最初发起者是dotCloud公司(现 Docker Inc)

Docker容器化虚拟技术 vs 传统虚拟机技术

特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为MB 一般为GB
性能 接近原生 弱于
系统支持量 单机支持上千容器 一般几十个
隔离性 弱于 强于
安全性 弱于 强于
跨操作系统 不支持 支持

Docker设计思想

  • BUILD、SHIP、RUN
  • 即对应用的封装(Packaging)、分发(Distribution)、部署(Deployment)、运行(Runtime)
  • 一次封装、到处运行
  • 封装的对象可以是一个Web应用、一个编译环境、也可以是一套数据平台服务,甚至是一个操作系统或一个大数据集群
  • 高效、敏捷、轻量级的容器方案,并支持部署到本地和多种主流云平台

 

1.1.2 Docker的主要特性

Docker优势

  • 利用并共享主机内核,性能出色
  • 加快应用部署速度,支持多种场景运行
  • 迁移、扩展、更新方便

 

 

1.2 Docker运行原理

1.2.1 系统架构

Image镜像

  • Image镜像是创建Docker容器的基础,App及其所需的运行环境,可以构建到Image镜像中
  • 镜像相当于静态模板,通过Image镜像可以启动多个Container容器
  • Image镜像依赖操作系统的内核,操作系统的内核在启动时会用bootfs加载
  • 它由多层layer组成,最底层是rootfs,包含某个发行版操作系统的根目录结构和配置文件
  • 每一层的layer,都会在前一层的基础上,对rootfs文件系统进行操作,安装软件或修改配置
  • 所有layer层的叠加,形成最终的文件结构便是Image镜像
  • Image镜像可以通过Dockerfile构建,也可以对Container进行操作后再持久化为Image
### 第一行必须指定基于的容器镜像
FROM ubuntu
### 维护者信息
MAINTAINER docker_user [email protected]
### 镜像的操作命令
RUN echo "deb http://archive.ubuntu.com/ubuntu/raring main universe" >>/etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >>/etc/nginx/nginx.conf
### 容器启动时执行指令
CMD /usr/sbin/nginx

 

Container 容器

  • Docker容器是Docker镜像的一个运行实例。
  • Docker镜像是静态的只读文件,Docker容器带有运行时需要的可写文件层。
  • Docker容器是独立运行的一个或一组应用,以及他们必须的运行环境。
  • 系统架构

  • Docker 核心概念
    • Docker客户端
      • Docker command、RESTful API
    • Docker daemon
      • 核心引擎,接受请求、实现功能、返回结果
      • 内部机制复杂,需管理容器、镜像、存储等
    • Docker  容器
      • 核心内容,功能上以镜像作为基础,提供标准和隔离的执行环境
      • 概念上容器体现了Docker集装箱的理念
    • Docker 镜像
      • 容器环境的静态体现,轻量级的虚拟镜像(只是一个可定制的rootfs)
    • Registry
      • 存放Docker镜像的仓库,通常部署在服务器或者云端

 

1.2.2 镜像仓库

Docker Hub

  • Docker 官方维护的公共仓库,所有用户都可以进行Image的上传和获取
  • 本地没有Image镜像,并且没有指定镜像仓库时,会默认从Docker Hub进行获取

私有镜像仓库

  • 企业一般会在内网环境中搭建私有镜像仓库来进行镜像的存储,以减少风险
  • TDH镜像仓库在Manager主节点的5000端口
  • 如果同时存在多个镜像仓库,可以在容器名上进行区分:
  • registry.xxx.io/demo/centos:latest
    • repository:registry.xxx.io/demo/centos
    • tag/版本:latest
    • 远端仓库地址:registry.xxx.io
    • 项目/镜像名:demo/centos

 

1.2.3 工作机制

  • 准备阶段
    • 拉取镜像,若无本地镜像,则需要从远程仓库拉取
    • 创建新的容器,并设置进程间隔离的Spec,完成与宿主机进程和网络的隔离;容器进程纳入Cgroup,限制容器的资源占用,包括CPU、内存、网络、磁盘I/O等
    • 分配union文件系统并且挂载一个可读写层,任何修改容器的操作都会被记录在这个读写层上(可以保存这些修改成新的镜像;也可以选择不保存,下次运行镜像的时候所有修改操作都会被消除)
    • 分配网络\桥接接口,创建一个容器与本地主机通信的网络接口
    • 设置容器IP,为创建的容器分配一个IP地址,同时向iptables中追加一条新的映射规则
  • 启动阶段
    • 容器启动,运行指定的程序
    • 捕获并且提供应用输出,包括输入、输出、报错信息

 

 

1.3 Docker 基础操作

 

1.3.1 最佳实践

应用程序构建

# 拉取私有仓库镜像
docker pull node01:5000/first_image
# 查看镜像详情
docker image inspect node01:5000/first_image
# 通过镜像启动容器
docker run --name container-name -d node01:5000/first_image
# ----------------参数含义[start]---------------- #
# --name: 为容器起一个名称
# -d: detached,以守护进程的方式在后台运行
# -i: 以交互方式运行容器, 通常与-t搭配使用
# -t: 为容器重新分配一个伪输入终端,通常与-i搭配使用
# -P: 随机端口映射
# -p: 指定端口映射
# ----------------参数含义[end]---------------- #
# 查看运行中的容器
docker ps

容器管理

# 查看所有容器
docker container ls [-a]
# 查看容器日志
docker logs container-id/container-name
# 进入运行中的容器执行操作
dcoker exec -ti container-id/container-name bash
# 退出容器
exit
# 从本地拷贝文件到容器
docker cp container-id:path local_path
# 从容器拷贝文件到本地
docker cp local_path container-id:path
# 正常关闭容器
docker stop container-name/container-id
# 强制杀死容器
docker kill container-name/container-id
# 重启容器
docker restart container-name/container-id
# 删除容器
docker rm container-name/container-id
# 从运行中的容器创建一个新的镜像
docker commit container-id node01:5000/second_image

 

1.3.2 镜像管理

常用命令列表(本地镜像)

Command Description
docker images 列出本地镜像
docker rmi 删除本地一个或多个镜像
docker tag 标记本地镜像,将其归入某一仓库
docker build 根据Dockerfile构建镜像
docker commit 将容器commit为镜像
docker history 查看指定镜像的创建历史
docker save 将指定镜像保存成tar归档文件
docker load 导入使用docker save命令导出的镜像
docker import 从归档文件中创建镜像
docker login 登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库Docker Hub
docker logout 登出一个docker镜像仓库,如果未执行镜像仓库地址,默认为官方仓库Docker Hub
docker pull 从镜像仓库中拉取或者更新指定镜像
docker push 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
docker search 从Docker镜像仓库中查找镜像

 

标签:容器,container,仓库,DOCKER20231217,镜像,Docker,docker
From: https://www.cnblogs.com/harleyblogs/p/17908906.html

相关文章

  • 使用Docker自定义配置部署RustDesk Server
    “RustDesk是一款可以平替TeamViewer的开源软件,旨在提供安全便捷的自建方案。”这是RustDesk官网对自己的描述。作为一款使用Rust语言开发的开源软件,在为数不多的Rust开发者和数量庞大的Rust学习者中还是有相当的知名度的,并且商业化的RustDeskPro也是如火如荼。开始docker......
  • C++常用STL容器
    1.queue#include<queue>usingnamespacestd;queue<int>q;常用方法1.size()q.size()值为所包含的元素的个数2.front()q.front()头元素3.back()q.back()尾元素4.push()q.push(value)将value加入队列q中5.pop()q.pop()将头元素弹出队列q中测试代码:#include<i......
  • docker制作镜像太大如何处理
    1.在编写Dockerfile文件时,可以使用 .dockerignore 文件来指定需要从上下文中排除的文件和目录。可以将不需要包含在镜像中的路径添加到 .dockerignore 文件中,然后在通过 2.dockerbuild 命令构建镜像时,Docker 会自动排除这些路径。......
  • 如何通过迭代器反映出该迭代器在容器中的位置
    如何通过迭代器反映出该迭代器在容器中的位置在C++中,迭代器本身并不会直接提供它在容器中位置的信息,但你可以利用迭代器之间的相对关系来反映出它在容器中的位置。迭代器是指向容器元素的对象,它们可以通过不同的方式进行比较和操作。在容器中,迭代器的位置可以通过迭代器之间的相对......
  • 4-Docker命令之docker stop
    1.dockerstop介绍dockerstop命令是用来停止一个运行中的docker容器。2.dockerstop用法dockerstop[参数]container[container......][root@centos79~]#dockerstop--helpUsage:dockerstop[OPTIONS]CONTAINER[CONTAINER...]Stoponeormorerunningcontainers......
  • Docker 部署数据可视化 Superset 3.0.0 深度汉化并配置元数据存储为 Postgres
    Superset官方提供的Docker镜像在3.0.0版本下不能做到开箱即用,需要一些设置拉取原始镜像dockerpullapache/superset:3.0.0配置superset_config.pysuperset_config.py会覆盖掉config.py里的变量,无需配置config.py创建一个superset_config.py文件添加以下内容SECRET......
  • Docker Compose: depends_on
    depends_ondepends_on expressesstartupandshutdowndependenciesbetweenservices.ShortsyntaxTheshortsyntaxvariantonlyspecifiesservicenamesofthedependencies.Servicedependenciescausethefollowingbehaviors:Composecreatesservicesind......
  • Docker部署Redis
    1、拉取redis镜像dockerpullredis2、创建redis配置文件mkdir-p/mydata/redis/conftouch/mydata/redis/conf/redis.conf3、启动redis镜像dockerrun-p6379:6379--nameredis\-v/mydata/redis/data:/data\-v/mydata/redis/conf/redis.conf:/etc/redis/redis.......
  • Docker 安装
    1、在线安装1.1、卸载系统之前的dockersudoyumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\docker-engine1.2、安装Docker-ce安装必须的依赖sudoyuminstall-yyum-uti......
  • 饭卡(容器)
    #include<iostream>#include<vector>#include<windows.h>usingnamespacestd;inta=999;structstudent{ stringname; intage; intcard; intgrade;}s;voidka(){ cout<<"学生管理系统:"<<endl; cout<<"1.新建学生......