docker

1 docker介绍

1.1 什么是虚拟化

在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部分是不受现有资源的假设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料储存。

在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件 对资源充分利用

虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(vip)、桌面虚拟化、服务虚拟化、虚拟机等等、

# kvm:开源的免费的  Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中
# exsi:vmware商用的,装在裸机上,可以虚拟化出很多机器
# openstack(python开发的,开源的):电信云,华为云 openstack  管理云平台
# 阿里云(自研,阿里飞天):云服务器,到一个网站,点点---》付款--》完成
# docker:容器技术
# k8s:多机容器管理,容器编排

1.2 docker是什么

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 的【容器就像操作一个快速轻量级的虚拟机】一样简单。

1.3 容器与虚拟机比较

image
)

1.4 Docker 概念

# 1 docker 是cs架构  mysql,redis,c和s要通信,使用的http协议,符合resful规范
# 2 Docker镜像:镜像是基于一堆文件,相当于虚拟机装了操作系统,又装了软件的一堆文件
# 3 Docker容器:镜像运行起来,成为了容器,【当成一台虚拟机上面装了一些软件】
	- 类和对象的概念
    - 镜像是类---》生成多个对象
    
# 4 Registry(注册中心)
	-镜像从哪里来?
    	-注册中心中拉取下来

image

2 docker安装

# win:下个软件,一路下一步即可(讲课,真正做练习,不要使用它)
	-https://www.docker.com/products/docker-desktop/
    -一路下一步
    
# centos:建议你直接在虚拟机中安装
	# 先卸载
    yum remove docker docker-common docker-selinux docker-engine
    rm -rf /var/lib/docker
    # 安装
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    sudo yum install docker-ce
    
    # 查看版本
    docker -v  # Docker version 23.0.3,build 3e7cbfd

3 什么是laas-Paas和Saas

Iaas: Infrastructure-as-Service(基础设施即服务)
    IaaS公司会提供场外服务器,存储和网络硬件,你可以租用。节省了维护成本和办公场地,公司可以在任何时候利用这些硬件来运行其应用
Pass:平台即服务
    paaS公司在网上提供各种开发和分发应用的解决方案,比如虚拟服务器和操作系统。这节省了你在硬件上的费用,也让分散的工作室之间的合作变得更加容易。网页应用管理,应用设计,应用虚拟主机,存储,安全以及应用开发写作工具等
Saas:软件即服务
    -软件开发,部署,运维---》公司来做,卖给其他公司软件
    
FAAS: Function as a Service,"功能即服务"(也译作"函数即服务")
    
无服务器架构  serverless    

4 docker 启动设置镜像

# systemctl status docker
停止状态

# 启动:
systemctl start docker

# 远程仓库,下载镜像,国外:https://hub.docker.com---》下载比较慢--》设置国内镜像站
	-https://cr.console.aliyun.com/cn-shanghai/instances/mirrors
# docker安装后会有 /etc/docker  文件夹
vim /etc/docker/deamon.json

{
  "registry-mirrors": ["https://x1566319.mirror.aliyuncs.com"]
}

sudo systemctl deamon-reload
sudo systemctl restart docker

4.1 启动与停止常用命令

# 启动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

5 镜像相关命令

# 1 查找镜像
	-docker search 镜像名称
    -建议去hub.docker.com 直接搜 更直观
    
# 2 拉取镜像,指定标签 tag
	docker pull centos:7
    如果不指定标签,会下载最新
    docker pull centos
    docker pull centos:latest
        
# 3 查看本地镜像
	docker images  # 等同于 docker image ls
    
# 4 删除镜像
	docker rmi 镜像ID  # 可以同时删多个
    
# 5 删除所有镜像
	# 查出所有镜像的id号
    	docker rmi `docker images -q`

6 容器相关命令

# 把镜像运行成容器,并且一个一个镜像,可以运行出多个容器

# 查看正在运行的容器
	docker ps
# 查看所有容器
	docker ps -a
# 查看最后一次运行的容器
	docker ps -l
    
# 运行容器(其实是两步:创建容器:create,运行容器:run)
	-如果容器没有创建,直接执行run,就会创建并允许,所以你只需要会run就行了
    -run 的时候,有很多参数
    	-i:表示允许容器
        -t:表示容器启动后会进入容器命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
        -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)
        
        --name:为创建的容器命名,如果不写,随机生成一个名字
        
        -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个
        -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
        
docker run -id  # 不会进入到容器内部
docker run -it  # 会进入到容器内部

# 启动一个centos容器,名字叫mycentos,并且进入
docker run -it --name=mycentos centos:7
yum install vim -y  # 在容器中装了vim软件
exit  # 退出,容器停止了

# 启动一个centos容器,名字叫mycentos,不进入
docker run -id centos:7
    
# 启动容器
docker start mycentos

# 进入到容器内部(本质是让容器执行命令)
docker exec 容器id 命令
docker exec f82e8578b9b1 ls

docker exec -it f82e8578b9b1 /bin/bash  # 进入到容器内部

# 退出
exit

# -v参数:目录映射
docker run -id --name=guts -v /home/guts:/guts centos:7
以后无论在宿主机还是容器中修改当前目录下的文件,都会相互影响

# -p参数:端口映射  容器中启动一个mysql5.7 --》容器中的3306监听,宿主机3306没人监听,做端口映射后,宿主机的3306就被docker的这个容器监听了
# 启动的mysql的root密码是123456

docker run -id --name=mysql -p 80:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
        
# netstat -nlp |grep 80  查看本机80端口占用情况
# 以后访问宿主机80端口就等于访问容器的3306端口

image

image

image

image

posted @ 2023-04-13 21:53  理塘丁真1!5!  阅读(14)  评论(0编辑  收藏  举报