目录
- 1 Docker简介
- 1.1 容器跟虚拟机的区别
- 1、虚拟机是什么
- 2、容器是什么
- 3、容器和虚拟机的区别
- 1.2 为什么要学习容器
- 1.3 Docker 是什么
- 2 Docker安装
- 2.1 安装docker-centos7
- 1、环境初始化
- 2、安装docker-ce
- 3、配置docker镜像加速器
- 2.2 安装docker-ubuntu22.04
- 1、安装
- 2、添加镜像加速
- 3、使用阿里源安装
1 Docker简介
在了解docker之前,先介绍几个常用的官方网站:
docker官网:https://docs.docker.com/
Docker的github地址:https://github.com/moby/moby
Dockerhub官网
https://registry-1.docker.io
如果docker官方registry拉取镜像速度很慢,可以尝试daocloud提供的加速器服务
https://dashboard.daocloud.io/mirror
1.1 容器跟虚拟机的区别
1、虚拟机是什么
虚拟机(Virtual Machines,简称VMs),虚拟机是一种模拟计算机系统的软件实现,它可以在物理服务器上模拟出多个独立的计算机环境。每个虚拟机都运行着完整的操作系统(如Windows、Linux等),并且可以运行任何为该操作系统设计的应用程序。
理解虚拟机的关键在于:
- 虚拟机提供了与物理机相似的计算环境,但它是虚拟的。
- 每个虚拟机都是独立的,拥有自己的操作系统、CPU、内存、存储和网络接口。
- 虚拟机之间是完全隔离的,一个虚拟机的任何操作都不会影响到其他虚拟机。
- 虚拟机提供了强大的灵活性和安全性,但相比容器,它们的启动和运行需要更多的时间和资源。
2、容器是什么
容器(Container)是一种轻量级的虚拟化技术,它允许在单个操作系统实例上运行多个隔离的应用程序。与虚拟机不同,容器共享宿主操作系统的内核,但拥有自己的文件系统、进程空间和网络接口。
理解容器的关键在于:
- 容器是轻量级的,因为它们不需要完整的操作系统,启动速度快,资源占用少。
- 容器提供了应用级别的隔离,而不是操作系统级别的隔离。
- 容器镜像包含了运行应用所需的所有依赖和配置,使得部署和复制变得快速和一致。
- 容器适合于微服务架构和快速迭代的开发环境,但它们通常不提供虚拟机那样的完全隔离。
可以将虚拟机想象成完整的房子,每个虚拟机都有自己的墙壁、地板、家具(操作系统和应用程序)等,它们是独立的,互不影响。而容器则像是公寓楼中的不同公寓,它们共享同一栋楼的基础结构(操作系统内核),但每个公寓内部有自己的房间布局(文件系统和应用程序)。
在实际应用中,选择虚拟机还是容器取决于自己的需求。如果需要运行不同操作系统的应用,或者需要完全的隔离和安全保障,虚拟机可能是更好的选择。如果追求快速部署、资源高效和易于管理,容器可能更适合。
3、容器和虚拟机的区别
容器(Containers)和虚拟机(Virtual Machines,简称VMs)都是现代计算环境中常用的技术,它们提供了在单个物理服务器上运行多个应用或服务的能力。尽管它们的目标相似,但它们在实现方式、性能和使用场景上有着显著的区别。
容器(Containers):
- 1.轻量级:容器直接运行在宿主操作系统上,共享宿主的内核,因此启动速度快,资源占用小。
- 2.隔离性:容器提供了应用级别的隔离,每个容器都有自己的文件系统、进程空间和网络接口,但它们之间是相互独立的。
- 3.快速部署:由于容器镜像包含了运行应用所需的所有依赖和配置,因此可以快速地部署和复制容器环境。
- 4.资源占用:容器通常比虚拟机更节省资源,因为它们不需要额外的操作系统和虚拟硬件。
- 5.可移植性:容器的可移植性较好,可以在不同的平台和环境中保持一致性。
- 6.性能:容器的性能接近原生应用,因为它们直接运行在宿主机的硬件上,没有虚拟化层的开销。
虚拟机(Virtual Machines):
- 1.完全隔离::虚拟机提供了操作系统级别的隔离,每个虚拟机都有自己的操作系统、应用程序和虚拟硬件。
- 2.安全性:虚拟机提供了更强的安全性,因为它们之间的隔离更加彻底,即使一个虚拟机出现问题,也不会影响到其他虚拟机。
- 3.资源分配:虚拟机可以分配独立的资源(CPU、内存、存储等),并且资源分配更加灵活。
- 4.启动时间:虚拟机的启动和运行速度通常比容器慢,因为它们需要加载完整的操作系统。
- 5.兼容性:虚拟机可以运行不同的操作系统,包括与宿主机不同的操作系统。
- 6.性能开销:虚拟机由于虚拟化层的存在,通常会有更高的性能开销。
容器和虚拟机各有优势和适用场景。容器适合于微服务架构、持续集成/持续部署(CI/CD)和快速扩展的应用场景,而虚拟机则更适合于需要完全隔离环境、运行不同操作系统或需要更多资源控制的场景。选择哪种技术取决于具体的应用需求、性能要求和安全考虑。
1.2 为什么要学习容器
在传统的生产环境中,一个Java 代码,需要编译打包,会打包成 war包或者jar包,然后安装环境并启动成功,就可以对外提供服务了(能正常访问页面,做操作)
没有用容器之前通常会出现如下问题:
- 1.开发环境没问题,测试环境报错---->排查后发现是启动脚本里jdk版本跟代码要求的版本不匹配
- 2.测试环境没问题,生产环境报错 -->排查发现是tomcat版本和jdk版本不匹配。
在实际中,开发、运维、测试的环境各负责人不同,有可能服务在开发环境正常运行,但是在测试环境就不行。排查之后发现是环境的问题,如:jdk版本和实际代码中的版本不一致。
如果使用容器,会把 应用程序、所需的环境、相关依赖等整体进行打包成一个镜像。这个打出来的包叫做镜像。 镜像运行时叫做容器。使用镜像可以很方便的做迁移,备份,存储,交付。
打包之后的镜像有这样的特点:
- 1.环境的强一致性。docker镜像提供了除内核外完成的运行时环境,保证其他使用人员,能完整复现应用运行时环境。不会出现“环境不一致导致报错“这种情况。
- 2.迁移方便,持续交付和部署。一次打包,到处运行。
1.3 Docker 是什么
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在GitHub 上进行维护。
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何支持docker的机器上运行。容器是完全使用沙箱机制,相互之间不会有任何接口调用。
Docker logo:
Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被装在集装箱里,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送蔬菜的船和专门运送货物的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。
docker就是类似的理念。云计算就好比大货轮。docker就是集装箱。
docker有两种版本:docker-ce:社区版 和 docker-ee: 商业版(多用于没有技术人员)
docker的特点:
- 优点:
- 1)快:运行时的性能快,管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的。
- 2)敏捷:像虚拟机一样敏捷,而且会更便宜,在bare metal(裸机)上布署像点个按钮一样简单。
- 3)灵活:将应用和系统“容器化”,不添加额外的操作系统
- 4)轻量:在一台服务器上可以布署100~1000个Containers容器。
- 5)便宜:开源的,免费的,低成本的。
- 缺点:
- 所有容器共用linux kernel资源,资源能否实现最大限度利用是不确定的,所以在安全上也会存在漏洞(对于这种情况可以使用扫描软件进行漏洞扫描等)
2 Docker安装
2.1 安装docker-centos7
环境:centos7.9
IP:192.168.216.10
1、环境初始化
# 设置主机名
hostnamectl set-hostname master
#### 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
#### 关闭selinux
# 临时关闭
setenforce 0
# 永久关闭
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# 注意:修改selinux配置文件之后,重启机器,selinux才能永久生效
# 重启后查看,显示disabled则表示关闭成功
getenforce
#### 配置时间同步,也可以使用ntpdate命令来进行时间同步
yum install chrony -y
## 修改配置文件
cat /etc/chrony.conf
# 新加
allow 192.168.0.0/16
local stratum 10
systemctl restart chrony.service
systemctl enable chrony.service
systemctl status chronyd.service
### ntpdate时间同步
# yum install -y ntp ntpdate
# ntpdate cn.pool.ntp.org
# 编写计划任务
crontab -e
* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
# 重启crond服务使配置生效:systemctl restart crond
##配置时区
timedatectl set-timezone Asia/Shanghai
#### 安装基础软件包
yum install -y wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack
2、安装docker-ce
此处使用阿里源进行安装
# 1、安装必要的一些系统工具
yum install -y yum-utils device-mapper-persistent-data lvm2
# 2、添加软件源信息
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 3、
sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# 4、更新并安装Docker-CE,此处安装的是最新版本的docker-ce
yum makecache fast
yum -y install docker-ce
# 5、开启Docker服务,并设置开机自启动
systemctl start docker.service && systemctl enable docker.service
# 查看docker的状态,正常状态显示在下图
systemctl status docker.service
# 查看docker版本
docker version
# 注意:
# 官方软件源默认启用了最新的软件,可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
# 将[docker-ce-test]下方的enabled=0修改为enabled=1
#
# 安装指定版本的Docker-CE:
# 1、查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
# Loading mirror speeds from cached hostfile
# Loaded plugins: branch, fastestmirror, langpacks
# docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
# docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable
# docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
# Available Packages
# 2、安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# yum -y install docker-ce-[VERSION]
显示如下表示正常启动:
3、配置docker镜像加速器
登陆阿里云镜像仓库:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
如果没有开通,可开通阿里云的镜像服务
直接进行粘贴就可以,也可以使用下面的配置
mkdir -p /etc/docker
cat >> /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://e9v5y0sc.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"]
}
EOF
# 使配置生效
systemctl daemon-reload
systemctl restart docker
systemctl status docker
下面是常用的镜像加速列表:(不过此处需要注意的是:自从七月docker hub无法登录之后,很多镜像加速站也失效了,下方也可能已经失效了)
2.2 安装docker-ubuntu22.04
1、安装
以下这种方式适用于服务器可以联通到 docker 官方地址。如果无法连到官方,可以使用国内源进行安装,参考下面的阿里源安装
# 切换到 root 用户安装
sudo -i
# 更新
sudo apt update
# 安装必要的证书并允许 apt 包管理器使用以下命令通过 HTTPS 使用存储库:
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
# 说明:
# apt-transport-https:允许APT通过安全的HTTPS连接下载软件包
# ca-certificates:包含了一系列的SSL/TLS证书,用于验证远程服务器的身份
# curl:用于获取或发送数据到服务器。它支持多种协议,包括HTTP、HTTPS、FTP等。curl常用于自动化脚本中,进行文件上传下载、API调用等任务
# software-properties-common:包含管理软件包仓库和版本管理的工具
# gnupg:提供了数据加密和解密的工具
# lsb-release:提供了查询Linux标准基础(Linux Standard Base)版本信息的工具。
# 运行下列命令添加 Docker 的官方 GPG 密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加 Docker 官方库:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 更新 Ubuntu 源列表:
sudo apt update
# 安装指定版本的docker
# 检查可以安装的docker版本库
apt-cache madison docker-ce
###########
docker-ce | 5:26.0.0-1~ubuntu.22.04~jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:25.0.5-1~ubuntu.22.04~jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
# 挑选上面列表中的任何版本进行安装
# 在安装过程中,会出现弹窗,可以直接选择“OK”,后续会进行介绍
sudo apt install docker-ce=5:20.10.16~3-0~ubuntu-jammy docker-ce-cli=5:20.10.16~3-0~ubuntu-jammy containerd.io -yq
# 也可以直接安装最新版本
# sudo apt install docker-ce
# 这里需要注意的是:Ubuntu系统和CentOS系统不同,Ubuntu系统安装软件之后会默认启动
# 查看docker是否运行
systemctl status docker
# 查看版本
docker version
###############
Client: Docker Engine - Community
Version: 20.10.16
API version: 1.41
Go version: go1.17.10
Git commit: aa7e414
Built: Thu May 12 09:18:18 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.16
API version: 1.41 (minimum version 1.12)
Go version: go1.17.10
Git commit: f756502
Built: Thu May 12 09:16:22 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.28
GitCommit: ae07eda36dd25f8a1b98dfbf587313b99c0190bb
runc:
Version: 1.1.12
GitCommit: v1.1.12-0-g51d5e94
docker-init:
Version: 0.19.0
GitCommit: de40ad0
2、添加镜像加速
添加方式同上面centos,注意这里记录了几个目前还可以用的镜像加速地址
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://uyah70su.mirror.aliyuncs.com"]
}
EOF
# 使配置生效
systemctl daemon-reload
systemctl restart docker
systemctl status docker
## 最新镜像加速地址
### 2024-07-22
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://docker.m.daocloud.io","https://dockerpull.com","https://atomhub.openatom.cn","https://docker.1panel.live","https://dockerhub.jobcher.com","https://hub.rat.dev","https://docker.registry.cyou","https://docker.awsl9527.cn","https://do.nark.eu.org/","https://docker.ckyl.me","https://hub.uuuadc.top","https://docker.chenby.cn","https://uyah70su.mirror.aliyuncs.com"]
}
EOF
3、使用阿里源安装
如果无法连到官方,可以使用国内源进行安装,这里以阿里源为例:
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
# sudo apt-get -y install docker-ce
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
# docker-ce | 17.03.1~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# docker-ce | 17.03.0~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]