• Docker


    1. 概述

    1.1. Docker简述

    Docker是一个虚拟机,但是他是在虚拟设备上直接运行应用,少了一层虚拟操作系统:
    在这里插入图片描述
    所以他相对虚拟机,更加轻便,更快,性能损耗更少。
    应用都是运行在app上的,所以安装一些应用,可以直接以打包的方式,拖下来就用。
    比如jdk,和一套完整的应用方案等,拖来来就可以直接使用,非常方便。
    比如一套应用,像java啊tomcat啊等。所以像mysql,nginx等,用这种方式就是可以直接的

    Docker本身是一个服务,需要独立的安装。
    安装好后,就可以单独的使用容器,容器容器就是制作好的容器包,做好后随时用。

    Docker有几大问题,我们需要弄清除:
    安装,镜像使用,镜像制作,仓库。

    1.2. 关于docker的几个概念

    Docker既然是虚拟机,那么就有镜像。
    镜像就是把当前运行的系统的某一个点的情况,序列化下来,或者放到磁盘上,或者放到仓库中等等。就是一个镜像。

    镜像是静态的,就是代表某个时刻,把系统快照下来。

    Docker将会运行启动镜像。一旦运行启动,相当于就是顺着这个系统的这个点继续运行了。概念上,被启动继续运行的就是容器。
    所以,容器,是由镜像创建的。
    容器,是真正在跑的虚拟机了,是动态的,可以创建,停止,启动等。

    当然一个镜像可以创建多个容器。

    2. 安装

    官网:https://www.docker.com/,但是安装跑这里https://docs.docker.com/
    安装不慌docker不需要下载包,用yum安装。
    看官网,介绍即可:
    在这里插入图片描述

    2.1. 首先要卸载老版本

    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.2. 设置和下载包

    直接设置:

    sudo yum install -y yum-utils
    
    $ sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
    
    • 1
    • 2
    • 3
    • 4
    • 5

    或者换另外一种方式,直接来:

    cd /etc/yum.repos.d/
    
    • 1

    然后用官网上的地址直接下载

    wget https://download.docker.com/linux/centos/docker-ce.repo
    
    • 1

    2.3. 安装

    官网是这样的:

    yum install docker-ce docker-ce-cli containerd.io
    
    • 1

    但实际上,应该可以直接安装的

    yum install docker-ce
    
    • 1

    但实际上,应该可以直接安装的

    顺利的话,直接安装就好了
    但不顺利的话就要折腾了。

    2.4. 安装错误情况

    首先有可能会出现:

    Problem: package docker-ce-3:20.10.12-3.el8.x86_64 requires containerd.io >= 1.4.1, but none of the
    
    • 1

    对,缺少:containerd.io
    那就直接安装:

    yum install -y containerd.io
    
    • 1

    安装这个不顺利的话游回出现这个问题:

    Problem: problem with installed package podman-1.0.0-2.git921f98f.module_el8.0.0+58+91b614e7.x86_64
    
    • 1

    这个是因为系统里面本身就有一个podman
    要先卸载掉:

    yum erase podman buildah
    
    • 1

    卸载完,再安装container.io

    yum install -y containerd.io
    
    • 1

    这个时候,就可以顺利安装了
    安装完再安装docker

    yum install docker-ce
    
    • 1

    搞定了。
    另外,安装完后,再运行docker镜像的时候,会报错:

    docker: Error response from daemon: cannot start a stopped process: unknown
    
    • 1

    这个时候,要安装

    yum install -y libseccomp-devel
    
    • 1

    2.5. 启动

    启动服务

    systemctl start docker
    
    • 1

    开机默认启动

    systemctl enable docker
    
    • 1

    验证

    docker info
    
    • 1

    2.6. 配置镜像服务地址

    服务默认是从https://hub.docker.com/拉取,有时会很慢,这个时候就要改成国内的镜像。
    vi /etc/docker/daemon.json
    内容如下:

    [root@localhost docker]# cat /etc/docker/daemon.json 
    {
        "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com","https://hub.docker.com"]
    }
    
    • 1
    • 2
    • 3
    • 4

    修改完后,重启:

    systemctl restart docker
    
    • 1

    docker info查看一下当前的配置是否生效了
    在这里插入图片描述

    2.7. centos镜像yum的修复以及网络工具安装

    镜像一个操作系统,yum不能用很郁闷的,yum是因为centos被移除,暂时不知道什么原因。
    所以要进行修复。
    修复原理,另外一篇文章也有:
    到 cd /etc/yum.repos.d下面
    rm CentOS-AppStream.repo CentOS-Base.repo CentOS-Extras.repo CentOS-PowerTools.repo CentOS-centosplus.repo
    注意一下文件名,不一定都是一个文件名哈,有可能是CentOS-Linux-xxx的命名方式的。
    然后:
    curl -o /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-8-reg.repo
    就搞定了

    安装网络:
    yum install net-tools -y
    这样就可以使用ifconfig 查看当前的ip地址了。

    3. Docker网络

    3.1. Docker的四种网络类型

    host模式
    这种应该适合我的。就是无网络隔离,无新建虚拟网卡。虚拟机完全共用宿主机的一切网络。

    container
    这种模式比较奇葩,就是使得新建的容器和之前的某个容器共用网络

    none
    其实也是网桥模式,只不过以切都要自己手动配置,手动指定IP地址

    Bridge网桥模式
    也是默认模式,虚拟出新的网卡,用网桥作隔离。

    3.2. Docker Bridge网络原理

    Docker创建的时候其实是使用了虚拟网络,网桥等技术组成网络的:
    在这里插入图片描述
    如上图,新建一个容器,相当于就是在容器里面和外面增加了一个虚拟网络。然后这个虚拟网络,放置在一个命名空间中。
    然后把网桥创建在这个命名空间中。网桥的一端链接虚拟网络,另外一端链接物理网卡。
    我们看看一下:
    Docker容器中的网卡信息:
    在这里插入图片描述
    容器内部eth0就是
    在这里插入图片描述
    看到没,这里docker0就是网桥。
    下面vethxxxx(数字)就是另外一端的虚拟网卡。
    观察一下ip地址,网桥会给容器里面的虚拟设备分配一个虚拟的ip地址。

    另外我们可以用traceroute命令查看和跟踪实际的路由情况。
    当然这个要先安装:
    yum install -y traceroute

    4. 使用

    4.1. 概述

    Docker使用就是把docker的虚拟机拉起。
    虚拟机就是安装好的应用,很方便。有三个特性特别要注意:

    1. 绑定端口
      虚拟机可以通过端口映射将虚拟机内部的端口映射到外面,从而达到应用内部统一监听一个端口,而外包可以映射成不同的端口,灵活的在各个机器上使用
    2. Mount磁盘,可以将宿主机器上的一个磁盘路径,直接映射到虚拟机中的一个指定位置。这样更灵活的使用文件系统,同时也可以保存IO的信息。
    3. 伪终端,打开容器后,可以通过命令,直接进入到容器当前的虚拟机中。

    4.2. 查看现成的官方镜像

    到这里来:
    https://hub.docker.com/
    进去后,直接可以搜索
    在这里插入图片描述

    4.3. 日常查看

    docker info 查看当前docker的相关信息
    docker ps 可以查看当前的容器有一些参数
    docker ps -a查看所有容器
    docker ps -l 查看最近新启动的容器。
    docker image ls 查看有哪些镜像
    docker history [image] 查看[image]镜像的构建历史
    docker inspect [image] 查看某个镜像的详细信息

    4.4. 启动容器

    docker start 容器id

    docker run -d 容器名

    docker exec -it <运行id> bash 可以进入到容器内部,这里面t其实就是伪终端的意思

    4.5. 重启后自动重启

    –restart=always

    –restart还有其他参数:
    no - 容器退出时,不重启容器;

    on-failure - 只有在非0状态退出时才从新启动容器;

    always - 无论退出状态是如何,都重启容器;

    4.6. 其他命令

    docker pull [image] 下载镜像
    docker image prune 清除那些悬挂着的镜像,加-a会删除所有没有和容器关联的镜像
    docker save [image] -o xxx.tar 将一个镜像导出成一个文件
    docker load -I xxx.tar 将一个导出的镜像文件内导出到镜像中

    docker stop [CONTAINER ID] 停止容器
    docker rm [CONTAINER ID]删除容器

    docker image rm [镜像名] 删除镜像

    4.7. 常用参数说明

    -i: 交互式操作
    -t: 终端
    -d 后台运行
    -p 容器端口映射 (宿主机端口:容器端口)

    5. docker-compose

    5.1. 概述

    我理解,docker-compose就是通过配置yml把多个容器启动关联统一起来一起管理。

    5.2. 安装

    先到官网下载:
    https://github.com/docker/compose/releases
    下载下来后,改个名字:docker-compose
    然后,把文件放置到:/usr/local/bin/docker-compose
    加权限:
    chmod +x /usr/local/bin/docker-compose
    创建软链接
    sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    测试是否安装成功:
    $ docker-compose –version

    6. 实战案例

    6.1. 从网上一键安装mysql的主从库

    概述
    Mysql的一个主从库安装,非常迅速的将主从库安装上去。
    这个安装是私人做的,他在gitee下:
    https://gitee.com/lookingdreamer/SPPPOTools/tree/master
    当然,慕课网培训的一个人,把他复刻到GitHub上了:
    https://github.com/lly835/SPPPOTools
    当然,这个案例必须安装了docker-compose
    安装
    将内容克隆下来,进入下面目录:
    在这里插入图片描述
    这里的README.md写的非常清楚:
    修改setup.sh中的密码:
    在这里插入图片描述
    然后执行:

    /bin/bash setup.sh install [宿主机IP]
    
    • 1

    这里注意几点:

    1. 宿主机器一定是内外的ip,不能是127.0.0.1
    2. 这里可能会出现要给错误就是mysql报一个错:
      runc: symbol lookup error: runc: undefined symbol: seccomp_api_get
      是这是缺少头文件或者相关的库之类的问题,运行如下命令解决:
    yum install libseccomp-devel
    
    • 1

    6.2. 安装redis

    先下载

    docker pull redis
    
    • 1

    然后启动

    docker run -d -p 6379:6379 redis
    
    • 1

    6.3. 安装rabbitmq

    下载镜像

    docker pull rabbitmq:management
    
    • 1

    启动镜像

    docker run -dit --name myrabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:management
    
    • 1

    说明:
    下载时management标签的含义是下载的镜像包含manage模块。包含web管理页面。
    安装时:
    -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin指定manage模块的用户名和密码,我执行完后是报错的,也可以完全省略参数。
    如果不指定默认用户名密码,系统会有默认用户名密码:guest guest
    所以,可以用下面命令。

    docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5673:5672 rabbitmq:management
    
    • 1

    现在可以通过访问http://linuxip:15672,访问web界面

    6.4. 安装mysql

    https://hub.docker.com/_/mysql?tab=tags
    这里看到mysql的相关版本信息。

    docker pull mysql:latest
    
    • 1

    或docker pull mysql:指定的tag(版本号)

    docker run -itd --name mysql-azkaban -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.38
    
    • 1

    mysql:5.7.38
    这个是版本号,和前面pull的保持一致,或者不要pull直接执行。不写就是最新版本

  • 相关阅读:
    易航网址引导系统 v1.9 源码:去除弹窗功能的易航网址引导页管理系统
    Java老人护理上门服务类型系统小程序APP源码
    c语言练习72:关于截断和整形提升
    流量分析第一题
    @设计模式-工厂模式
    信息系统项目管理师Part17-云计算
    基于若依ruoyi-nbcio支持flowable流程角色,同时修改流转用户为username,流程启动做大调整(二)
    类和对象·默认成员函数
    Redis入门到实战(四、原理篇)RESP协议
    十三、Django之添加用户(原始方法实现)
  • 原文地址:https://blog.csdn.net/wwwlgy/article/details/126699314