zoukankan      html  css  js  c++  java
  • docker 学习笔记(2)

    docker

    Containerizing an application

    workflow

    1. 首先创建 Docker image,为应用程序的每个组件创建和测试单独的 container
    2. 将您的容器和支持基础架构组装成一个完整的应用程序,以 Docker stack file 或 Kubernetes YAML 表示
    3. 测试,共享和部署完整的容器化应用程序

    create image

    1. Clone 一个示例项目:

      git clone -b v1 https://github.com/docker-training/node-bulletin-board
      cd node-bulletin-board/bulletin-board-app
      
    2. 包含源代码和 dockerfile 文件:

      FROM node:6.11.5    
      
      WORKDIR /usr/src/app
      COPY package.json .
      RUN npm install    
      COPY . .
      
      CMD [ "npm", "start" ]    
      

      编写 Dockerfile 是容器化应用程序的第一步。您可以将这些 Dockerfile 命令视为有关如何构建映像的逐步指南。此步骤采取以下步骤:

      • 启动FROM先前存在的node:6.11.5图像。这是由 node.js 供应商构建的官方映像,并已由 Docker 验证为包含节点6.11.5解释器和基本依赖项的高质量映像。
      • 使用WORKDIR指定的后续操作应该从目录中取/usr/src/app 你的映像文件系统(从不主机的文件系统)。
      • COPY``package.json从您的主机到.图像中当前位置()的文件(因此在此情况下为/usr/src/app/package.json
      • RUN``npm install映像文件系统内的命令(将读取该命令package.json以确定应用程序的节点依赖性,并安装它们)
      • COPY 在应用程序其余部分的源代码中,从主机到图像文件系统。
    3. node-bulletin-board/bulletin-board-app目录下,执行此命令创建一个 image: docker image build -t bulletinboard:1.0 .

    4. 根据新的 image 启动容器:docker container run --publish 8000:8080 --detach --name bb bulletinboard:1.0 ,我们在这里使用了几个常见的标志:

      • --publish 要求Docker将主机端口8000上传入的流量转发到容器的端口8080(容器具有自己的专用端口集,因此如果我们要从网络访问一个端口,则必须以这种方式将流量转发给它;否则,防火墙规则将阻止所有网络流量到达您的容器,这是默认的安全状态)。
      • --detach 要求Docker在后台运行此容器。
      • --name让我们指定一个名称,在以后的命令中,我们可以使用该名称来引用我们的容器bb

      还要注意,我们没有指定我们要运行容器的进程。我们没有必要,因为我们CMD在构建Dockerfile时使用了指令。因此,Docker知道npm start在容器启动时会自动运行该过程。

    5. 访问 localhost:8000 ,看到公告板应用程序已启动并正在运行

    6. 删除容器: docker container rm --force bb

    7. 还可以基于已有的 image 创建新的 image:在已有的 image 中操作之后,执行 docker commit -m="description" -a="author" containerID imageName

    8. 可以在 registry 中存储和管理 image

    部署到 kubernetes

    1. 编辑 yaml 文件,如 bb.yaml内容
    2. kubectl apply -f bb.yaml
    3. kubectl get deployments
    4. kubectl get services
    5. 访问 localhost:30001
    6. 删除应用程序: kubectl delete -f bb.yaml

    configure networking

    分类

    • bridge :需要多个容器在同一Docker主机上进行通信时
    • host:当网络堆栈不应与Docker主机隔离时,但希望容器的其他方面隔离时
    • overlay:需要在不同Docker主机上运行的容器进行通信时,或者当多个应用程序使用集群服务一起工作时
    • macvlan:从VM设置迁移或需要容器看起来像网络上的物理主机(每个主机都有唯一的MAC地址)时
    • none:通常与自定义网络驱动程序一起使用,none不适用于群体服务
    • 网络插件:可以将Docker与专用网络堆栈集成
    • 常用命令:
      • 参考
      • docker network create --driver bridge net1
      • docker network inspect net1
      • docker network ls
      • docker network rm net1
      • docker network connect net1 container1
      • docker network disconnect net1 container1
      • docker network prune

    bridge

    • 可以使用默认的 bridge 网络,也可以自定义,参考

    overlay

    • 参考
    • 集群中,两个主机上的容器,通过两个主机之间的相同的覆盖网络通信

    docker cp

    • 从容器复制文件或目录到宿主机: docker cp container1:path <path>
    • 从宿主机复制文件或目录到容器:docker cp <path> container1:path

    docker compose

    intro

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

    基本分三个步骤:

    • 编写 Dockerfile 定义环境
    • 编写 docker-compose.yml 定义 app 的服务
    • 运行 docker-compose up ,使用 compose 启动运行服务
    • 参考

    常用命令:

    • docker-compose up docker-compose up -d(后台运行)

    • docker-compose down(删除)

    • docker-compose ps

    • docker-compose stop(停止)

    • docker-compose run cmd 执行服务的某一个命令

  • 相关阅读:
    VMWare安装Solaris虚拟机的网络设置
    PeopleTools预警程序制作
    listener.ora增加监听端口
    用.Net Mage工具更新WPF ClickOnce应用程序部署清单
    基本测试方法用例场景
    Qt Vs msvc debug版本没有问题但release版本出现异常
    Qt 打包release发布问题
    Qt 鼠标悬浮按钮上出现浮窗效果
    Qt 样式对于QPushbutton 增加 hover press release效果
    阿里云ECS无法通过SSL远程链接问题。
  • 原文地址:https://www.cnblogs.com/leafs99/p/docker_learning_02.html
Copyright © 2011-2022 走看看