docker介绍
目录
一 虚拟化
1.1 什么是虚拟化
在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。
# 打破实体结构间的不可切割的障碍解释:(服务虚拟化)
# 1 一台实体机100核,1T,1024T
可以虚拟出多个小的虚拟机,比如虚拟出4个8核8g的虚拟机
# 2 三台实体机都是100核,1T,1024T
上面的三台实体机可以在不同的位置(比如一台在上海,一台在北京,一台在南京),组合在一起,虚拟出一台250核,2T内存的机器。
在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件 对资源充分利用
虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(vip)、桌面虚拟化、服务虚拟化、虚拟机等等。
1.2 虚拟化的软件有哪些
虚拟化的软件有哪些---> 名词解释
# kvm:开源的免费的 Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中
# exsi:vmware商用的,装在裸机上,可以虚拟化出很多机器
# vmware 装的哪个虚拟机软件VMware Workstation Pro
-------对机器进行虚拟化------
# openstack(python开发的,开源的):电信云,华为云 openstack 管理云平台:对虚拟化出的虚拟机进行管理--->创建虚拟化,删除虚拟机
# 阿里云(自研,阿里飞天):云服务器,到一个网站,点点--->付款-->完成
# 腾讯自研
--- 对虚拟机进行管理----
# docker:容器技术-->学习--->创建一个个容器
# docker-compose:单机容器管理(编排)
# docker-swarm:docker官方出的,用的很少
# k8s:多机容器管理,容器编排,谷歌公司出的
-----容器管理------
1.3 linux的软件的名词
# 名词补充:linux的软件
-nginx:反向代理服务器-->web项目上线-->转发-->负载均衡
-paramiko:python的模块,ssh链接操作linux机器,远程执行命令
-ansible:python写的,基于paramiko封装-->基于ssh链接-->速度慢一些--->管理机器少一些
-指令,palybook-->批量操作远程linux机器
-python的sdk:包--->直接ansible点操作,比paramiko更简单一些
-salstack:批量管理远程linxu机器的--基于bs架构:主控机--被控机
-zabbix:监控php写的有web页面--->监控 进程
-普罗米修斯:go语言写的 ,监控容器运行,没有web页面
-granfan:前端-->对接上普罗米修斯--->显示监控情况
-jenkins:java写的 持续集成工具,用于监控持续重复的工作
-gitlab:代码仓库
二 docker介绍
https://www.cnblogs.com/liuqingzheng/articles/16315254.html
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 [GitHub](https://github.com/docker/docker) 上进行维护
# Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。
# Docker 项目的目标是实现【轻量级的操作系统虚拟化解决方案】。 Docker 的基础是 Linux 容器(LXC)等技术。
在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的【容器就像操作一个快速轻量级的虚拟机】一样简单。
三 容器与虚拟机比较
docker 不需要虚拟化出操作系统这一层,它使用的就是宿主机的操作系统资源。
四 Docker 概念
# 1 docker 是cs架构 ,mysql,redis都是c和s要通信,底层tcp协议,自己做封装的自有协议
mysql://地址+端口
redis://地址+端口
http://地址+端口
docker:c和s要通信 没有自定义协议,使用的http协议,符合resful规范
### 镜像和容器
# 2 Docker镜像:镜像是基于一堆文件,类似于:虚拟机装操作系统的centos 中有xx.iso 文件,4个多g,带了软件--->就是一堆文件
# 3 Docker容器:镜像运行起来,成为了容器,【当成一台虚拟机上面装了一些软件】
- 一个镜像--> 运行出多个容器---> 容器当成轻量级的操作系统
- 类和对象的概念
- 镜像是类---> 生成多个对象
# 4 Registry(注册中心)-docker仓库拉取镜像的位置
-镜像从哪里来?
-注册中心中拉取下来
-是国外的源
就可以配置国内的镜像站
公司也可以自己搭建镜像仓库,只公司内部使用
# 学习
-镜像操作
-容器操作
-自己封装镜像
-放到私有仓库中
# 重点:
制作一个Django的镜像,把我们的项目代码放到镜像中去,把镜像运行起来,成了容器(就相当于我们的项目在运行)。
1 我们就可以运行多个
2 这个镜像直接拿着去另一台机器中
只要把容器运行起来,就不需要搭建环境了,项目就运行起来了。(就不会在出现环境装不上,项目运行不起来的问题了)
五 Docker安装
# 在linux机器上安装
0 卸载docker
yum remove docker docker-common docker-selinux docker-engine # yum remove卸载
rm -rf /var/lib/docker # 删除相关的docker文件夹
1 yum 包更新到最新
sudo yum update
2 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 # 前置的软件
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # sudo普通用户增加的权限,如果是root用户就不用写sudo
3 设置yum源为阿里云
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# cd /etc/yum.repos.d/
# ls # 这样就多了一个docker-ce.repo 源
4 安装docker,核心
sudo yum install docker-ce
5 安装后查看docker版本
docker -v
# Docker version 24.0.5, build ced0996
6 启动docker
systemctl status docker # 查看docker状态
systemctl start docker # 启动docker,后面可以做成开机自启动模式
systemctl stop docker # 停止docker
7 拉取镜像
-centos7
-redis
-mysql5.7
docker pull centos:7 # 冒号后面写版本,不写版本就是下载最新
docker pull redis
docker pull mysql:5.7
8 查看本地镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 92034fe9a41f 7 days ago 581MB
redis latest e0ce02f88e58 12 days ago 130MB
centos 7 eeb6ee3f44bd 23 months ago 204MB
9 运行成容器
运行cento7镜像成容器
docker run -di --name=centos centos:7
10 查看正在运行的容器
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b3ad0376dd9a centos:7 "/bin/bash" 33 seconds ago Up 31 seconds centos
11 进入容器中
docker exec -it 容器id号 /bin/bash # 进入bin/bash命令中去
[root@iZ2ze3wvcie3ks4ttycl4cZ ~]# docker exec -it b3ad0376dd9a /bin/bash
[root@b3ad0376dd9a /]#
[root@b3ad0376dd9a /]# ls
anaconda-post.log dev home lib64 mnt proc run srv tmp var
bin etc lib media opt root sbin sys usr
退出宿主机:exit
退出远程服务器:exit
六 作业:在docker容器中把python3.9装完,源码安装
# 先安装下载命令包
yum install wget
# 查看命令包位置
cd /usr/bin
ls | grep wget
# 下载依赖
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel zlib* libffi-devel -y
# 下载Python3.9.10 服务器终端
wget https://registry.npmmirror.com/-/binary/python/3.9.10/Python-3.9.10.tgz
# 缺少python的依赖,编译包依赖,C依赖
yum install -y gcc-c++ gcc automake autoconf libtool make
六 docker 国内源配置
# 镜像:一堆文件
-目前从远程仓库下载的:https://hub.docker.com/
-镜像有很多人提供:官方提供,第三方提供
-镜像-->更新-->Tag不同版本
-centos:latest --> 最新
-docker pull 能找到,仓库中有才行
-忘掉:docker search 名字 # 可以直接去网站中找
# docker操作
-docker -v 查看版本
-systemctl status docker 查看docker状态
-systemctl start docker 启动docker
-systemctl stop docker
-docker info # 查看docker更详细信息
-开机自启动
#### docker pull 设置国内镜像站
# 远程仓库,下载镜像 ,国外:https://hub.docker.com--->下载比较慢-->设置国内镜像站 ,找自己的阿里云镜像站
-https://cr.console.aliyun.com/cn-shanghai/instances/mirrors
# docker安装后会有 /etc/docker 文件夹
cd /etc/docker # 在宿主机中
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://x1566319.mirror.aliyuncs.com"]
}
sudo systemctl daemon-reload # 重新加载配置文件
sudo systemctl restart docker # 重启docker
# 容器:镜像运行后的--->当成一个简洁的操作系统即可,(本质上容器是一个进程)
# 容器安装软件
建议一个容器只安装一个软件,这样redis容器宕机了,不会影响到其他容器的运行