Docker

目录

  • 初识Docker
      • Docker架构
  • 安装
  • 常用命令
        • 启动命令
        • 镜像命令
        • 容器命令
  • dockerfile
  • SpringBoot项目打包镜像运行

初识Docker

出现问题

开发、测试、灰度、线上 环境不一致,比如Java、mysql版本、redis补丁。

如果在开发中的环境改变,运维就需要将所有的机器的软件版本进行改变,非常麻烦

Docker用一种容器虚拟化技术,可以将源码、配置、版本、环境一并打包

  • 一并打包,任意迁移
  • 沙箱机制,互不干扰

Docker如何解决大型项目依赖复杂、兼容性问题?

开发中可以将应用、依赖、函数库、配置一起打包,行程可移植镜像;沙箱机制使应用相互隔离

Docker如何跨系统运行

Linux系统结构分为系统应用、内核、计算机硬件三部分,Docker就将应用程序与系统函数一并打包

虚拟化技术和容器化技术

  • 虚拟化技术:操作系统中模拟硬件设备,然后在上面运行另一个虚拟机(另一个操作系统),再在上面运行我们所需要的应用。 占用资源多、性能低
  • 容器化技术:只虚拟化内核而不是整个操作系统,每个容器间隔离互不影响。节省资源,轻便、性能好

Docker架构

  • 镜像:将应用程序及依赖、环境、配置打包;镜像像一个模板,只能读,可以创建容器
  • 容器:可以看成一个简易版的Linux环境(包括root权限、进程空间、用户空间、网络空间、该运行的应用程序)
  • 仓库:存放各种镜像模板的地方,分为公开仓库(Docker Hub、阿里云)私有仓库

镜像相当于Java类模板,容器相当于实例对象
Docker_第1张图片
Docker_第2张图片

  1. 用户是使用Docker Client与 Docker Daemon建立通信,并发送请求给后者。
  2. Docker Daemon作为Docker架构中的主体部分,首先提供Docker Server的功能使其可以接受Docke
    Client的请求。
  3. Docker Engine执行Docker内部的一系列工作,每一项工作都是以一个Job的形式的存在。
  4. Job的运行过程中,当需要容器镜像时,则从 Docker Registry中下载镜像,并通过镜像管理驱动Grapt
    driver将下载镜像以Graph的形式存储。
  5. 当需要为Docker创建网络环境时,通过网络管理驱动Network driver创建并配置Docker容器网络环境
  6. 当需要限制Docker容器运行资源或执行用户指令等操作时,则通过Exec driver来完成。
  7. Libcontainer是一项独立的容器管理包,Network driver以及Exec driver都是通过Libcontainer来实现具体对容器进行的操作。

安装

  1. yum -y install gcc
  2. yum -y install gcc-c++
  3. yum install -y yum-utils
  4. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  5. yum makecache fast
  6. yum -y install docker-ce docker-ce-cli containerd.io
  7. systemctl start docker
  8. docker run hello-world

卸载

  1. systemctl stop docker
  2. yum remove docker-ce docker-ce-cli containerd.io
  3. rm -rf /var/lib/docker
  4. rm -rf /var/lib/containerd

阿里云镜像加速器地址 https://0vn2fm8g.mirror.aliyuncs.com
Docker_第3张图片

docker run ... 流程
Docker_第4张图片

常用命令

启动命令

Docker_第5张图片

镜像命令

docker images 列出本地的镜像
Docker_第6张图片

  • REPOSITORY:镜像的仓库源
  • TAG:镜像的标签版本号
  • IMAGE ID:ID
  • CREATED:镜像创建时间
  • SIZE:大小

docker search hello-word 查找hello-world镜像

docker pull ubuntu docker pull redis:6.0.8 拉取镜像

docker rmi hello-world docker rmi feb5d9fea6a5 删除镜像
docker rmi -f feb5d9fea6a5 强制删除
docker rmi -f $(docker images -qa) 删除所有镜像
在这里插入图片描述

docker system df 查看安装镜像占用情况

虚悬镜像:dangling image,仓库名和标签是none

容器命令
  • 新建容器 docker run ...
    • --name="容器名称"
    • -d 后台运行容器并返回容器ID,也即启动守护容器
    • -i 以交互式模式启动容器
    • -t 为容器重新分配一个伪输入终端
    • -it 启动交互式容器(经常合起来用)
    • docker run -it ubuntu /bin/bash 启动带终端系统
  • docker ps 查看启动的容器的信息
    • -a 当前的+历史运行的
    • -l 最近创建的
    • -n 显示最近前n个创建的
    • -q 只显示id
  • 退出
    • exit 退出容器
    • ctrl+p+q 退出终端 容器继续运行
  • docker start ID/name 启动已停止运行的容器
  • docker restart ID 重启容器
  • docker stop ID 停止容器
  • docker skill ID 强制停止容器
  • docker rm ID 删除容器
  • docker rm -f ID 强制删除

docker run -it 前台交互式启动
docker run -d 后台守护式启动,像Redis.MySQL

dockerfile

SpringBoot项目打包镜像运行

交付只需要打包镜像交付就行

  1. 打包应用 Maven package
  2. 编写dockerfile
    Docker_第7张图片
  3. 上传jar包和dockerfile至一个文件aaa
  4. 构建镜像 先cd 到文件aaa, docker build -t demo1 .
  5. 发布运行 docker run -d -P --name demo1-springboot-web
  6. 测试,调用hello方法,curl localhost:ports/hello

你可能感兴趣的:(advance,docker,linux)