• Docker:基础


    docker的概念 :docker是一个可供开发者在容器中 开发 部署 运行 应用的一个平台。通过使用Linux容器去部署应用的方式称为容器化。

    基础概念

    Images and Container

    image:镜像,镜像是一个可执行包,其中包含了运行应用的内容:代码、运行环境、库、环境变量、配置文件等内容。

    container:容器,容器需要通过运行一个镜像来启动。即一个镜像的运行实例。可以理解为镜像运行后在内存中的状态。通过 docker ps 可以查看。

    Containers and Virtual machines

    容器在Linux上本机运行,并与其他容器共享主机的内核。它运行一个独立的进程,不占用任何其他可执行文件的内存,使其轻量级。

    相比之下,虚拟机(VM)运行一个完整的“客户”操作系统,通过虚拟机管理程序对主机资源进行虚拟访问。通常,VM提供的环境比大多数应用程序需要的资源更多。

    Service

    服务:在分布式应用程序中,应用程序的不同部分称为“服务”。 例如,如果您想象一个视频共享站点,它可能包括一个用于在数据库中存储应用程序数据的服务,一个用户在上传内容后在后台进行视频转码的服务,一个用于前端的服务,等等。

    服务实际上只是“生产中的容器”。服务只运行一个镜像,但它编码了镜像运行的方式 ,它应该使用哪些端口,应该运行多少个容器副本,以便服务具有所需的容量,以及 等等。 扩展服务会更改运行该软件的容器实例的数量,从而为流程中的服务分配更多计算资源。

    Task

    任务:在服务中运行的单个容器称为任务。任务被赋予以数字递增的唯一ID,最多为在docker-compose.yml中定义的副本数。

    Swarm

    集群:是一组运行Docker并加入群集的计算机。在此之后,您继续运行您习惯使用的Docker命令,但现在它们由群集管理器(swarm manager)在群集上执行。群中的机器可以是物理的或虚拟的。加入群组后,它们被称为节点(nodes)。

     swarm manager 可以使用多种策略来运行容器,例如“最空闲的节点”(emptiest node),它使用容器填充利用率最低的机器。 或“全局”,它确保每台机器只获得指定容器的一个实例。 Compose文件中配置swarm manager执行这些策略。

     swarm manager是swarm中唯一可以执行命令的机器,或者授权其他机器作为工作者(worker)加入群集。 worker只是在那里提供能力,没有权力告诉任何其他机器它能做什么和不能做什么。

    Stack

    stack是一组相互关联的服务,它们共享依赖关系,并且可以协调和扩展。 单个堆栈能够定义和协调整个应用程序的功能(尽管非常复杂的应用程序可能希望使用多个堆栈)。

    安装

    官方文档十分详细地介绍了各个环境的安装步骤。

    基础使用

    查看docker的详细安装信息

    docker info

    运行hello-world镜像,惯例了

    docker run hello-world

    完整命令是(参考 https://docs.docker.com/engine/reference/commandline/run/

    docker run [ OPTIONS ] IMAGE [ COMMAND ] [ ARG... ]

    查看当前机器下的镜像

    docker image ls 

    查看当前机器下的镜像(-aq all in quiet mode)

    docker container ls

    再次进入容器示例

    docker exec -it 775c7c9ee1e1 bash

    Dockerfile

    Dockerfile定义容器内环境中发生的事情。

    创建一个Dockerfile工作空间,新建一个Dockerfile文件,然后将相应的代码,资源文件放入其中。(当然你也可以在项目的目录中建一个Dockerfile文件,这样这个目录就可以被Docker管理了)。

    在Dockerfile文件中输入构建的指令,运行以下命令,生成镜像

    docker build --tag=friendlyhello .

    注意最后的一个点,表示当前目录。其中--tag=friendlyhello表示给镜像命名,如果要加tag,应该写作--tag=friendlyhello:v0.0.01

    运行应用,可以加 -d 参数在后台运行,其中-p表示设置映射端口号。

    docker run -p 4000:80 friendlyhello

    可以查看container的容器id,然后终止容器

    docker container stop 1fa4a

    给镜像重新命名,加标签

    docker tag image username/repository:tag

    推送镜像到云端(先登录)

    docker push username/repository:tag

    从远程仓库拉取并运行镜像

    docker run -p 4000:80 username/repository:tag

    Service

    编写一个docker-compose.yml文件,用于定义,运行和扩展服务。docker-compose.yml文件需要定义服务的基础镜像,占用资源,端口映射等信息。

    编写好docker-compose.yml文件后,执行如下命令,初始化集群(swarm)

    docker swarm init

    docker stack deploy -c docker-compose.yml getstartedlab

    查看服务

    docker service ls

    或者用如下命令查看

    docker stack services getstartedlab

     查看服务中的任务列表

    docker service ps getstartedlab_web

    如果要扩展应用规模,需修改docker-compose.yml中replicas参数,然后执行下面的命令:

    docker stack deploy -c docker-compose.yml getstartedlab

    关闭应用和集群

    docker stack rm getstartedlab

    docker swarm leave --force

    查看运行的服务

    docker service ls

    Swarm

    swarm由多个节点组成,可以是物理或虚拟机。 基本概念很简单:运行 docker swarm init 以启用 swam manager 并使当前计算机成为一个 swam manager,然后在其他计算机上运行docker swarm join以使它们作为worker加入swarm。 

    假如创建了连个vm,分别命名为wm1和wm2,将wm1设置为swarm manager

    docker-machine ssh myvm1 "docker swarm init --advertise-addr <myvm1 ip>"

    将myvm2加入swarm作为worker

    docker-machine ssh myvm2 "docker swarm join --token <token> <ip>:2377"

    将当前shell切换至myvm1环境

    docker-machine env myvm1

    查看节点信息

    docker node ls

    关闭集群

    docker stack rm getstartedlab

    重启Docker machines

    docker-machine start <machine-name>

    参考

    https://docs.docker.com/get-started/part6/

    Docker容器进入的4种方式

  • 相关阅读:
    静态变量一定要先声明后赋值
    建议3 三元操作的类型必一致
    IDEA 创建 Maven web项目注意事项
    js不同类型作比较
    exception中return方法
    exception 打印出异常栈踪迹
    spring controller使用了@ResponseBody却返回xml
    springboot中的406(Not Acceptable)错误
    把本地建好的项目提交到git上
    java基础---------方法和方法重载
  • 原文地址:https://www.cnblogs.com/colin220/p/10746619.html
Copyright © 2020-2023  润新知