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 Registry | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(hub.docker.com) 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。 |
| Docker Machine | Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
docker 命令
-
查看容器镜像分层大小
- 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和镜像的构建和分享
3-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部署
- 镜像的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