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. Consul 学习总结

    什么是Consul? Consul是一种服务网络解决方案,使团队能够管理服务之间以及跨本地和多云环境和运行时的安全网络连接.Consul提供服务发现.服务网格(service mesh).流量管理和网 ...

  2. 4 步缩减 Script Evaluation Time

    4 步缩减脚本评估时间 (Script Evaluation Time) https://touch.marfeel.com/resources/blog/reduce-script-evaluati ...

  3. 钉钉机器人发送信息shell

    #钉钉机器人发送信息shell 可作为shell函数模块调用,用于监控警报.jenkins发版通知等 微信API官方文档 https://ding-doc.dingtalk.com/doc#/serv ...

  4. 【前端】【H5 API】地理定位(获取经纬度)

    H5 API 地理定位 地理定位在日常生活中应用比较广泛,例如,互联网打车.在线地图等.在HTML 5的规范中,增加了获取用户地理位置信息的接口Geolocation,开发者可以通过经纬度来获取用户的 ...

  5. https://eggjs.org/zh-cn/basics/env.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E7%8E%AF%E5%A2%83

    转载:https://eggjs.org/zh-cn/basics/env.html#自定义环境 运行环境 一个 Web 应用本身应该是无状态的,并拥有根据运行环境设置自身的能力. 指定运行环境 框架 ...

  6. Unable to find Mach task port for process-id : (os/kern) failure (0x5). (please check gdb is codesi

    (gdb) runStarting program: /Users/lurongming/test/cpptest/mainUnable to find Mach task port for proc ...

  7. Qt编写的项目作品23-推流综合应用示例

    一.功能特点 支持各种本地音视频文件和网络音视频文件,格式包括mp3.aac.wav.wma.mp4.mkv.rmvb.wmv.mpg.flv.asf等. 支持各种网络音视频流,网络摄像头,协议包括r ...

  8. [转]基于 Node.js 实现前后端分离

    为了解决传统Web开发模式带来的各种问题,我们进行了许多尝试,但由于前/后端的物理鸿沟,尝试的方案都大同小异.痛定思痛,今天我们重新思考了"前后端"的定义,引入前端同学都熟悉的No ...

  9. Type of the default value for 'data' prop must be a function的解决方法

    Type of the default value for 'data' prop must be a function的解决方法 问题现象 在写形如prop: {type: Array; defau ...

  10. 配置Ubuntu上的NFS

    $sudo apt-get install nfs-kernel-server nfs-common 配置 $sudo vim /etc/exports#添加#/home/pi/project/roo ...