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 docker_user@email.com
### 镜像的操作命令
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镜像仓库中查找镜像

镜像仓库使用实践

# 为镜像打tag
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
## 查看镜像列表
docker images
## 打tag
docker tar ubuntu:latest node01:5000/test/ubuntu:latest
# 登录镜像仓库
docker login node01:5000
Username: root
Password:
Login Succeed
# 将镜像上传本地仓库
docker push [OPTIONS] NAME[:TAG|@DIGEST]
docker push node01:5000/test/ubuntu:latest
# 删除本地镜像
docker rmi node01:5000/test/ubuntu:latest
# 从镜像仓库重新下载镜像
docker pull node01:5000/test/ubuntu:latest

常用命令列表

Command Description
docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 运行容器
docker ps [OPTIONS] 查看运行中的容器,-a 可以查看所有容器
docker inspect CONTAINER 查看容器详情
docker exec [OPTIONS] CONTAINER COMMAND [ARG...] 在容器中执行命令
docker logs [OPTIONS] CONTAINER 查看容器日志
docker rm [OPTIONS] CONTAINER [CONTAINER...] 删除停止后的容器,-f 可以强制删除运行容器
docker kill [OPTIONS] CONTAINER [CONTAINER...] 杀死容器
docker stop [OPTIONS] CONTAINER [CONTAINER...] 停止容器
docker start [OPTIONS] CONTAINER [CONTAINER...] 启动容器

DOCKER20231217: 容器引擎Docker的更多相关文章

  1. 你不得不了解的应用容器引擎---Docker

    最近突然想搭一个redis集群玩玩,因为公司的电脑同时开2个虚拟机就卡的不行,所以我就想到用Docker开启多个redis-server来搭建.然后在网上找着找着发现,使用Docker,哪需要搭建啊, ...

  2. 【开发工具 docker】值得学习的应用容器引擎docker安装

    概述: Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何 ...

  3. 应用容器引擎-Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化.容器是完全使用沙箱 ...

  4. Java框架Spring Boot & 服务治理框架Dubbo & 应用容器引擎Docker 实现微服务发布

    微服务系统架构实践 开发语言Java 8 框架使用Spring boot 服务治理框架Dubbo 容器部署Docker 持续集成Gitlab CI 持续部署Piplin 注册中心Zookeeper 服 ...

  5. Kubernetes将弃用Docker!与 containerd容器引擎

    时间戳:2022-06-07 20:32:19 星期二 撰写文档参考:(阿良-腾讯课堂)Kubernetes将弃用Docker 参考博客k8s入坑之路(3)containerd容器 container ...

  6. 史上最全面的Docker容器引擎使用教程

    目录 1.Docker安装 1.1 检查 1.2 安装 1.3 镜像加速 1.4 卸载Docker 2.实战Nginx 3.Docker命令小结 4.DockerFile创建镜像 4.1 Docker ...

  7. Centos7下安装与卸载docker应用容器引擎

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Li ...

  8. Docker 1.3.3/1.4.0 发布下载,Linux 容器引擎

    Docker 1.3.3 发布,下载地址: https://github.com/docker/docker/archive/v1.3.3.zip 改进记录包括: Security Fix path ...

  9. 操作系统-容器-引擎容器-百科:Docker

    ylbtech-操作系统-容器-引擎容器-百科:Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上 ...

  10. 【转帖】技术选型之Docker容器引擎

    技术选型之Docker容器引擎 https://segmentfault.com/a/1190000019462392 图过不来的 原作者写的挺好的 题外话 最近对Docker和Kubernetes进 ...

随机推荐

  1. JAVA开发规范v1.0

    01-中铜国贸JAVA开发规范v1.0 一.编程规约 (一)命名风格 [强制]代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束. 反例:_name / _name / $Obje ...

  2. 迁移现有用户数据到ABP vNext

    前言 使用 ABP vNext(下文简称 ABP)时,通常都是从 cli 开始新建模板,从一个空项目开始.对已经存续的项目来说,现有的数据,特别是用户等核心数据需要进行迁移. 老的项目,随着规模越来越 ...

  3. metasploit模块

    模块类型 辅助模块(Auxiliary) 渗透攻击模块(Exploits) 后渗透攻击模块(Post) 攻击载荷模块(Payloads) 空指令模块(Nops) 编码器模块(Encoders) 后渗透 ...

  4. 【数据结构】【冒泡排序法】Java写冒泡排序法

    public class 冒泡 { public static int[] maopao(int[] arr){ for(int i=0;i<arr.length-1;i++){ for(int ...

  5. Qt音视频开发11-通用监控布局控件(开源)

    一.前言 自从做监控系统以来,就一直有打算将这个功能独立出来一个类,这样的话很多系统用到此类布局切换,通用这个类就行,而且后期此布局会增加其他异形布局,甚至按照16:9之类的比例生成布局,之前此功能直 ...

  6. Qt编写地图综合应用53-省市轮廓图下载

    一.前言 Qt的浏览器控件的交互机制非常方便,所以在在线地图的时候可以对每个区域的经纬度坐标集合发给Qt程序,让他去存储到文件,在实际的测试过程中,发现有部分地图有多个封闭的曲线的,比如散落的岛屿和飞 ...

  7. Llama3.1 是怎么工作哒?原文翻译版😘

    了解Llama3.1如何工作--深入探讨模型流程 原文标题:Understand How Llama3.1 Works - A Deep Dive Into the Model Flow 原作者:Xi ...

  8. 基于Vue的前后段分离开发项目中<img :src />标签中引用vue的data属性中定义的图像地址失败的解决办法

    问题描述: 基于Vue的前后段分离开发项目中<img  :src />标签中引用vue的data属性中定义的图像地址失败,如下图所示: 解决办法: 修改后写法,加上require即可.如下 ...

  9. Java GUI控件SwingX之JXTaskPane的使用示例

    JXTaskPane 类似XP 左边的导航栏,在开发Swing应用的时候很好用的.下面两张截图反应了JXTaskPane的动画效果.可以自由的卷起和展开.   JXTaskPane的的使用步骤:1.新 ...

  10. 【译】GitHub Copilot Free 在 Visual Studio 中

    可能您还没有听说过,GitHub 刚刚宣布了 Copilot Free(免费版)!好消息是:您现在已经可以在 Visual Studio 中开始使用 Copilot Free 了.它现在已经可用了,我 ...