左璞凡的博客

日出之美便在于它脱胎于最深的黑暗

0%

Docker

[Docker]

概述

  • 开源的应用容器引擎
  • 容器是完全使用沙箱机制,相互隔离
  • 可打包应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上
  • 容器性能开销极低

架构

image-20231018173551081

命令

服务相关命令

1
2
3
4
5
6
7
8
9
10
//启动
systemctl start docker
//停止
systemctl stop docker
//重启
systemctl restart docker
//查看
systemctl status docker
//设置开机启动
systemctl enable docker

容器相关命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//查看
docker ps -a
//创建
doker run -i -t --name=cl centos:7 /bin.bash
//后台运行创建
docker run -id --name=cl centos:7
//进入
docker exec -it c2 /bin/bash
//启动
docker start c2
//删除
docker rm c1
//查看信息
docker inspect c2
//停止
docker stop c2

容器数据卷

概念

  • 数据卷是宿主机中的一个目录或文件
  • 当容器目录和数据卷目录绑定之后,对方的修改就会立即同步
  • 一个数据卷可以被多个容器同时挂载
  • 一个容器也可以被挂载多个数据卷

作用

  • 容器数据持久化
  • 外部机器和容器间接通信
  • 容器之间数据交换

image-20231018174009634

配置数据卷

  • 创建启动容器的时候,是同-v参数设置数据卷
1
docker run ... -v 宿主机目录:容器内目录
  • 注意
    1. 绝对路径
    2. 目录不存在会自动创建
    3. 可以挂载多个数据卷

配置数据卷容器

1
2
3
4
5
//创建启动c3数据卷容器
docker run -it --name=c3 -v /volume centos:7 /bin/bash
//创建启动c1 c2容器,使用
docker run -it --name=c1 --volume-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volume-from c3 centos:7 /bin/bash

Dockerfile

Dockerfile概念

  • Dockerfile是一个文本文件
  • 包含一条条指令
  • 每条指令构建一层,基于基础镜像,最终构建出一个新的镜像

Docker镜像原理

  • Docker镜像由特殊的文件系统叠加而成
  • 最低端是bootfs,并使用宿主机的bootfs
  • 第二层是root文件操作系统rootfs,称为base image
  • 在往上可以叠加其他的镜像文件
  • 统一文件系统技术能够将不同的层整合成一个文件系统,为这些层提供一个统一的视角,这样就隐藏了多层的存在.
  • 一个镜像可以放在另一个镜像的上面.位于下面的镜像成为父镜像,最底部镜像成为基础镜像
  • 当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器

镜像制作

容器转为镜像

1
2
3
docker commit 容器id 镜像名称:版本号
docker save -o 压缩文件名称 镜像名称:版本号
docker load -i 压缩文件名称

Docker服务编排

微服务架构的应用系统中一般包含若干个微服务,每个微服务一般部署多个实例,每个微服务都要手动启停,维护的工作量很大

服务编排

按照一定的业务规则批量管理容器

DockerCompose

一个编排多容器分布式部署的工具.提供命令集管理容器化应用的完整开发周期,包括构建,启动和停止

步骤

  1. 利用dockfile定义运行环境
  2. 使用docker-compose.yml定义组成应用的各个服务
  3. 运行docker-compose up 启动应用

Docker私有仓库

搭建

image-20231018174619830

将镜像上传至私有仓库

image-20231018174705814

拉取镜像

image-20231018174742001