SpringCloud学习笔记(八)Docker

8. Docker

8.1 Docker基础

Docker:一个快速交付应用、运行应用的技术

image-20230421111749817
image-20230421112101821
image-20230421112508639

虚拟机体量较大但功能更强,而Docker更着重于只运行需要的部分.

Docker是一个系统进程,虚拟机是在操作系统中的操作系统.

8.2 Docker架构

image-20230421113014712

Docker和DockerHub

image-20230421113132065

Docker架构

image-20230421113344988

8.3 linux安装docker

1.清理原有docker文件

 yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce

2.安装yum-utils工具包

 yum install -y yum-utils \
 device-mapper-persistent-data \
 lvm2 --skip-broken

3.更新本地镜像源

 #设置docker镜像源
 yum-config-manager \
     --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
     
 sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
 ​
 yum makecache fast

注意CentOS 8的话最后一条指令需要去掉fast,即yum makecache创建元数据缓存

4.安装docker-ce版(免费社区版)

 yum install -y docker-ce

8.4 Docker基本操作

镜像相关命令

  • 镜像名称一般由两部分组成:[repository]:[tag] eg.mysql:5.7
  • 没有指定tag则默认使用最新版本
image-20230421211919999

DockerHub官网

image-20230421214931813

docker run 和docker exec区别

都是运行一个容器实例,但是docker exec可以进入容器

8.5 容器数据卷

为什么需要数据卷?

主要是为了解决容器和数据耦合的问题。数据位于容器内部不便于修改数据,需要进入容器内;且在容器内的修改对外不可见,新容器不可复用;此外若容器升级维护则需要删除旧容器,数据也会跟着被删除.

数据卷是一个虚拟目录,指向宿主机文件系统的某个目录.

image-20230422131448921

docker数据卷基本指令

数据卷的指令是二级指令,使用docker volume --help查看相关使用方式

image-20230422153152643

使用docker volume create指令创建数据卷后查看其具体信息

image-20230422153330872

挂载数据卷

image-20230422153851797

docker run --help指令查看

image-20230422161726915

示例:挂载nginx的html目录到宿主机

  • 使用-v指令将nginx容器的/usr/share/nginx/html文件挂载到宿主机的html文件夹
image-20230422161811722
  • 使用docker inspect指令查看挂载到宿主机的文件夹html,发现默认挂载到了宿主机的/var/lib/docker/volumes/html/_data路径下
image-20230422162002750
  • 进入目录,查看具体内容
  • image-20230422162237819
  • 好处:直接修改宿主机的文件即可,需不要进入容器中修改,如下
  • image-20230422162905906
image-20230422162952926
image-20230422163015798

补充:

image-20230422163537274

不使用数据卷直接挂载

image-20230422163748555

注意

是否使用数据卷进行挂载的区别在于:

  • 使用数据卷由docker全自动映射到宿主机目录;不使用数据卷则需要自己手动映射
  • 使用数据卷不方便查找映射到了那个宿主机目录;不使用数据卷因为是自己定义的目录,所以更个性化和明晰
  • 根据需要自由选择

8.6 Docker File自定义镜像

镜像结构

镜像结构:镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成.

image-20230422170642383

镜像采用分层结构的好处是:升级时只需修改一部分涉及到的层,其他层不用再重新修改和配置.

image-20230422170752139

自定义镜像

Dockerfile:Dockerfile就是一个文本文件,其中包含一个个的指令,用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。官方文档

image-20230422171008706

案例

image-20230422171600724
  • 新建文件夹
  • image-20230422171846958image-20230422171908508
  • 文件传输后
  • image-20230422172255713
  • DockerFile
  • image-20230422172422407
  • build镜像
  • image-20230422172700567
  • 创建成功
  • image-20230422172805952
  • 启动和查看
  • image-20230422172934277
利用已有半成品制作dockerfile:
image-20230513150904783

使用新的dockerfile覆盖原dockerfile,然后重新build新的镜像:

image-20230513150958947

可以发现新的docker images比原来小很多,盲猜原因是web1.0基于整个ubuntu基础镜像来构建,而web2.0使用别人发布的java:8-alpine已经优化过,更轻量。

image-20230513151033686

不同docker容器使用相同端口时,需要将其映射到不同的宿主机端口:

image-20230513151139851

之后可以分别通过8090和8091访问两个容器。

Docker Compose

问题:微服务集群内容过多,手动依次部署太麻烦

解决:docker compose可以基于compose文件快速部署分布式应用,无需手动一个个创建和运行容器

image-20230513154845611

安装docker-compose后可以配置一下docker-copmose的自动补全,以后使用docker-compose会有命令提示

image-20230513162315822

如果修改hosts之后还是不行,可以先关闭docker。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注