IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Docker安装与使用 -> 正文阅读

[系统运维]Docker安装与使用

Docker

简介

最主要的作用可以把环境打包成镜像,在其他机器也能正常的运行

它的理念是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。

传统化虚拟机与Docker的区别

传统虚拟机是虚拟出一套硬件后,在上面运行一套完整操作系统,在该系统再运行所需应用进程

容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。

总结

在传统的应用开发完成后,需要提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行。Docker化之后只需要交付少量容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间。

应用开发构建将变成搭积木,应用设计变得非常简单。当现有的容器不足以支撑业务处理时,可通过镜像运行新的容器进行快速扩容,使应用系统的扩容从原先的天级变成分钟级甚至秒级。

Docker的基本组成

Docker镜像(Image)就是一个只读的模板.

镜像可以用来创建Docker容器看,一个镜像可以创建很多容器

它也相当于是一个root文件系统。比如官方镜像 centos:7 就包含了完整的一套 centos:7 最小系统的 root 文件系统。

相当于容器的“源代码”,docker镜像文件类似于Java的类模板,而docker容器实例类似于java中new出来的实例对象。

Docker容器· (container)

1 从面向对象角度

Docker 利用容器(Container)独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。就像是Java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台

2 从镜像容器角度

可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

仓库 (repository)是集中存放镜像文件的场所

类似于

Maven仓库,存放各种jar包的地方;

github仓库,存放各种git项目的地方;

Docker公司提供的官方registry被称为Docker Hub,存放各种镜像模板的地方。

仓库分为公布公开仓库和私有仓库

最大的公开仓库是 Docker Hub(https://hub.docker.com/),

存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云等

安装

前提

查看自己的内核

uname -r
cat /etc/redhat-release

linux安装

yum -y install gcc
yum -y install gcc-c++
yum install -y yum-utils

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce docker-ce-cli containerd.io
systemctl start docker
docker version

ubuntu安装方法

sudo apt-get remove docker docker-engine docker.io
sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://repo.huaweicloud.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://repo.huaweicloud.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
echo "deb [arch=armhf] https://repo.huaweicloud.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt-get update
sudo apt-get install docker-ce

run干了什么

在这里插入图片描述

为什么docker比vm 虚拟机快

(1)docker有着比虚拟机更少的抽象层

由于docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。

(2)docker利用的是宿主机的内核,而不需要加载操作系统OS内核

当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。进而避免引寻、加载操作系统内核返回等比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker容器只需要几秒钟。

常用命令

帮助类启动命令

启动docker: systemctl start docker
停止docker: systemctl stop docker
重启docker: systemctl restart docker
查看docker状态: systemctl status docker
开机启动: systemctl enable docker
查看docker概要信息: docker info
查看docker总体帮助文档: docker --help
查看docker命令帮助文档: docker 具体命令 --help

镜像

docker images

列出本地主机上的镜像

标签名说明
REPOSITORY表示镜像的仓库源
TAG镜像版本的版本号
IMAGE ID镜像ID
CREATED镜像创建时间
SIZE镜像大小

同一仓库源可以有多个 TAG版本,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。

如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像

options说明
-a列出本地所有镜像
-q只显示镜像ID

docker search 某个xxx镜像名字

docker search [OPTIONS] 镜像名字

参数说明
NAME镜像名称
DESCRIPTION镜像说明
STARS点赞数量
OFFICIAL是否是官方的
AUTOMATEO是否是自动构建的
options说明
–limit只列出N个镜像,默认25个
docker search --limit 5 redis

docker pull 某个XXX镜像名字

下载镜像

docker pull 镜像名字[:TAG] 没有TAG就是最新版本

docker system df

查看镜像/容器/数据卷所占的空间

docker rmi 某个XXX镜像名字ID

删除镜像

删除单个镜像
docker rmi  -f 镜像ID

删除多个镜像
docker rmi -f 镜像名1:TAG 镜像名2:TAG

删除全部
docker ·rmi -f $(docker images -qa)

什么是虚悬镜像

仓库名和标签名都是****的镜像

容器命令

注意:有镜像才能创建容器,这是根本前提

docker pull ubuntu

新建+启动容器

OPTIONS:选项 COMMAND:命令

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

常用选项

选项说明
–name=为容器指定一个名称
-d后台运行容器并返回容器ID,也即启动守护式容器(后台运行);
-i以交互模式运行容器,通常与 -t 同时使用;
-t为容器重新分配一个伪输入终端,通常与 -i 同时使用;也即启动交互式容器(前台有伪终端,等待交互);
-P随机端口映射,大写P
-p指定端口映射,小写p

启动交互式容器

使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。

docker run -it ubuntu /bin/bash

参数说明

-i : 交互式操作

-t :终端

ubuntu : ubuntu 镜像。

/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

要退出终端,直接输入 exit:

列出当前所有正在运行的容器

docker ps [OPTIONS]

常用选项:

选项说明
-a列出当前所有正在运行的容器+历史上运行过的
-l显示最近创建的容器。
-n显示最近n个创建的容器。
-q静默模式,只显示容器编号。

退出容器

两种退出方式

命令说明
exitrun进去容器,exit退出,容器停止
ctrl+p+qrun进去容器,ctrl+p+q退出,容器不停止

启动以停止容器

docker start 容器ID或者容器名

重启容器

docker restart 容器ID或者容器名

停止容器

docker stop 容器ID或者容器名

强制停止容器

docker kill 容器ID或容器名

删除已停止的容器

docker rm 容器ID

一次性删除多个容器实例

docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm

redis前后台启动

·前台交互式启动
· docker run -it redis:6.0.8

·后台守护式启动
·docker run -d redis:6.0.8

·查看容器日志
·docker logs 容器ID

·查看容器内运行的进程
·docker top 容器ID

·查看容器内部细节
·docker inspect 容器ID

·进入正在运行的容器并以命令行交互
·docker exec -it 容器ID bashShell

·重新进入docker attach 容器ID
attach 直接进入容器启动命令的终端,不会启动新的进程 用exit退出,会导致容器的停止。
exec 是在容器中打开新的终端,并且可以启动新的进程 用exit退出,不会导致容器的停止。

从容器拷贝文件到主机上 容器到主机

docker cp  容器ID:容器内路径 目的主机路径

导入和导出容器

export 导出容器的内容留作为一个tar归档文件[对应import命令]

import 从tar包中的内容创建一个新的文件系统再导入为镜像[对应export]

导出
·docker export 容器ID > 文件名.tar

导入
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号

镜像

是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。

只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。

Docker容器数据卷

Docker挂载主机目录访问如果出现cannot open directory .: Permission denied

解决办法:在挂载目录后多加一个–privileged=true参数即可

就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:

的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。将docker容器内的数据保存进宿主机的磁盘中

· 运行一个带有容器卷存储功能的容器实例

 docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录      镜像名

数据卷的目的就是将运用与运行的环境打包镜像,run后形成容器实例运行,对数据的要求就是持久化的。Docker产生的数据不备份,容器实例删除后,容器内的数据自然就没有了

特点:

1:数据卷可在容器之间共享或重用数据

2:卷中的更改可以直接实时生效,爽

3:数据卷中的更改不会包含在镜像的更新中

4:数据卷的生命周期一直持续到没有容器使用它为止

宿主与容器之间映射添加容器卷

直接命令添加

公式:docker run -it -v /宿主机目录:/容器内目录 ubuntu /bin/bash

docker run -it --name myu3 --privileged=true -v /tmp/myHostData:/tmp/myDockerData ubuntu /bin/bash

·docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录      镜像名

查看数据卷是否挂载成功

docker inspect 容器ID

容器和宿主之间数据共享

1 docker修改,主机同步获得

2 主机修改,docker同步获得

3 docker容器stop,主机修改,docker容器重启看数据是否同步。

读写规则映射添加说明

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro      镜像名
容器内部默认只能读
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw      镜像名
容器内部默认读写

卷的继承和共享

容器1和宿主机的映射

docker run -it  --privileged=true -v /mydocker/u:/tmp --name u1 ubuntu

容器2继承容器1的卷规则

·docker run -it  --privileged=true --volumes-from 父类  --name u2 ubuntu

共享

1 docker修改,主机同步获得

2 主机修改,docker同步获得

3 docker容器stop,主机修改,docker容器重启看数据是否同步。

读写规则映射添加说明

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro      镜像名
容器内部默认只能读
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw      镜像名
容器内部默认读写

卷的继承和共享

容器1和宿主机的映射

docker run -it  --privileged=true -v /mydocker/u:/tmp --name u1 ubuntu

容器2继承容器1的卷规则

docker run -it  --privileged=true --volumes-from 父类  --name u2 ubuntu
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-22 21:01:04  更:2022-03-22 21:01:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:47:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码