Docker

系统应用不能相互调用

Docker是如何解决不同系统之间的环境问题(函数库不同)

  • Docker将用户程序和所需要的函数库(如Ubuntu)函数一起打包
  • Docker运行到不同的操作系统时候(只要是基于Linux内核的)直接越过操作系统借助Linux内核执行

Docker与虚拟机

Hypervisor:模拟出硬件

image-20230413215356961

镜像和容器:

镜像:Docker将应用程序所需要的依赖,函数库,环境和配置文件等文件打包在一起,成为镜像

容器:镜像中的应用程序运行后形成的进程就是容器,只是Docker对容器进行隔离,对外不可见

docker架构

守护进程:什么是守护进程?

守护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。

守护进程是个特殊的孤儿进程,这种进程脱离终端,为什么要脱离终端呢?之所以脱离于终端是为了避免进程被任何终端所产生的信息所打断,其在执行过程中的信息也不在任何终端上显示。由于在 Linux 中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭。

(防止关闭终端就挂逼了)

Docker是一个CS架构的程序,由两部分组成:

  • 服务端:Docker守护进程,负责处理Docker指令,管理镜像,容器等
  • 客户端:通过命令或者 RestApI想Docker服务端发送命令。可以在本地或者远程服务端发送
  • image-20230413220322602

Docker命令

1
2
3
4
5
6
7
8
9
systemctl start docker  # 启动docker服务

systemctl stop docker # 停止docker服务

systemctl restart docker # 重启docker服务

systemctl status docker # 查看docker状态

docker -v #查看docker是否启动,有版本就对了

镜像相关命令

镜像名称image-20230413222057624

1
2
3
4
5
6
7
8
9
docker images #查看镜像
docker rmi # 删除镜像
docker push # 提交镜像到服务器
docker save # 保存镜像生成压缩包
docker load -i 路径 #读出 你打出的压缩包形成镜像
docker pull # 拉取镜像
docker build # 构建镜像
docker --help
docker image --help

创建容器

端口映射:

1
2
3
4
5
6
docker run : #创建一个容器
--name : #给容器起一个名字,比如叫做mn
-p : # 将宿柱苣端口与容器端口映射,左宿主机 右容器端口
-d : # 后台运行
nginx : 镜像名称
docker ps: 查看容器状态

进入容器:

1
2
3
4
docker exec: #进入容器内部,执行一个命令
-it: # 给容器创建一个标准的输入输出流
mn : # 要进入的容器名称
bash: # BASH是一个linux终端交互命令
1
docker run --name mr(名称) -p 6379:(容器内端口)6379 -d(后台运行) redis redis-server --appendonlu yes(aop的持久化)

进入容器:

1
2
3
docker exec -it mr bash
redis-clis(控制)
docker exec it mr redis-cli

停止:docker stop mn

**启动: **docker start mn

强制删除:docker rm -f mn

数据卷

指向宿主机的某个目录

image-20230414210727184

docker volume 二级命令

创建时候挂载

image-20230414211102425

直接挂载image-20230414211137938

集群部署

**DockerCompose:**无需手动一个一个创建运行,快速部署

compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行