• Docker容器化技术


    Docker容器化技术

    1.Docker概念

    • Docker是一个开源的应用容器引擎
    • 基于go语言实现
    • Docker可以让开发者们打包他们的应用以及依赖包到一个轻量级的、可移植的容器中,然后发布到任何流行的Linux机器上
    • 容器是完全使用沙箱机制,相互隔离
    • 容器性能开销极低
    • Docker从17.03版本开始分为CE和EE

    :docker是一种容器技术,解决软件跨环境迁移的问题

    2.docker的安装

    #1.yum包更新到最新
    yum update
    
    • 1
    • 2
    #2.安装需要的软件包
    yum install -y yum-utils device-mapper-persistent-data lvm2
    
    • 1
    • 2
    #3.设置yum源
    yum-config-manager --add-repo https://download.docker .com/linux/centos/docker-ce.repo
    
    • 1
    • 2
    #4.安装docker
    yum install -y docker-ce
    
    • 1
    • 2
    #5.查看版本
    docker -version
    
    • 1
    • 2

    报错时:

    可在/etc/docker下配置阿里云的镜像加速器

    vim daemon.json
     
     {
          "registry-mirrors":["https://alzgoonw.mirror.aliyuncs.com"]
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.docker架构

    在这里插入图片描述

    4.docker命令

    4.1Docker服务相关命令-daemon

    1. 启动docker服务

    2. 停止

    3. 重启

    4. 查看状态

    5. 开机自启动

      systemctl start docker
      systemctl stop docker
      systemctl restart docker
      systemctl status docker
      systemctl enable docker
      
      • 1
      • 2
      • 3
      • 4
      • 5

    4.2Docker镜像相关命令-image

    1. 查看本地镜像

      • docker images
        docker images -q  #镜像ID
        
        • 1
        • 2
    2. 搜索Docker Hub中镜像

      • docker search redis
        
        • 1
    3. 从仓库拉取镜像至本地

      • docker pull redis     #(默认最新版本latest)
        docker pull redis:5.0 #镜像版本从hub.docker.com上查看
        
        • 1
        • 2
    4. 删除本地镜像

      • docker rmi {ID}
        docker rmi `docker images -q` #全部删除
        
        • 1
        • 2

    4.3Docker容器相关命令【重】

    • 查看容器

      • docker ps  #查看运行中的容器
        docker ps -a # 查看所有容器
        docker ps -aq # 查看所有容器ID
        
        • 1
        • 2
        • 3
    • 创建容器

      • docker run -it --name=c1  centos:7 /bin/bash #-it交互式启动容器后,分配一个伪终端进入容器,exit命令退出关闭容器  /bin/bash容器启动后执行 
        docker run -id --name=c1  centos:7 #-id守护式启动容器,后台运行,使用docker exec进入容器,exit退出后不会关闭容器
        
        • 1
        • 2
    • 进入容器

      • docker exec -it c2 /bin/bash
        
        • 1
    • 启动容器

      • docker start c2
        
        • 1
    • 停止容器

      • docker stop c2
        
        • 1
    • 删除容器,需要停止容器

      • docker rm c2
        docker rm `docker ps -aq`
        
        • 1
        • 2
    • 查看容器信息

      • docker inspect
        
        • 1

    5.数据卷

    5.1概念

    思考:

    • Docker容器删除后,在容器中产生的数据也会随之销毁
    • Docker容器和外部机器可以直接交换文件吗?
    • 容器之间想要进行数据交互?

    数据卷概念:

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

    数据卷作用:

    • 容器数据持久化
      • 容器删除后,数据卷上的数据还存在
      • 重新创建容器(-v 数据卷),容器依旧可以获得数据卷上的数据
    • 外部机器和容器间通信
    • 容器之间数据交换

    5.2创建数据卷

    docker run -it --name=c2 -v /root/data2:/root/data_container2 -v /root/data3:/root/data_container3 centos:7	     #-v 参数 宿主机目录:容器目录,目录不存在,自动创建  #数据持久化
    
    • 1

    5.3数据卷容器

    在这里插入图片描述

    #1.创建启动c3数据卷容器,使用-v参数设置数据卷
    docker run -it --name=c3 /volume centos:7
    #2.创建启动c1、c2容器,使用--volumes-from参数设置数据卷
    docker run -it --name=c1 --volumes-from c3 centos:7
    docker run -it --name=c2 --volumes-from c3 centos:7
    
    • 1
    • 2
    • 3
    • 4
    • 5

    和多容器挂载同一个宿主机目录:

    多容器挂载:如果容器多的话,操作麻烦,数据保存、持久化、回复比较麻烦

    6.应用部署

    6.1MySQL部署

    • 容器和外部机器不能够直接通信
    • 容器和宿主机通信、宿主机和外部机器通信
    • 以宿主机为桥,端口映射
    1. 搜索mysql镜像

      docker search mysql
      
      • 1
    2. 拉取mysql镜像

      docker pull mysql:5.6
      
      • 1
    3. 创建容器

      #宿主机/root/mysql下
      docker run -id  \
      -p 3307:3306    \  #端口映射,使外部机器连上容器c_mysql
      --name=c_mysql  \  
      -v /root/mysql/conf:/etc/mysql/comf.d  \  #目录映射,数据卷
      -v /root/mysql/logs:/logs   \
      -v /root/mysql/data:/var/lib/mysql  \ 
      -e MYSQL_ROOT_PASSWORD=123456   \
      mysql:5.6  
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

    6.2Tomcat部署

    1. 搜索tomcat镜像

      docker search tomcat
      
      • 1
    2. 拉取tomcat镜像

      docker pull tomcat
      
      • 1
    3. 创建容器

      mkdir /root/tomcat
      cd /root/tomcat
      
      • 1
      • 2
      docker run -id --name=c_tomcat  \
      -p 8080:8080   \
      -v $PWD:/usr/local/tomcat/webapps   \ #$PWD宿主机的当前目录
      tomcat
      
      • 1
      • 2
      • 3
      • 4
    4. 使用外部机器访问tomcat

      在宿主机/root/tomcat下

      [root@localhost tomcat]# mkdir test
      [root@localhost tomcat]# cd test/
      [root@localhost test]# vim index.html
      
      • 1
      • 2
      • 3
      #访问路径
      http://192.168.202.23:8080/test/index.html
      
      • 1
      • 2

    在这里插入图片描述

    6.3Nginx部署

    1. 搜索tomcat镜像

      docker search nginx
      
      • 1
    2. 拉取tomcat镜像

      docker pull nginx:1.18
      
      • 1
    3. 创建容器

      mkdir /root/nginx
      cd /root/nginx
      
      • 1
      • 2
      docker run -id --name=c_nginx  \
      -p 80:80  \
      -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf   \
      -v $PWD/logs:/var/log/nginx   \
      -v $PWD/html:/usr/share/nginx/html \ 
      nginx:1.18
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    4. 使用外部机器访问tomcat

    6.4Redis部署

    1. 创建容器c_redis

       docker run -id --name=c_redis -p 6379:6379 redis:5.0
      
      • 1
    2. windows上连接

      • 在D:\Redis\Redis-x64-3.2.100>位置

    在这里插入图片描述

    7.Dockerfile

    7.1Docker镜像原理

    • Docker镜像本质是什么?
      • 是一个分层文件系统
    • Docker中一个centos镜像为什么只有200MB,而一个centos操作系统的ios文件要几个G?
      • centos的ios镜像文件包含bootfs和rootfs,而docker的centos镜像复用操作系统的bootfs,只有rootfs和其他镜像层
    • Docker中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有70多MB
      • 由于docker中镜像是分层的,tomcat虽然只有70多MB,但他需要依赖于父镜像和基础镜像,所以整个对外暴露的tomcat镜像大小500多MB

    在这里插入图片描述

    7.2镜像制作

    1. 容器转镜像
      在这里插入图片描述

    2. Dockerfile

      在这里插入图片描述

    3. 案例1

      • 自定义centos7镜像,要求:

        • 默认登录路径:/usr
        • 可以使用vim
      • 步骤

        • 定义父镜像:FROM centos:7
        • 定义作者信息:MAINTAINER yehuda <yehuda@yh.cn>
        • 执行安装vim命令:RUN yun install -y vim
        • 定义默认的工作目录:WORKDIR/usr
        • 定义容器启动执行的命令:CMD/bin/bash
      • docker build  \
        -f ./centos_dockerfile  \  #dockerfile文件目录
        -t yehuda_centos:1  .    #新镜像命名:版本号
        
        • 1
        • 2
        • 3
    4. 案例2

      • 复制jar包springboot2-0.0.1-SNAPSHOT.jar

      • 编写dockerfile文件

        FROM java:8
        MAINTAINER yehuda <12933787@qq.com>
        ADD  springboot2-0.0.1-SNAPSHOT.jar app.jar
        CMD java -jar app.jar
        
        • 1
        • 2
        • 3
        • 4
      • 使用dockerfile文件创建镜像

        docker build -f ./java_springboot_dockerfile  -t javaapp_jar:5.7 .
        
        • 1
      • 使用镜像创建容器

        docker run -id -p 9000:8058 javaapp_jar:5.7  #省略--name 系统自命名
        
        • 1

    8.Docker服务编排

    8.1Docker Compose

    ​ Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

    Compose 使用的三个步骤:

    • 使用 Dockerfile 定义应用程序的环境。
    • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
    • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

    一、安装docker-compose

    #安装,以编译好的二进制包方式安装在Linux系统中
    curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s `-` uname -m` -o /usr/local/bin/docker-compose
    #设置权限
    chmod +x /usr/local/bin/docker-compose
    #查看版本信息
    docker-compose -version
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    二、卸载

    #二进制包方式安装的,删除二进制文件即可
    rm /usr/local/bin/docker-compose
    
    • 1
    • 2

    三、使用docker-compose编排nginx+springboot项目

    1.创建docker-compose目录

    mkdir ~/docker-compose
    cd ~/docker-compose
    
    • 1
    • 2

    2.编写docker-compose.yml文件

    version: `3`
    services:
      nginx:
      image: nginx
      ports:
        - 80:80
      links:
        - app
      volumes:
        - ./nginx/conf.d:/etc/nginx/conf.d
      app:
        image: app
        expose:
          - "8080"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    3.创建./nginx/conf.d目录

    mkdir -p ./nginx/conf.d
    
    • 1

    4.在./nginx/conf.d目录下编写yh.conf文件

    server {
            listen 80;
            access_log off;
    
            location / {
               proxy_pass http://app:8058;
            }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    5.在~/docker-compose目录下使用docker-compose启动容器

    docker-compose up
    
    • 1

    6.测试访问

    http://192.168.202.23/hello
    
    • 1

    9.Docker私有仓库

    9.1私有仓库搭建

    #1.拉取私有仓库镜像
    docker pull registry
    #2.启动私有仓库容器
    docker run -id --name=registry -p 5000:5000 registry
    #3.打开游览器 输入地址http://私有仓库服务器ip:5000/v2/_catalog,看到{"repositories":[]}表示私有仓库 描建成功
    #4.信任私有仓库,修改daemon.json文件
     vim /etc/docker/daemon.json
          {
                 "registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"],
                 "insecure-registries": ["192.168.202.23:5000"]
          }
    #5.重启docker
    systemctl restart docker
    docker start registry
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    9.2镜像上传到私有仓库

    #1.标记镜像为私有仓库的镜像
    docker tag centos:7 192.168.202.23:5000/centos:7
    #2.上传标记的镜像
    docker push 192.168.202.23:5000/centos:7
    
    • 1
    • 2
    • 3
    • 4

    9.3从私有仓库拉取镜像

    #1.拉取镜像
    docker pull 192.168.202.23:5000/centos:7
    
    • 1
    • 2

    10.Docker

    在这里插入图片描述

  • 相关阅读:
    Hudi Spark SQL源码学习总结-CTAS
    Pandas处理异常值的两种方法
    关于Modal的封装的记录【Vue3、computed、Naive UI】
    Redis加Lua脚本实现分布式锁
    大屏大概是怎么个开发法(前端)
    RK3588-EDGE Ubuntu搭建HTTP服务器
    机器学习_个人笔记_周志华(停更中......)
    《数字图像处理-OpenCV/Python》连载(9)多帧图像的读取与保存
    [附源码]Python计算机毕业设计宠物寄养管理系统
    vue2.x引入threejs
  • 原文地址:https://blog.csdn.net/m0_62425768/article/details/137993658