docker 学习笔记 02

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

猜你喜欢

转载自www.cnblogs.com/leafs99/p/docker_learning_02.html