• 快速入门 Docker,看这一篇文章就够


    一、简介

    1

    什么是 Docker?

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 操作系统的机器上运行,方便做持续集成并有助于整体的发布的容器虚拟化技术。

    2

    Docker 的应用场景

    Web 应用的自动化打包和发布

    自动化测试和持续集成、发布

    在服务型环境中部署和调整数据库或其他的后台应用

    从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境

    3

    Docker 的核心概念:

    镜像:Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统

    容器:镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等

    仓库:仓库可看成一个代码控制中心,用来保存镜像

    二、安装配置

    1

    安装

    安装命令如下:

    curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
    
    • 1

    也可以使用国内 daocloud 一键安装命令:

    curl -sSL https://get.daocloud.io/docker | sh
    
    • 1

    2

    配置镜像加速器

    针对 Docker 客户端版本大于 1.10.0 的用户

    您可以通过修改 daemon 配置文件

    /etc/docker/daemon.json 来使用加速器

    各大云服务厂商都有提供镜像加速服务,登录之后可以在自己获取

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
    "registry-mirrors": ["https://自己的云服务的加速地址"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    三、操作命令

    1

    docker 帮助命令

    启动 docker :systemctl start docker

    停止 docker: systemctl stop docker

    重启 docker: systemctl restart docker

    查看 docker 状态:systemctl status docker

    开机启动:systemctl enable docker

    查看 docker 概要信息:docker info

    查看帮助文档:docker --help

    查看命令帮助文档:docker 命令 --help

    2

    镜像命令

    列出本地所有镜像:docker images

    参数:

    -a:列出本地所有镜像
    -q:只显示镜像 ID

    搜索镜像:docker search 镜像名

    下载镜像:docker pull 镜像名:版本

    不指定版本,默认下载最新版

    查看容器镜像,容器,数据卷所占空间:docker system df

    删除镜像 :docker rmi 镜像ID

    删除单个:docker rmi 镜像1ID

    删除多个:docker rmi 镜像1ID 镜像2ID

    3

    容器命令

    创建容器:docker run 镜像名

    demo:

    docker run 镜像名 -i -t --name newname

    参数:

    -a stdin: 指定标准输入输出内容类型,

    可选 STDIN/STDOUT/STDERR 三项;
    -d: 后台运行容器,并返回容器 ID;
    -i: 以交互模式运行容器,通常与 -t 同时使用;
    -P: 随机端口映射,容器内部端口随机映射到主机的端口
    -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
    -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
    –name=“aa”: 为容器指定一个名称;
    -h “mars”: 指定容器的 hostname;

    -e username=“ritchie”: 设置环境变量;

    –env-file=[]: 从指定文件读入环境变量;
    -m :设置容器使用内存最大值;
    –link=[]: 添加链接到另一个容器;
    –expose=[]: 开放一个端口或一组端口;
    –volume , -v: 绑定一个卷

    查看容器:docker ps

    查看所有启动的容器(包括停止的容器),加参数 -a

    docker ps -a

    进入容器:docker exec -it 容器名|ID /bin/bash

    退出容器:容器内执行命令exit

    停止容器运行:doker stop 容器名

    启动容器:docker start 容器名

    删除容器:docker rm 容器名

    四、数据卷

    1

    什么是数据卷

    Docker 容器删除后,在容器中产生的数据也会销毁,容器内部如何和外部机器共享数据,容器之间数据交互怎么解决?

    2

    配置数据卷

    启动容器时,使用参数 -v 设置数据卷

    docker run -v 宿主机目录(文件):容器内目录(文件)
    同时挂载多个文件和目

    docker run -v 宿主机目录1(文件):容器内目录1(文件) -v 宿主机目录2(文件):容器内目录2(文件)

    多个容器挂载同一个文件

    docker run -it --name Cb -v /home/data:/v2/data centos

    docker run -it --name Cb -v /home/data:/v1/data ubuntu
    3

    数据卷容器的配置

    创建数据卷容器

    docker run -it --name=musen -v /volume centos

    创建容器继承数据卷容器的挂载目录

    docker run -it --name=a1 --volumes-form centos

    4

    数据卷管理命令

    查看所有的数据卷

    docker volume ls
    删除指定的数据卷

    docker volume rm 数据卷

    查看数据卷的具体位置

    [root@ecs-170297 home]# docker volume inspect jenkins_home
    [
    {
    “CreatedAt”: “2022-02-16T22:00:38+08:00”,
    “Driver”: “local”,
    “Labels”: null,
    # 数据卷数据存储的具体位置
    “Mountpoint”: “/var/lib/docker/volumes/jenkins_home/_data”,
    “Name”: “jenkins_home”,
    “Options”: null,
    “Scope”: “local”
    }
    ]

    五、端口映射

    将宿主机的端口和容器内部端口进行映射,实现外部机器可以访问容器

    -P: 随机端口映射,容器内部端口随机映射到主机的端口
    -p: 指定端口映射,格式为:主机(宿主)端口:容器端口

    docker run -id -p 3307:3306 centos:7

    六、DockerFile

    1

    什么是 Dockerfile?

    Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

    2

    镜像制作

    容器转为镜像

    #把容器打包为镜像
    docker commit 容器ID 镜像名称:版本号
    #把镜像转换为压缩文件
    docker save -o 压缩文件名称 镜像名称:版本号
    #将压缩文件还原为镜像
    docker load -i 压缩文件名称

    通过 Docker File 制作镜像

    1、编写 DockerFile 文件

    FROM centos:7
    MAINTAINER musen121292679@qq.com
    RUN yum install -y vim
    WROKDIR /usr
    CMD /bin/bash

    2、通过 dockerFile 构建镜像

    docker build -f ./xxxDcokerFile -t musenCentos:1 .

    参数说明

    -f:指定 dockerFile 文件

    -t:指定构建出来的镜像名和版本

    3

    DockerFile 命令

    FROM: 构建镜像基于哪个镜像

    MAINTAINER :镜像维护者姓名或邮箱地址

    RUN :构建镜像时运行的指令

    CMD :运行容器时执行的 shell 环境

    VOLUME : 指定容器挂载点到宿主机自动生成的目录或其他容器

    USER :为 RUN、CMD、和 ENTRYPOINT 执行命令指定运行用户

    WORKDIR: 为 RUN、CMD、ENTRYPOINT、COPY和 ADD 设置工作目录,就是切换目录

    HEALTHCHECH :健康检查

    ARG: 构建时指定的一些参数

    EXPOSE :声明容器的服务端口(仅仅是声明)

    ENV: 设置容器环境变量

    ADD: 拷贝文件或目录到容器中,如果是 URL 或压缩包便会自动下载或自动解压

    COPY:拷贝文件或目录到容器中,跟 ADD 类似,但不具备自动下载或解压的功能

    ENTRYPOINT:运行容器时执行的 shell 命令

    ►►►

    七、Docker Compose

    1

    简介和安装

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

    Compose 安装

    下载 Compose

    # github下载
    $ sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    # 国内镜像下载
    $sudo curl -L https://get.daocloud.io/docker/compose/releases/download/2.28.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    
    • 1
    • 2
    • 3
    • 4

    将可执行权限应用于二进制文件:

    $ sudo chmod +x /usr/local/bin/docker-compose
    
    • 1

    验证是否安装成功

    卸载

    $ sudo rm /usr/local/bin/docker-compose
    
    • 1

    2

    Compose 使用步骤:

    使用 Dockerfile 定义应用程序的环境。

    使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。

    执行 docker-compose up 命令来启动并运行整个应用程序。

    3

    Compose 常用指令

    version

    指定本 yml 文件按照的 compose 哪个版本编写的。

    services

    多个容器服务的集合

    version: “3.7”
    services:

    容器1

    webapp:
    build: ./dir

    容器2

    mysql:
    xxx: xxx

    容器3

    nginx:
    xxx: xxx

    build

    指定为构建镜像上下文路径:

    例如 webapp 服务,指定为从上下文路径 ./dir/Dockerfile 所构建的镜像:

    version: "3.7"
    services:
      webapp:
        build: ./dir
    
    • 1
    • 2
    • 3
    • 4

    image

    指定容器运行的镜像。以下格式都可以:

    version: "3.7"
    services:
      redis:
        image: redis
    
    • 1
    • 2
    • 3
    • 4

    volumes

    将宿主机的数据卷或着文件挂载到容器里。

    使用绝对路径进行挂载

    version: "3.7"
    services:
      db:
        image: mariadb:latest
        volumes:
          - "/home/data:/var/mysql/data"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    使用的数据卷标进行挂载( 简洁易于管理,但是数据实际存放的位置需要费点周折才能看到 )

    version: "3.7"
    services:
      db:
        image: mariadb:latest
        volumes:
          - [卷标名称]:/var/lib/mysql
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    volumes:
    [卷标名称]:

    查看卷标的信息

    docker volume inspect [卷标名称]
    #输出的信息中 Mountpoint 即为数据实际存放的位置

    查看所有的卷标

    docker volume ls
    ports

    设置宿主机和容器的映射端口

    version: "3.7"
    services:
      db:
        image: redis:latest
        ports:
        - "6379:6379"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    expose

    暴露端口,但不映射到宿主机,只被连接的服务访问。

    仅可以指定内部端口为参数:

    expose:
     - "3000"
     - "8000"
    
    • 1
    • 2
    • 3

    restart

    设置容器重启策略

    no:是默认的重启策略,在任何情况下都不会重启容器。

    always:容器总是重新启动。

    on-failure:在容器非正常退出时(退出状态非 0),才会重启容器。

    unless-stopped:在容器退出时总是重启容器,但是不考虑在 Docker 守护进程启动时就已经停止了的容器

    container_name
    
    • 1

    指定自定义容器名称,而不是生成的默认名称。

    version: "3.7"
    services:
      django-app:
      container_name: my-web-app
    
    
    environment
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    添加环境变量。您可以使用数组或字典、任何布尔值,布尔值需要用引号引起来,以确保 YML 解析器不会将其转换为 True 或 False。

    environment:
      MYSQL_ROOT_PASSWORD: pythonvip
      MYSQL_DATABASE: test
    
    
    depends_on
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    设置容器启动的顺序依赖关系

    version: "3.7"
    services:
      web:
        build: .
        depends_on:
          - db
          - redis
      redis:
        image: redis
      db:
        image: postgres
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    上面的案例:先启动 db 和 Redis ,才会启动 Web 这个容器

    command
    
    • 1

    覆盖容器启动的默认命令参数

    command: ["bundle", "exec", "thin", "-p", "3000"]
    
    
    links
    
    • 1
    • 2
    • 3
    • 4

    将指定容器连接到当前连接 ,服务之间可以使用服务名称相互访问

    可以设置别名,避免 ip 方式导致的容器重启动态改变的无法连接情况

    version: '3'
    services:
        web:
            build: .
            links:
              # 指定服务名称:别名
                - "db:database"
        db:
            image: mysql
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    这样 Web 服务就可以使用 db 或 database 作为 host 地址 访问 db 服务了。

    最后感谢每一个认真阅读我文章的人,下面这个网盘链接也是我费了几天时间整理的非常全面的,希望也能帮助到有需要的你!

    在这里插入图片描述

    这些资料,对于想转行做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……

    如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以点击下方小卡片加入我们群,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。

    敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。

    自学推荐B站视频:

    零基础转行软件测试:自学完软件测试,拿到了字节的测试岗offer,堪称B站最好的视频!

    自动化测试进阶:已上岸华为,涨薪20K,2022最适合自学的python自动化测试教程,自己花16800买的,无偿分享

    在这里插入图片描述

  • 相关阅读:
    web网页设计期末课程大作业 我的美丽家乡盐城 HTML+CSS+JavaScript
    Runc 漏洞(CVE-2021-30465)离线修复
    vue2.0中自适应echarts图表、全屏插件screenfull
    Python代码部署的三种加密方案:代码混淆、代码编译、代码打包
    1998年考研真题英语二(204)阅读理解翻译
    四十、Fluent 颗粒\气泡PBM模型
    32. 最长有效括号
    【工程实践】CatBoost进行多分类
    数据库经典笔试题
    力扣名企直通车-学习计划-网易-刷题记录
  • 原文地址:https://blog.csdn.net/weixin_57805858/article/details/126056556