什么是Docker和Docker-Compose?

发布于:2023-09-15 ⋅ 阅读:(64) ⋅ 点赞:(0)

Docker的构成

  1. Docker仓库:https://hub.docker.com

  2. Docker自身组件

    Docker Client:Docker的客户端
    Docker Server:Docker daemon的主要组成部分,接受用户通过Docker Client发出的请求,并按照相应的路由规则实现路由分发
    Docker镜像:Docker镜像运行之后变成容器(docker run)

Docker的基本组成

  • 镜像
    Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。
  • 容器
    Docker 利用容器(Container)独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。就像是Java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
  • 仓库
    仓库(Repository)是集中存放镜像文件的场所。仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
    最大的公开仓库是 Docker Hub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云等。
    docker镜像文件类似于Java的类模板,而docker容器实例类似于java中new出来的实例对象。

镜像的特性

在这里插入图片描述
在这里插入图片描述
当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有镜像层都是只读的。

docker基础命令

systemctl start docker 启动docker
systemctl stop docker 停止docker
systemctl restart docker 重启docker
systemctl status docker 查看docker状态
systemctl enable docker 开机启动
docker info 守护进程的系统资源设置
docker search 镜像名称 docker仓库的查询
docker pull 镜像名称 下载docker仓库
docker images docker镜像的查询
docker rmi 镜像名称id docker镜像的删除
docker ps 容器的查询
docker run 镜像名称+版本号 (docker run mysql:8.0.29)容器的创建启动
docker start/stop 容器启动停止

systemctl 是管理 Linux 的 systemd 服务的工具,systemctl 只能用于linux系统。

run命令扩展

在这里插入图片描述

单一容器管理

每个容器被创建后,都会分配一个CONTAINER ID作为容器的唯一标示,后续对容器的启动、停止、修改、删除等所有操作,都是通过CONTAINER ID来完成偏向于数据库概念中的主键。

docker ps --no-trunc 查看
docker start/stop CONTAINER ID 启动/停止
docker start/stop wordPress 通过容器别名启动/停止
docker kill 容器id或容器名 强制停止容器
docker rm 容器id 删除已停止的容器
docker inspect wordPress 查看容器所有基本信息
docker logs wordPress 查看容器日志
docker stats wordPress 查看容器所占用的系统资源
docker exec 容器名 容器内执行的命令 容器执行命令
docker exec -it 容器名 /bin/bash 登入容器的bash(我们可以使用该命令来创建mysql数据库,如下所示)

在这里插入图片描述

docker-compose编排

compose是docker公司推出的一个工具软件,可以管理多个Docker容器组成一个应用。需要定义一个yaml格式的配置文件docker-compose.yaml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器

compse的核心概念

  • 一个文件:docker-compose.yaml
  • 两个要素:
    • 服务:一个个应用容器实例,比如订单微服务,redis容器,mysql容器。
    • 工程:由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yaml文件中定义。

三个步骤

  • 编写Dockerfile定义各个微服务应用并构建出对应的镜像文件
  • 使用docker-compose.yml定义一个完整的业务单元,按照先后顺序安排好整体应用中的各个容器服务
  • 最后,执行docker-compose up命令来启动并运行整个应用程序,完成一键部署上线

compse常用命令

docker-compse -h 查看帮助
docker-compse up 启动所有docker-compose服务
docker-compse up -d 启动所有docker-compose服务并后台运行
docker-compse down 停止并删除容器、网络、卷、镜像
docker-compse start 启动服务
docker-compse pause 暂停服务
docker-compse unpause 恢复暂停
docker-compse rm 删除容器
docker-compse stop 停止服务
docker-compse restart 重启服务
docker-compse config 检查配置
docker-compse config -q 检查配置,有问题才有输出
docker-compse logs yml里面的服务id 查看容器输出日志
docker-compse top 展示当前docker-compose编排过的容器进程
docker-compse ps 展示当前docker-compose编排过的运行的所有容器
docker-compse exec yml里面的服务id /bin/bash 进入容器实例内部

如何编写docker-compose

官网:https://docs.docker.com/compose/compose-file/03-compose-file/。自然就是参考官网了,如果忘记了相关的语法看官网就行了,这个东西没必要深究,会使用就可以了。而且,如果使用了GoLand编译器安装了Docker插件之后编写docker-compose的时候都会有提示的。

  • 案例如下:
version: '3.0'
services:
  mysql8:
    image: mysql:8.0.29
    command: --default-authentication-plugin=mysql_native_password #解决外部无法访问
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
#      设置初始化脚本
      - ./script/mysql/:/docker-entrypoint-initdb.d/
    ports:
#      - 映射为13316端口
      - "13316:3306"
  redis:
    image: 'bitnami/redis:latest'
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
    ports:
      - '6379:6379'

本文含有隐藏内容,请 开通VIP 后查看