• docker-compose hello word


      Compose 是 Docker 容器进行编排的工具, 是一个整合发布docker应用的利器,可定义和运行多容器的应用,在 Compose 中你可以使用 YAML 文件来配置你的应用服务。然后,只需要一个简单的命令,就可以创建并启动你配置的所有服务。

    使用 Compose 基本会有如下三步流程:

    • 在 Dockfile 中定义你的应用环境,可以是多个docker应用。
    • 在 docker-compose.yml 中定义组成应用程序的服务。
    • 使用dcoker-compose up命令 运行整个应用程序解决方案。

    1,docker-compose 安装:

    docker-compose 在GitHub发布,可以在这里获取到最新版本:https://github.com/docker/compose/releases 

    根据官方安装方法,执行下面命令安装

    sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

    设置目录权限

    sudo chmod +x /usr/local/bin/docker-compose

    测试安装

    docker-compose --version
    #或
    docker-compose -v

    2,在你的服务器上获取你的docker images

       略

    3,编排 docker-compose.yml 

    Docker Compose 将所管理的容器分为三层,分别是工程(project)、服务(service)、容器(container)

    Docker Compose project 文件的默认路径是 ./docker-compose.yml,一个工程包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖,一个服务可包括多个容器实例

    version: '2' # 表示该 Docker-Compose 文件使用的是 Version 2 file
    services:  # 要启动的 docker 服务列表
      demo-docker:   # 第一个服务(注意格式:相对上一行两个空格)
        image: "ejiyuan/demo-docker:latest"  # 镜像名称 (注意格式:image相对上一行,空两格 ,: 后空一格,以下类推)
        ports:
          - "9000:8080" # 启动端口(注意格式:“-”前面两个空格,后面一个空格)
        volumes:   #挂载一个路径
         - .:/code
      redis:   # 第二个服务
        image: "redis:alpine"

    PS:Compose目前为止有三个版本分别为Version 1,Version 2,Version 3,Compose区分Version 1和Version 2(Compose 1.6.0+,Docker Engine 1.10.0+)。Version 2支持更多的指令。Version 1没有声明版本默认是"version 1"。Version 1将来会被弃用。

    4,在 Compose 中构建并运行你的应用:

    在 docker-compose.yml 所在路径下执行该命令 Compose 就会自动构建镜像并使用镜像启动容器

    docker-compose up
    docker-compose -f -p up -d  // 后台启动并运行容器

    参数:

    Options:
      -f, --file FILE             Specify an alternate compose file (default: docker-compose.yml)
      -p, --project-name NAME     Specify an alternate project name (default: directory name)

    默认如果没有指定具体的compose配置文件,那么就docker-compose.yml,并且如果不指定项目名称,默认就是文件夹的name

    结果如下:

    5,查看

    docker-compose images #查看镜像
    docker-compose ps #查看进程

    查看docker运行状态

    两个都启动了

    6,config 显示 docker-compose.yml配置

    docker-compose [-f] config [--services]

    结果如下:

    7,down:停止并删除容器、网络、镜像、数据卷

    docker-compose down

    结果如下:

    Options:
        --rmi type          Remove images. Type must be one of:
                            'all': Remove all images used by any service.
                            'local': Remove only images that don't have a custom tag
                            set by the `image` field.
        -v, --volumes       Remove named volumes declared in the `volumes` section
                            of the Compose file and anonymous volumes
                            attached to containers.
        --remove-orphans    Remove containers for services not defined in the
                            Compose file

    8,build

    服务除了可以基于指定的镜像,还可以基于一份 Dockerfile,在使用 up 启动之时执行构建任务,这个构建标签就是 build,它可以指定 Dockerfile 所在文件夹的路径。Compose 将会利用它自动构建这个镜像,然后使用这个镜像启动服务容器

    设定上下文根目录,然后以该目录为准指定 Dockerfile

    build:
      context: ../
      dockerfile: path/of/Dockerfile
    args:
    user:zhangsan
    • context 选项可以是 Dockerfile 的文件路径,也可以是到链接到 git 仓库的 url
    • 使用此 dockerfile 文件来构建,必须指定构建路径context 
    • args 指定构建参数的值。首先要在 Dockerfile 中指定参数名,然后再使用该选项指定参数值

    例子:

    文件结构如下:

    Dockerfile文件

    FROM openjdk:8-jdk-alpine
    VOLUME /tmp
    ADD demo-docker-0.0.1-SNAPSHOT.war app.war
    RUN sh -c 'touch /app.war'
    RUN echo "Asia/Shanghai" > /etc/timezone
    ARG active #占位符,等待从compose 中带入
    ENV JAVA_OPTS=""
    ENV spring.profiles.active=${active}
    ENTRYPOINT ["java","-jar","/app.war"]

     docker-compose.yml文件配置

    version: '2'
    services:
      db:    #对应 docker run --name my_postgres -d -p 5432:5432 -e POSTGRES_PASSWORD=123456 -e PGDATA=/data/ -e POSTGRES_USER=admin -e POSTGRES_DB=my_db postgres
        restart: always
        image: postgres
        ports:
          - "5432:5432"
        environment:
          POSTGRES_PASSWORD: 123456
          PGDATA: /data/
          POSTGRES_USER: admin
          POSTGRES_DB: my_db
      web:
        build:
          context: .
          args:
            active: prod #将值带入到Dockerfile文件中
        ports:
          - "8080:8081"
        links:
          - db

    执行

    docker-compose up -d

    结果如下:

    9,volumes 挂在数据卷

     指定服务要使用的卷。如果仅针对某一服务,可以只指定卷主机路径。但若要多个服务使用,应该使用在顶层范围下的 volumes 选项中指定的卷名。 

     docker-compose.yml文件配置

    version: '3'
    services:
      db:
        restart: always
        image: postgres
        ports:
          - "5432:5432"
        environment:
          POSTGRES_PASSWORD: 123456
          PGDATA: /data/
          POSTGRES_USER: admin
          POSTGRES_DB: my_db
        volumes:
          - ./code:/data # 将宿主的当前目录(docker-compose.yml所在目录)映射到docker容器中的/data 目录
      web:
        build:
          context: .
          args:
            active: prod #将值带入到Dockerfile文件中
        ports:
          - "8080:8081"
        volumes:
          - data_volume:/tmp
     links: - db volumes: data_volume: #设置一个可用作共享的券,很遗憾 无法挂载到本地指定目录

    执行

    docker-compose up -d

    查看本地code目录并登陆到 docker 容器中对比文件

    内容是一致的

    修改  “./code:/data” 为 “data_volume:/data”  ,docker-compose up 启动

    搜索定义的卷名称

    docker volume ls | grep data_volume

    查看卷详细信息 

    docker volume inspect docker_data_volume

     

    cd /var/lib/docker/volumes/docker_data_volume/_data

    登陆到两个 容器终端分别查看 /data与/tmp 内容是一致的

    10,networks 加入指定网络

    docker-compose.yml文件配置

    version: '3'
    services:
      db:
        restart: always
        image: postgres
        ports:
          - "5432:5432"
        environment:
          POSTGRES_PASSWORD: 123456
          PGDATA: /data/
          POSTGRES_USER: admin
          POSTGRES_DB: my_db
        networks:
          - new_net_1
      web:
        build:
          context: .
          args:
            active: prod #将值带入到Dockerfile文件中
        ports:
          - "8080:8081"
        networks:
          - new_net_1
        links:
          - db
    networks:
      new_net_1:
    启动 
    docker-compose up -d

    查看网络

    docker network ls

    查看网络详情

    两个服务都加入到定义的新网络中了

    11. 其他

    docker-compose.yml 配置文件编写详解

    Docker Compose 配置文件详解

    docker-compose使用指南

    docker-compose教程(安装,使用, 快速入门)

    r-compose 文件配置选项

  • 相关阅读:
    Bolero and Data Mining
    2007年3月15日 网站论坛出现以下错误/forum/inc/Dv_ClsMain.asp,行 1344
    A Probabilistic Model for Retrospective News Event
    信息抽取的资料文档
    Textual Data Mining and WEBSOM
    DockPanel Suite更新到2.6了 武胜
    Use Custom Events from your WCF ServiceHost http://www.codeproject.com/Tips/150702/UseCustomEventsfromyourWCFServiceHost 武胜
    Unable to convert MySQL date/time value to System.DateTime 解决方案 转 武胜
    XML 转义字符 武胜
    Using Nini .NET Configuration Library 武胜
  • 原文地址:https://www.cnblogs.com/ejiyuan/p/10482488.html
Copyright © 2020-2023  润新知