【Docker】 docker 架构 、docker 命令

147 阅读7分钟

Docker 概述

Docker是一组平台即服务(PaaS)的产品。它基于操作系统层级的虚拟化技术,将软件与其依赖项打包为容器。 docker 介绍 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让**[开发者]打包他们的[应用以及依赖包]到一个[轻量级、可移植的容器]**中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker得以打破过去"程序即应用" 的观念,Docker是容器虚拟化技术。

安装docker

1、卸载之前老版本的docker和相关依赖命令

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2、安装 yum-utils 软件包(它提供 yum-config-manager 实用程序)并设置存储库

sudo yum install -y yum-utils
sudo yum-config-manager    --add-repo  https://download.docker.com/linux/centos/docker-ce.repo

3、安装过程需要进行多次的输入 y 选择,请耐心等待

 sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin


4、 安装完成启动docker

sudo systemctl start docker
# 安装yum-config-manager配置工具
$ yum -y install yum-utils
# 设置yum源
$ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker-ce版本
$ sudo yum install -y docker-ce
# 启动
$ sudo systemctl start docker
# 开机自启
$ sudo systemctl enable docker
# 查看版本号
$ sudo docker --version
# 查看版本具体信息
$ sudo docker version

5、 修改Docker 镜像源设置

Docker镜像源设置 修改文件 /etc/docker/daemon.json,没有这个文件就创建 添加以下内容后,重启docker服务:

{
	"registry-mirrors": [
		"http://hub-mirror.c.163.com",
		"https://docker.mirrors.ustc.edu.cn",
		"https://registry.docker-cn.com"
	]
}

或者代理镜像源地址

{
	"registry-mirrors": ["https://haml.chaochao3321.xyz"]
}

sudo systemctl restart docker

清理缓存 docker system prune

Docker 架构

Docker 包括三个基本概念:

  • 镜像(Image) :Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container) :镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository) :仓库可看成一个代码控制中心,用来保存镜像。

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

Docker 容器通过 Docker 镜像来创建。

容器与镜像的关系类似于面向对象编程中的对象与类。

Docker面向对象
容器对象
镜像
仓库代码库 github

概念说明
Docker 镜像(Images)Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。
Docker 容器(Container)容器是独立运行的一个或一组应用,是镜像运行时的实体。
Docker 客户端(Client)Docker 客户端通过命令行或者其他工具使用 Docker SDK (docs.docker.com/develop/sdk…) 与 Docker 的守护进程通信。
Docker 主机(Host)一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
Docker RegistryDocker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(hub.docker.com) 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
Docker MachineDocker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

docker 命令

image.png

  • 查看容器镜像分层大小

    • docker history 容器ID
  • 容器的attached和detached模式 Docker容器进程有两种运行模式。

1、前台模式(默认)  ——  foreground 容器

docker run ... // 或 docker run -d=false ...

注意,只有在前台模式下,才有必要设置**-it**命令选项,为容器设置伪TTY

2、后台模式(也称detached模式)

docker run -d ... // 或 docker run -d=true ...

  注意,只要有-d命令选项,就没有-it命令选项。

  当我们启动一个container时,首先需要确定这个container是运行在前台模式还是运行在后台模式。

2-7 容器的交互式模式

交互式模式

  • -it 进入交互式模式

连接容器的 shell

1. docker container run -it 创建一个容器并进入交互式模式

➜  ~ docker container run -it busybox sh
/ #
/ #
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # ps
PID   USER     TIME  COMMAND
    1 root      0:00 sh
    8 root      0:00 ps
/ # exit

2. docker container exec -it 在一个已经运行的容器里执行一个额外的command

2-10 创建容器时背后到底发生了什么

第3章 镜像的创建管理和发布

介绍镜像获取的三大主要方式,初步了解Dockerfile和镜像的构建和分享

image.png image.png

3-1 镜像的获取方式

  1. 1.dockerhub 

dockerhub是docker默认的镜像仓库地址,如果我们不配置daemon.json文件中的镜像源地址,则在执行docker pull命令时,默认从这个地址拉取镜像,国内服务器拉取镜像会非常慢 2. 2.配置国内镜像源地址( 推荐) 由于各类中间件的镜像如elk,k8s官方文档给出的默认镜像源是google的地址,在无法科学上网的前提下,我们需要配置国内镜像源地址,并查找相同版本的镜像,优点是速度快,缺点是无法像dockerhub一样及时更新最新版镜像,同时与官方文档的镜像名称有出入,需要自己比对。

Linux默认配置文件的路径为 /etc/docker/daemon.json,如果文件不存在则使用如下命令创建

vi daemon.json 这个配置主要配置 docker守护进程的相关参数 例如代理、私服仓库、相关网络配置

官方文档地址:docs.docker.com/engine/refe…

文件内容如下

{ "registry-mirrors":["registry.docker.cn.com","https://c9nwh7I7.m…"] } 配置完成后,需要执行如下命令更新docker配置并重启docker服务

sudo systemctl daemon-reload
 
sudo systemctl restart docker

配置完成后,查看当前默认docker 镜像源仓库地址

docker info

dockerhub私有镜像仓库harbor部署

(blog.csdn.net/ujm097/arti…)

  • 镜像的registry介绍
  • 镜像的获取查看和删除
  • docker镜像的导入导出
  • Dockerfile的介绍
  • 镜像的构建和分享

Dockerfile 及语法

通过dockerfile 制作 基础镜像

docker 数据的持久化如何实现,Volume有哪些类型和使用场景

  • 数据持久化之Data Volume
  • Data Volume练习之MySQL
  • 数据持久化之Bind Mount

Docker的网络

  • 网络常用命令
  • 容器间通信之bridge模式
  • 容器对外通信之bridge模式
  • 创建和使用自定义bridge
  • 容器的端口转发
  • 端口转发和Dockerfile
  • host网络详解
  • Linux网络命令空间

多容器应用的部署练习 Docker compose

  • docker-compose是什么
  • docker-compose的安装
  • compose文件的结构和版本
  • docker-compose命令行基本使用
  • docker-compose镜像构建和拉取
  • docker-compose服务更新
  • docker-compose网络(上)
  • docker-compose网络(下)
  • docker-compose水平扩展和负载均衡
  • docker-compose环境变量 服务依赖和健康检查(上)

Docker swarm

  • docker swarm介绍
  • swarm单节点快速上手
  • swarm单节点service初体验
    • swarm三节点环境的搭建
  • swarm三节点service再体验
  • swarm的overlay网络初体验
  • swarm的overlay网络详解
  • swarm的ingress网络
  • warm内部的负载均衡
  • 部署多service应用
  • stack部署多service应用
  • 在swarm中使用secret
  • swarm使用本地volume

Docker运行环境检查

代码和镜像的漏洞扫描

容器运行监控



### 给用户授权 docker  权限

 sudo groupadd docker
 sudo usermod -aG docker zizhen
 newgrp docker