docker 学习笔记(2)

docker

Containerizing an application

workflow

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

create image

  1. Clone 一个示例项目:node

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

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

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

    • 启动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 .docker

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

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

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

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

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

  7. 还能够基于已有的 image 建立新的 image:在已有的 image 中操做以后,执行 docker commit -m="description" -a="author" containerID imageName架构

  8. 能够在 registry 中存储和管理 imageapp

部署到 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 执行服务的某一个命令

相关文章
相关标签/搜索