• docker学习笔记


    一 基本概念

    docker是开源的应用容器引擎,解决软件跨环境迁移问题

    容器是完全使用沙箱机制,相互隔离

    容器性能开销极低

    二 安装

    1. 卸载原有docker

      yum remove docker \
      >                   docker-client \
      >                   docker-client-latest \
      >                   docker-common \
      >                   docker-latest \
      >                   docker-latest-logrotate \
      >                   docker-logrotate \
      >                   docker-engine
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    2. 更新yum

      yum update
      
      • 1
    3. 安装需要的软件包

      yum install -y yum-utils device-mapper-persistent-data lvm2
      
      • 1
    4. 设置阿里云镜像仓库地址

      yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
      
      • 1
    5. 安装docker社区版

      yum install -y docker-ce
      
      • 1
    6. 查看docker版本

      docker -v
      
      • 1

    参考Centos7安装Docker_玩物丧志的快乐的博客-CSDN博客

    三 使用

    架构

    在这里插入图片描述

    配置镜像加速器

    配置阿里云镜像加速器

    去阿里云-容器镜像服务-镜像加速器

    选择使用的操作系统,根据指引配置

    在这里插入图片描述

    服务命令

    # 启动
    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

    镜像命令

    查看镜像

    docker images
    # 查看所有镜像id
    docker images -q
    
    • 1
    • 2
    • 3

    repository: 镜像

    tag: 版本

    image id: 镜像id

    created: 创建时间

    size: 大小

    搜索镜像

    docker search xxx
    
    • 1

    下载镜像

    # 下载最新版本
    docker pull xxx
    # 下载指定版本
    docker pull xxx:版本
    
    • 1
    • 2
    • 3
    • 4

    版本去https://hub.docker.com查找镜像的Supported tags

    删除镜像

    # 删除单个镜像
    docker rmi 镜像id
    docker rmi 镜像:版本
    # 删除所有镜像
    docker rmi `docker images -q`
    
    • 1
    • 2
    • 3
    • 4
    • 5

    容器命令

    创建容器

    # 创建完会进入容器
    docker run -it --name=xxx 镜像:版本 /bin/bash
    # 后台创建容器,创建完不会进入容器
    docker run -id --name=xxx 镜像:版本
    
    • 1
    • 2
    • 3
    • 4

    退出容器:exit

    查看容器

    # 查看运行中的容器
    docker ps
    # 查看所有容器
    docker ps -a
    
    • 1
    • 2
    • 3
    • 4

    进入容器

    docker exec -it xxx /bin/bash
    
    • 1

    启动容器

    docker start xxx
    
    • 1

    停止容器

    docker stop xxx
    
    • 1

    删除容器

    不能删除运行中的容器

    docker rm xxx
    # 删除所有容器
    docker rm `docker ps -aq`
    
    • 1
    • 2
    • 3

    查看容器信息

    docker inspect xxx
    
    • 1

    数据卷

    概述

    数据卷:宿主机的一个目录或文件

    容器目录和数据卷目录绑定后,对方的修改会立即同步

    一个数据卷可以被多个容器挂载

    一个容器可以挂载多个数据卷

    数据卷作用:

    • 容器数据持久化

    • 外部机器和容器间接通信

    • 容器之间数据交换

    配置

    # docker run ... -v 宿主机目录(文件):容器目录(文件)
    docker run -it --name=m1 -v /root/data:/root/data_container mysql:5.7 /bin/bash
    
    • 1
    • 2

    目录必须是绝对路径

    一个-v可以挂载一个数据卷

    数据卷容器

    解决多容器数据交换问题

    # 配置数据卷容器
    docker run -it --name=a -v /volume mysql:5.7 /bin/bash
    # 绑定数据卷容器
    docker run -it --name=b --volumes-from a mysql:5.7 /bin/bash
    
    • 1
    • 2
    • 3
    • 4

    通过docker inspect a可以查看Mounts挂载信息

    source为宿主机目录,destination为容器目录

    "Source": "/var/lib/docker/volumes/0f476522043cbd37350ada6cca948b976e756ad43e7b846699d96cf84b1b0d61/_data",
    "Destination": "/volume"
    
    • 1
    • 2

    四 应用部署

    部署mysql

    端口映射:宿主机3307端口映射到容器3306端口

    外部机器访问3307端口

    docker run -id \
    # 端口映射
    -p 3307:3306 \
    --name=xxx \
    # 设置数据卷
    -v /root/mysql/conf:/etc/mysql/conf.d \
    -v /root/mysql/logs:/logs \
    -v /root/mysql/data:/var/lib/mysql \
    # 设置root密码
    -e MYSQL_ROOT_PASSWORD=123456 \
    mysql:5.7 /bin/bash
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    部署tomcat

    docker run -id \
    --name=xxx \
    -p 8080:8080 \
    -v /root/tomcat:/usr/local/tomcat/webapps \
    tomcat
    
    • 1
    • 2
    • 3
    • 4
    • 5

    部署nginx

    宿主机的nginx.conf先准备好

    docker run -id \
    # 端口映射
    -p 80:80 \
    --name=xxx \
    # 设置数据卷
    -v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
    -v /root/nginx/logs:/var/logs/nginx \
    # html为资源文件目录
    -v /root/nginx/html:/usr/share/nginx/html \
    nginx /bin/bash
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    部署redis

    docker run -id --name=xxx -p 6379:6379 redis:5.0
    
    • 1

    五 dockerfile

    镜像原理

    docker镜像是由特殊的文件系统叠加而成

    最低端是bootfs(内核),使用宿主机的bootfs

    第二层是rootfs,可以往上叠加其它镜像

    统一文件系统将不同的层整合成一个文件系统

    从一个镜像启动容器时,docker在最顶层加载一个读写文件系统作为容器

    在这里插入图片描述

    镜像制作

    容器转为镜像

    # 容器转为镜像
    docker commit 容器id 镜像名称:版本号
    # 镜像转成压缩文件
    docker save -o 压缩文件名称 镜像名称:版本号
    # 压缩文件转成镜像
    docker load -i 压缩文件名称
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    dockerfile

    dockerfile是一个文本文件,包含了一条条指令,基于基础镜像,构建一个新的镜像

    dockerfile常用指令参考Dockerfile 详解_万wu皆可爱的博客-CSDN博客_dockerfile

    六 docker compose

    服务编排:按照一定的业务规则批量管理容器

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

    1. 用docker file定义运行环境镜像

    2. 用docker-compose.yml定义组成应用的各服务

    3. 运行docker-compose up启动应用

    docker compose使用参考docker-compose教程(安装,使用, 快速入门)_pushiqiang的博客-CSDN博客_docker 安装

    七 docker容器虚拟化与虚拟机比较

    相同点:具有相似的资源隔离和分配优势

    不同点:容器虚拟化的是操作系统,虚拟机虚拟化的是硬件;虚拟机可以运行不同操作系统,容器只能运行同一类型操作系统

  • 相关阅读:
    【SpringBoot框架篇】29.Jpa+vue实现单模型的低代码平台
    20省市公布元宇宙路线图
    换种方式看后端参数接收、建议躺着看!!!
    Android入门第28天-ListView嵌套CheckBox在滚动时失去选中状态的问题
    OpenMV:22电机扩展板控制直流电机
    Python解释器与Python编辑器的详细下载与安装过程
    树莓派安装wps2019教程
    用立方样条联合SHAP分析在危险因素鉴定中的作用
    这些到底是个啥?
    Git学习笔记 - Git基本操作和GitHub
  • 原文地址:https://blog.csdn.net/weixin_46818541/article/details/127826232