文章目录
- Docker
- Docker 镜像与容器的差异
- Docker的好处
- Hypervisor
- 运维
- 一、安装docker
- 二、启动docker
- 三、获取docker镜像
- 四、创建镜像
- 使用命令行创建镜像
- 使用dockerfile创建镜像
- 五、docker报错
Docker
-
docker镜像(Image)
docker镜像类似于虚拟机镜像,可以将其理解为一个只读模板。除了提供容器运行时所需的程序、库、资源、配置等文件外,docker镜像还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
镜像是创建docker容器的基础,它可以通过版本管理和增量的文件系统,如Docker Hub。 -
docker容器(container)
docker容器(container)类似于轻量级的沙箱,docker利用容器来运行和隔离应用。
容器是从镜像创建的应用运行实例, 可以将其启动、开始、停止、删除,但是所有的容器是相互隔离的,互不可见的,这就提供了一个实体机可以安装多个容器,且很轻量级相对于虚拟机。镜像本身是只读的,容器从镜像启动的时候,docker会在镜像的最上层创建一个可写层,镜像本身保持不变。 -
docker仓库(repository)
docker仓库(repository)类似于代码库,是docker集中存放镜像的场所。 实际上,注册服务器是存放仓库的地方,其上往往存放着很多仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。
根据存储的镜像公开分享与否,docker仓库可以分为公开仓库(Public)和私有仓库(Private)两种形式。目前,最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载,国内的公开镜像包括Docker Pool,可以提供稳定的国内访问,与GitHub类似。 -
Dockerfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明
Docker 镜像与容器的差异
Docker 容器和镜像是 Docker 技术中两个不同的概念,它们代表了不同的层次和功能。
-
Docker 镜像:
- Docker 镜像是 Docker 容器的基础。它是一个包含了应用程序运行所需的一切的只读模板。镜像可以包含操作系统、运行时环境、应用程序代码、依赖关系和配置等。镜像是通过 Docker 镜像构建命令(比如
docker build
)或者从 Docker Hub 等镜像仓库中下载的。 - 镜像的特点是不可更改和只读的,它可以被用来创建多个可运行的 Docker 容器。镜像是多层存储结构,每个层都可以复用和共享,这使得镜像可以高效地分发和部署。
- Docker 镜像是 Docker 容器的基础。它是一个包含了应用程序运行所需的一切的只读模板。镜像可以包含操作系统、运行时环境、应用程序代码、依赖关系和配置等。镜像是通过 Docker 镜像构建命令(比如
-
Docker 容器:
- Docker 容器是由 Docker 镜像创建的可运行实例。容器是在镜像层之上(镜像是只读的),添加一个可写的容器层。容器可以被启动、停止、删除和重新启动。每个容器都是相互隔离的,具有自己的文件系统、网络和进程空间。容器可以在不同的主机和不同的 Docker 引擎中运行,具有高度的可移植性和可复制性。
- 容器通常用来运行单个应用程序或者服务,每个容器都有自己的运行环境和运行时配置。
总结来说,Docker 镜像是一个只读的模板,用于创建 Docker 容器。镜像具有不变性和可重用性的特点。而容器是由镜像创建的可运行实例,具有自己的文件系统和运行环境,通常用于运行应用程序或者服务。在 Docker 中,镜像与容器之间是父子关系,镜像是容器的基础。
Docker的好处
-
更便捷的应用交付和部署
-
更便捷的升级和扩缩容
-
更简单的系统运维
-
更高效的计算资源利用
Hypervisor
Hypervisor(虚拟机监视器)是一种软件、硬件或者组合形式,用于虚拟化计算机资源,并管理多个虚拟机的创建、运行和监控。
Hypervisor可以分为两种类型:
-
Type 1 Hypervisor(裸金属/直接运行型):直接运行在物理硬件上,也称为裸金属或裸机型Hypervisor。它具有更高的性能和直接的硬件访问能力。Type 1 Hypervisor负责管理裸机资源,将其划分为多个虚拟机,每个虚拟机可以运行自己的操作系统。常见的Type 1 Hypervisor有VMware ESXi和Microsoft Hyper-V。
-
Type 2 Hypervisor(主机操作系统运行型):运行在主机操作系统之上,也称为主机型Hypervisor。Type 2 Hypervisor在主机操作系统上创建和管理虚拟机,并提供对虚拟机的资源分配和监控。它通常用于开发和测试环境。常见的Type 2 Hypervisor有VMware Workstation和Oracle VirtualBox。
Hypervisor的主要功能包括:
- 资源虚拟化:将物理计算机的CPU、内存、存储等资源划分成多个虚拟机,并为每个虚拟机提供一定的资源配额。
- 虚拟机管理:创建、启动、停止和删除虚拟机,提供虚拟机的管理接口和操作。
- 资源调度:根据虚拟机的需求和主机资源的可用性,动态调整资源分配,以实现更好的性能和利用率。
- 安全隔离:对不同虚拟机之间提供隔离性,确保一台虚拟机的故障或安全问题不影响其他虚拟机。
- 监控和报告:监控虚拟机的性能指标、资源利用率和运行状态,并生成报告或提供警报。
Hypervisor的作用是实现虚拟化技术,使得一台物理计算机能同时运行多个虚拟机,并将它们隔离开来,从而提供更高的资源利用率、灵活性和可靠性。它是构建虚拟化环境和云计算基础设施的关键组件之一。
运维
运维,全称为运营和维护(Operations and Maintenance),是指对计算机系统、网络设施以及软件应用进行有效运行和稳定维护的工作。
在信息技术领域中,运维是一项重要的工作,它涵盖了硬件设备、网络设施、操作系统、数据库、服务器等各个方面。运维人员负责监控系统运行状态、处理系统故障、进行性能优化、部署更新和维护安全等工作。Docker
是运维人员部署项目的高效工具。
一、安装docker
查看centos版本信息,centos7
以上已内置docker
安装比较方便,参考
cat /etc/redhat-release
centos 7
下安装docker
# 安装Docker所需的一些依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 安装最新版本的Docker
sudo yum install docker-ce docker-ce-cli containerd.io
在sudo yum install -y docker
这条命令中,-y
是一个命令行选项,表示在安装过程中自动应答"yes"到所有的确认提示。
这个选项对于在服务器环境中使用尤其有用,因为在这种环境中,可能需要进行大量的包安装和配置,如果每次都手动确认,会非常麻烦。使用-y
选项可以自动应答所有的确认提示,大大简化操作。
启用并启动Docker服务
sudo systemctl enable docker
sudo systemctl start docker
验证docker
是否安装成功
docker run hello-world
# 或者
sudo docker --version
二、启动docker
启动Docker服务,并设置为开机启动
systemctl start docker.service
systemctl enable docker.service
如果启动docker
失败,可以先卸载再重装
查看docker
的版本
docker version
修改镜像网址
创建daemon
文件
vi /etc/docker/daemon.json
输入一下内容
{ "registry-mirrors":["https://registry.docker-cn.com"],
"live_restrore":true}
然后esc
键返回,并输入:wq
保存退出文件
重启docker
,并验证镜像是否安装成功
systemctl restart docker
docker search redis
三、获取docker镜像
将image文件从仓库下载到本地, pull获取镜像,library对应的文件组
docker pull library/hello-world
获取目标image_name
镜像
docker pull image_name
下载centos7镜像,:7
指定了对应的centos
版本:
docker pull centos:7
下载python3.9镜像
docker pull python:3.9
查看已有镜像,Docker镜像保存在/var/lib/docker
目录下
docker images
运行hello-world
镜像
docker run hello-world
修改本地镜像名字(小写)
docker tag centos:7 mycentos:1
删除仓库为 docker.o/tomcat
, 标签为7.0.77-jre7
的镜像
docker rmi docker.io/tomcat:7.0.77-jre7
删除镜像ID为b39c68b7af30的镜像
docker rmi b39c68b7af30
本地镜像的删除
docker rmi centos:7
查看正在运行的容器
docker ps
查看所有容器,无论是否正在运行
docker ps -a
CONTAINER ID
:容器的唯一表示ID。
IMAGE
:创建容器时使用的镜像。
COMMAND
:容器最后运行的命令。
CREATED
:创建容器的时间。
STATUS
:容器状态。
PORTS
:对外开放的端口。
NAMES
:容器名。可以和容器ID一样唯一标识容器,同一台宿主机上不允许有同名容器存在,否则会冲突。
根据已有的镜像创建容器
docker run -it --name=c2 centos:7
启动python3.9
docker run -it --name=python3.9 python:3.9
参数的解释:
-i
表示让容器的标准输入保持打开
-t
表示为容器重新分配一个伪输入终端
--name
表示为创建出来的容器起一个名称,名称为c2
centos
表示根据镜像的名称
注意:这种方式表示前台运行容器,退出终端之后,容器会关闭,退出之前可以在xshell中打开另个一终端来查看目前正在运行的容器
退出终端之后,可以再次查看,看看容器是否关闭
如果需要在后台启动容器,可以加上参数-d
命令如下:
docker run -d --name=c3 centos:7
但是只加-d 不加-it会导致启动成功之后,容器就直接关闭,所以后台启动的时候通常都是使用-itd的方式运行容器
docker run -itd --name=c3 centos:7
例子
docker run -p localhost:3307:3306 --name scrapersql --privileged=true \
-v /database/mysql:/var/lib/mysql \
-e "MYSQL_ALLOW_EMPTY_PASSWORD=true" \
-d mysql:5.7
说明
localhost
的3307端口上创建一个MySQL服务,并将其映射到主机的3306端口
--name
设置镜像名字
-v
将主机上的 /database/mysql
目录挂载到容器内的 /var/lib/mysql
目录
退出容器
-e
:该选项用于设置环境变量。-e "MYSQL_ALLOW_EMPTY_PASSWORD=true"
表示在容器中设置一个环境变量MYSQL_ALLOW_EMPTY_PASSWORD
,并将其值设置为true
。这个环境变量的作用是允许空的MySQL密码
exit
设置端口号
docker run -itd -p 8081:8080 tomcat
8081
指的是宿主机的端口
8080
指的是容器里面tocmat的端口号
-p
表示端口号参数
从客户机上访问容器,需要有端口映射,docker容器默认采用桥接模式与宿主机通信,需要将宿主机的ip端口映射到容器的ip端口上;
桥接模式,也就是将虚拟机的虚拟网络适配器与主机的物理网络适配器进行交接,虚拟机中的虚拟网络适配器可通过主机中的物理网络适配器直接访问到外部网络。简而言之,这就好像在局域网中添加了一台新的、独立的计算机一样。因此,虚拟机也会占用局域网中的一个 IP 地址,并且可以和其他终端进行相互访问。
查看容器的详细信息
docker inspect container_id/container_name
查看容器的日志信息
docker logs container_id/container_name
如果提示FileNotFoundException 则有可能是 容器目录下的conf文件夹没有权限 可以使用 chmod -R递归设置权限
从宿主机复制到容器:docker cp 宿主机本地路径 容器名字/ID:容器路径
docker cp /root/123.txt mycentos:/home/
# 在/root目录下创建mysql目录用于存储mysql数据信息
mkdir ~/mysql
cd ~/mysql
docker run -id \
-p 3366:3306 \
--name=c_mysql \
-v /opt/mysql/conf:/etc/mysql/conf.d \
-v /opt/mysql/logs:/logs \
-v /opt/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:5.7
参数说明:
-p 3366:3306**:将容器的 3306 端口映射到宿主机的 3307 端口。
-v etc/conf:/etc/mysql/conf.d**:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。配置目录
-v etc/logs:/logs**:将主机当前目录下的 logs 目录挂载到容器的 /logs。日志目录
-v etc/data:/var/lib/mysql** :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。数据目录
-e MYSQL_ROOT_PASSWORD=root:**初始化 root 用户的密码。
启动容器
docker start container_name/container_id
停止容器
docker stop container_name/container_id
重启容器
docker restart container_name/container_id
启动容器后,进入到容器内部
docker attach container_name/containere_id
删除容器
docker rm container_name/container_id
查看当前系统docker信息
docker info
获取最新的centos
镜像
docker pull centos:latest
查看镜像信息
sudo docker images
查看docker信息
docker info
docker exec -it xxxxx bash
docker exec -it xxxxx bash
,这是用于在运行的 Docker 容器中打开一个交互式终端(bash shell)的命令。
docker exec
:这是 Docker 命令行工具中用于在运行的容器中执行命令的命令。-it
:这是两个选项的结合,-i
代表 interactive(交互式),-t
代表 tty(终端)。这两个选项一起使用,允许你在容器中运行一个交互式命令行会话。xxxx
:这是你要在其内部运行命令的 Docker 容器的 ID 或名称。你需要用你实际的容器 ID 或名称替换xxxx
。bash
:这是你要在容器中运行的命令。在这个例子中,我们正在请求 Docker 在容器中启动一个 bash shell。因此,整个命令的意思是:“在运行的容器 xxxx 中启动一个交互式的 bash shell。”
mysql
create database `scraping` default character set utf8mb4;
create database `projectdb` default character set utf8mb4;
create database `taskdb` default character set utf8mb4;
create database `resultdb` default character set utf8mb4;
quit
通过上述命令进入mysql
docker build -t scraper:latest . # 注意后面的点.
命令 docker build -t scraper:latest .
用于在Docker环境中构建一个新的镜像,并将其标记为 scraper:latest
。如果你要运行的程序在Dockerfile中已经定义好了,那么这条命令会从Dockerfile开始构建,然后创建一个包含你程序的新镜像。
如果在运行这个命令时遇到了问题,以下是一些可能的原因:
- Dockerfile不存在或者不在当前目录。你需要确保你在包含Dockerfile的目录下运行这个命令,或者使用
-f
参数来指定Dockerfile的位置。 - Docker环境没有正确安装或者配置。你可以通过
docker --version
来检查Docker是否正确安装并运行。 - 网络问题。在某些情况下,网络问题可能会阻止Docker从Internet下载需要的文件。如果可能的话,尝试更换网络环境或者使用VPN。
- Dockerfile有错误或者不完整。你需要检查你的Dockerfile以确保其正确性。
四、创建镜像
使用命令行创建镜像
docker commit
命令用于根据 Docker容器 的更改创建一个新的 Dokcer镜像。该命令后面的 CONTAINER
可以是容器Id,或者是容器名。
docker commit 容器id 镜像名称:版本号
docker save
用来将一个或多个image打包保存。如:将本地镜像库中的image1和image2打包到images.tar中
docker save -o 压缩文件名称 镜像名称:版本号
docker save -o images.tag image1:v1 image2:v1
docker load
用于将打包的tar中包含的镜像load到本地镜像库,但不能重命名其中的镜像名。
docker load –i 压缩文件名称
docker load -i images.tar
使用dockerfile创建镜像
dockerfile
FROM centos:7 #定义父镜像
MAINTAINER yjf #定义作者信息
RUN yum install -y vim # 执行安装vim命令
WORKDIR /opt # 定义默认的工作目录
CMD /bin/bash # 定义容器启动执行的命令
通过dockerfile构建镜像
docker build -f my_dockerfile -t xxx:7
五、docker报错
ERROR
【docker】报错:Got permission denied while trying to connect to the Docker daemon socket at unix:///var/
需要使用root
权限
ERROR
docker pull mysql 报missing signature key错误
如果安装docker用的是yum install docker命令的话,下载下来的docker版本未旧版本,所有数字签名有问题
https://blog.csdn.net/Single_for_life/article/details/133653113
su root
https://www.php.cn/faq/506200.html
https://www.modb.pro/db/586199
https://www.bilibili.com/read/cv22443043/
https://blog.csdn.net/m0_73409141/article/details/131425285
https://worktile.com/kb/ask/30572.html
https://blog.csdn.net/swadian2008/article/details/109518783
https://blog.csdn.net/qq_47614329/article/details/130387532
https://blog.csdn.net/weixin_41384860/article/details/128819642
https://blog.51cto.com/u_16099211/6314870