Docker

Docker
caolibinDocker
1.简介
官方介绍
一个为增强开发而设计的强大平台
Docker 的一系列集成工具为构建、安全管理和部署容器化应用程序提供了一站式解决方案。快速的本地开发、安全的镜像管理以及基于云的构建——这一切都包含在一个为现代软件开发设计的平台中。
总之,docker可以帮我们快速部署项目
2.安装
1.卸载旧版
|
2.设置仓库
安装工具
|
添加docker的官方仓库
|
3.安装docker
|
4.启动
启动docker
|
设置开机自启
|
5.镜像加速
[!warning]
目前国内一些大厂和大学的docker镜像加速由于某种不知名原因基本全部失效,想要配置镜像加速可以自行搜索国内任然可用的加速网站,
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.1panel.dev"
]
}
3.快速开始
1.相关概念
镜像
镜像(Image)是一个只读的模板,包含了运行应用程序所需的所有文件和配置,镜像类似于虚拟机的镜像,是一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器
容器
容器是镜像的运行实例,类似于虚拟机,可以执行启动、停止、删除等操作。每个容器间是相互隔离的。
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。
简单来说,镜像运行起来就是容器
2.相关命令
命令图解
run
|
命令解释:
docker run
:通过镜像创建并启动一个新的容器,如果没有镜像,会自动去dockerhub下载对应镜像
-d
:以守护进程模式(后台模式)启动容器,容器在后台运行,不会阻塞当前的命令行
--name mysql-container
:指定容器的名称为mysql-container
,可以在后续操作中通过该名称引用容器
-e MYSQL_ROOT_PASSWORD=root_password
:通过环境变量MYSQL_ROOT_PASSWORD
设置 MySQL 的根用户密码为root_password
,不同的镜像有不同的环境变量
-p 3306:3306
:端口映射,-p 宿主机端口:容器端口,因为容器是隔离的,运行起来的mysql服务无法从外部访问,将容器端口映射到宿主机端口,访问宿主机端口3306就能访问容器中的mysql,[!warning]
一个宿主机端口只能一个容器映射,如果运行了多个mysql容器,需要映射到其他端口
-p 3307:3306
mysql
:镜像名,指明你要部署什么容器(mysql、redis、nginx等),完整写法为image:tag,例如mysql:5.7
,指明使用哪个镜像的哪个版本,如果版本省略不写,默认使用最新版本,相当于mysql:latest
pull
从 docker hub 拉取镜像到本地
|
images
|
查看本地下载的镜像
rmi
删除镜像,注意:如果有容器依赖该镜像正在运行,则不能直接删除
|
rm
|
删除容器,想删除运行中的容器添加 -f
参数强制删除
save
保存镜像到压缩文件,-o nginx.tar
表示输出到 nginx.tar 压缩包
|
load
从压缩包加载成镜像文件 -i nginx.tar
表示从 nginx.tar 文件读入
|
ps
查看正在运行的容器,添加 -a
参数查看所有容器
start
启动容器,restart
命令用于重启容器,也可以启动容器
stop
停止容器
logs
|
查看容器的日志,添加 -f
参数可以持续监听日志
exec
|
进入容器执行命令,一个容器类似于一个linux系统,第二个参数指明使用什么命令进行初始化
4.数据卷
1.概述
Docker 数据卷(Volumes) 是一种持久化存储机制,用于保存和共享容器中的数据。挂载数据卷的主要目的是确保容器重启或重新创建时,数据不会丢失。使用数据卷,你可以将容器内部的数据存储在宿主机上或共享给多个容器使用。
将容器中的数据、配置等文件夹挂载到宿主机上某个文件夹,容器中并不保存数据和配置
在容器中直接修改文件很不方便,尽管容器模拟的是一个linux系统,但是为了使体积更小一般只提供容器所需要的环境(甚至vi命令都没有),利用数据卷挂载,我们可以在宿主机上方便地修改文件,容器会使用宿主机上的文件
2.挂载
使用docker run
命令运行容器时,添加 -v [宿主机目录/路径]:[容器内目录]
参数使用数据卷挂载
容器内目录可以根据对应的镜像官方文档进行配置
宿主机目录可以自己指定
- 数据卷挂载:只指定目录,则文件夹会被放在
/var/lib/docker/volumes/{目录}/_data
下 - 绑定挂载:如果指定了具体路径,则使用你指定的路径
- 数据卷挂载:只指定目录,则文件夹会被放在
只指定了目录,最终宿主机目录路径为 /var/lib/docker/volumes/html/_data
|
指定路径,最终宿主机目录即为你指定的目录
|
docker volume ls
: 查看所有数据卷docker volume rm [数据卷]
: 删除数据卷docker inspect [数据卷]
: 查看数据卷信息docker volume prune
: 删除所有未使用的数据卷
下图查看了挂载的html文件夹路径,并在宿主机上修改,修改后的服务器页面内容发生变化,因为容器使用的就是宿主机上的文件
示例:对mysql配置、数据、初始化目录分别挂载
|
[!important]
这样做有什么用?挂载到宿主机上的目录可以持久化,即使容器被删除了,只要重新创建一个容器,同样挂载这三个文件夹,这个新的容器就能立刻恢复为之前的mysql数据库的状态