• docker - 分享


    1.docker介绍:

            Docker是一种虚拟化技术,它允许你在一台机器上运行多个应用程序,每个应用程序都运行在一个独立的虚拟器中,互相之间不会干扰。这些容器使用了操作系统级别的虚拟化技术,课可以在同一物理机器上运行多个应用程序,同时每个容器又拥有自己独立的文件系统和资源管理。Docker可以让你快速地创建、部署、和复制和移动应用程序,应为它能够在不同的环境中保持应用程序的一致性和可移植性,通过使用Docker,你可以更加轻松的构建、打包和发布运行应用程序。

    2.docker的优点

            启动速度快(秒级),由于祛除了管理程序的开销,docker容器拥有很高的性能,同一台宿主机可以运行更多的容器,有效的利用了资源

            能够开发,测试和部署提供一致性的环境,避免了在开发或者测试时一切正常,但在生产环境中却不能运行的问题

            鼓励面向服务架构,docker推荐的那个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型

    3.docker 的用途

            提供一次性的环境,比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境

            提供弹性的云服务,应为docker容器可以随开随关,很适合动态扩容和缩容

            组建微服务架构,通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构

    4.doker与虚拟机器的区别

            vm(vmware)在宿主机器,宿主机器操作系统的基础上创建虚拟层。虚拟化的操作系统,虚拟化的仓库,然后再安装应用

            docker 在宿主机器的操作系统上创建docker引擎,直接通过宿主机的操作系统调用硬件资源,而不是虚拟化操作系统和硬件资源,所以占用资源更少,性能更高

    二、docker的三大核心组件

            1.docker 的三大要素

                    镜像:docker镜像是一个特殊的文件系统,除了提供容器运行时所有需的程序、库、资源、配置等文件外、还包含了一些为运行时准备的配置参数,镜像不包含任何动态数据,其内容在构建之后也不会改变,镜像可用来创建dockerd容器,用户可以使用设备上已有的镜像来安装多个相同的docker容器

                    容器:镜像创建的运行实例,docker利用容器来运行应用,每个容器都是相互隔离的,保证安全的平台,我们可以把容器看做是一个轻量级的linux运行环境。

                    镜像仓库:集中存放镜像文件的地方,用户创建玩镜像后,可以将其上传到公共仓库或私有仓库,需要在另一台主机上使用该镜像时,只需要重仓库上下载即可

    docker容器的运行逻辑,docker使用客户端、服务端(c/s)架构模式,docker守护进程(docker daemon) 作为server端接受docker客户端的请求,并负责创建,运行分发docker容器,docker守护进程一般在docker主机后台运行,用户使用docker客户端直接跟docker守护进程信息交互

            2 .docker运行过程

            docker 客户端,用户和docker守护进程(docker daemon)建立通信的客户端,docker客户端只需要像docker服务器或者守护进程发出请求(docker 构建、docker拉取和docker启动等指令),服务器或者守护进程将完成所有工作并且换回结果

            docker 主机:一个物理机或者虚拟的机器用户执行docker 守护进程和容器

            Docker守护进程:接收并处理Docker客户端发送的请求,监测Docker API的请求和管理Docker对 象,比如镜像、容器、网络和数据卷。

    注意:在 Docker 中,Docker 客户端和 Docker 主机可以在不同的机器上,甚至可以通过网络远 程连接。这意味着你可以在本地的机器上安装 Docker 客户端,然后通过 Docker 客户端与远程的 Docker 主机进行通信和操作,而 Docker 主机可以部署在不同的机器上,例如云服务器、虚拟 机、物理机等。 这种分离的架构使得 Docker 可以实现分布式部署和管理,方便在不同的环境中管理和运行容器化 应用程序。例如,你可以在本地的开发机器上使用 Docker 客户端构建和测试容器镜像,然后将镜 像推送到远程的 Docker 主机上进行部署和运行

    三、安装

    安装docker时需要一些基本的前提条件: 1. 运行64位cpu架构的机器(x86_64, amd64),不支持32位机器 2. 运行linux3.8或更高的内核(可以使用uname -a 命令查看系统内核) 3. 内核必须支持一种合适的存储驱动:Device Messager,AUFS,vfs等,默认为Device Messager。 4. 内核支持cgroup和命名空间 注:cgroups,其名称源自控制组群(control groups)的简写,是Linux内核的一个功能,用来限 制、控制与分离一个进程组的资源(如CPU、内存、磁盘输入输出等)

    1. 卸载旧版本的 Docker(如果有)

    1. sudo yum remove docker \
    2. docker-client \
    3. docker-client-latest \
    4. docker-common \
    5. docker-latest \
    6. docker-latest-logrotate \
    7. docker-logrotate \
    8. docker-engine

    2.安装docker依赖包

    首先,需要设置 Docker CE 的仓库。可以使用以下命令:

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

    注意:Could not fetch/save url https://download.docker.com/linux/centos/docker-ce.repo to file /etc/yum.repos.d/docker-ce.repo: [Errno 14] problem making ssl connection

    这是因为国内访问不到docker官方镜像的缘故,通过阿里源进行设置

    1. sudo yum-config-manager \
    2. --add-repo \
    3. http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

    3.安装 Docker CE

    使用以下命令安装 Docker CE:

    sudo yum install -y docker-ce

    注意:如果安装了多个docker仓库,使用 yum install 或者 yum update 命令时后面不跟版本信息的 话,将始终安装最高版本的docker! 安装指定版本的docker CE,需要指定完整的包名称,例如安装仓库中的这个版本 18.03.0.ce1.el7.centos ,其命令为

    sudo yum install -y docker-ce-18.03.0.ce

    4.操作 Docker

            1.启动docker服务

    sudo systemctl start docker

            2.查看docker服务状态

    sudo systemctl status docker

            3.停止docker服务

    sudo systemctl stop docker

    5.移除docker

            1.删除docker程序包:

    sudo yum remove docker -ce docker -ce-cli containerd.io

    注意:

            docker-ce:docker社区版,即docker的核心引擎和cli工具

            docker-ce-cli:docker的cli工具

            containerd.io :docker容器运行时,用于管理容器生命周期的核心组件

            2.删除docker镜像,容器的数据卷

    sudo rm -rf /var/lib/docker

            3.删除docker配置文件和日志

    1. sudo rm -rf /etc/docker
    2. sudo rm -rf /var/log/docker

    完成以上操作后,docker就被完全卸载了

    四、常用操作

            1.镜像相关的操作

    docker images

            2.删除本地镜像

    1. docker rmi 镜像名称:标签
    2. eg: docker rmi tomcat:9.0

    注意:docker rmi  = docker image rm,标签可以理解为指定版本,可有可无,根据实际情况而定,不写的话默认最新版本的镜像

          3.从仓库拉取镜像

            

    1. docker pull 镜像名称:标签
    2. eg:docker pull tomcat:8.0

            4.把本地镜像推送到仓库

    docker push tomcat:9.0

    注意:

            1.想要推送必须先登录到目标仓库

            2.镜像名称可以在docker images中查看,docker hub是docker 官方提供的共用镜像仓库,如果是第三方仓库也可以在指定仓库中搜索,如果是通过dockerfile构建的镜像,可以使用from 指定镜像名称,如果是docker compose,可以在compose文件中使用image来指定镜像名称

    2.容器相关操作

            1.查看运行的容器

    docker ps

            2.查看全部容器(包括正在运行的)

    1. docker ps -a
    2. 参数
    3. -a 查看全部,不跟参数时,只显示运行的容器

    注意:不同的docker版本可能有不同的状态,上述状态是常见的状态

    up :表示容器正在运行

    exited : 表示容器已经停止运行,如果容器以正常方式退出,则状态exited,并且在容器退出后可以使用docker start  命令重启容器

    created :表示容器一斤干杯创建,但是尚未启动

    restarting : 表示容器正在重新启动

    paused:表示容器当前处于暂停状态

    dead :表示容器的进程已经死亡

    3.启动容器

            1.参数启动方式

    docker run -d 镜像名称

            参数: -d 表示容器后台运行

    第一次启动之后就会生成容易id ,可以通过docker ps 查看

    1. docker run --name my-redis-container -p 6379:6379 -d 镜像名称
    2. 参数:
    3. --name 表示启动后的容器名称
    4. -p 6379:6379 端口映射:前表示主机部分,:后表示容器部分
    5. redis 表示启动的镜像名称

    2.默认启动方式

    docker start 容器id

    3.配置文件启动方式

    docker -compose -f mariadb.yml up -d

    参数

            -d 后台启动服务,如果没有 -d ,就是直接前台输出启动日志信息,ctrl+c后,服务就停了

            -f 指定yml文件

            up 创建和启动容器

    1. version:'3.1'
    2. services:
    3. #数据库服务名称
    4. mariadb
    5. #镜像名称
    6. image:mariadb:10.5.5
    7. container_name:"mariadb"
    8. #总是重启后启动
    9. restart:slways
    10. #设置访问账号密码
    11. environment:
    12. MYSQL_USER:"root"
    13. MYSQL_PASSWORD:"123456"
    14. TZ:"Asia/Shanghai"
    15. #端口映射
    16. ports:
    17. -"3306:3306"
    18. #挂载
    19. volumes:
    20. -/data/mysql:/var/lib/mysql
    21. -/var/log/mysql:/var/log/mysql
    22. -/etc/mysql:/etc/mysql

    4.停止服务

            

    1. docker stop 容器名
    2. eg:docker stop 64028b3163

    或者停止服务并删除容器

    1. docker -compose -f mariadb.yml down
    2. 参数:
    3. -f 指定yml文件
    4. -down 停止和删除容器、网络、镜像、卷

    5.重启服务

    docker resatart 容器id

    6.删除停止的容器

    docker rm 容器id

    7.强制删除运行的容器

    docker rm -f 容器id

    8查看服务日志

    1. docker logs -f --tail=100 容器id 或者服务名
    2. 参数:
    3. -f 时实查看日志
    4. --tail = 100 显示最新的100行

    9 . 进入容器

    1. docker exec -it 容器id bash
    2. 参数:
    3. exec 正在运行的容器中执行命令
    4. -it 开启交互模式终端
    5. Bash 模式
    6. 退出:exit

    10.修改镜像名称或者tag

    docker tag tomcat:9.0 tomcat_new:9.0.0

    相当于另存为一个镜像,名称和tag随便起,但是经常的id 是一样的

    11.把镜像打成tar包

    1. docker save -o tomcat.tar tomcat:9.0
    2. 参数:
    3. -o 写入文件

    12.把镜像tar包恢复到本地

    1. docker load -i tomcat.tar
    2. 参数:
    3. -i 从tar 归档文件中读取

    13.复制容器内文件到本地目录下,也可以吧容器里目录下文件复制出来到本地

    docker cp d2d5sdf2sf2ds :/etc/mysql/my.cnf /home/

  • 相关阅读:
    详解MeerEVM:MeerDAG共识下的智能合约执行引擎
    scrapy的使用
    Linux虚拟化网络之vlan配置
    用一个极致简单的场景演练领域建模
    【UniApp】-uni-app-CompositionAPI应用生命周期和页面生命周期
    [附源码]java毕业设计ssm宠物交易网站论文
    CSS波浪进度条
    神经元模型图手工制作,神经元模型图手工模型
    ROI的投入产出比是什么?
    【ARM微型电脑/IoT设备/嵌入式】树莓派安装失败sysstat,成功后还是无法使用sar,并报错:-bash:sar:command not found
  • 原文地址:https://blog.csdn.net/weixin_47347921/article/details/133130875