GVKun编程网logo

Docker 系列教程 21-Docker Compose 快速入门(docker compose实战)

16

本文将为您提供关于Docker系列教程21-DockerCompose快速入门的详细介绍,我们还将为您解释dockercompose实战的相关知识,同时,我们还将为您提供关于DockerCLI实战指南

本文将为您提供关于Docker 系列教程 21-Docker Compose 快速入门的详细介绍,我们还将为您解释docker compose实战的相关知识,同时,我们还将为您提供关于Docker CLI 实战指南:从基础命令到 Dockerfile 构建和 Docker Compose、Docker Compose 和 Docker Swarm 和 Docker Service、Docker Compose比Docker Swarm和Docker Stack有什么好处?、Docker 从入门到进阶七:DockerFile 与 Docker Compose的实用信息。

本文目录一览:

Docker 系列教程 21-Docker Compose 快速入门(docker compose实战)

Docker 系列教程 21-Docker Compose 快速入门(docker compose实战)

原文:http://www.itmuch.com/docker/21-docker-compose-quick-start/,转载请注明出处。

本节我们来探讨 Compose 使用的基本步骤,并编写一个简单示例快速入门。

基本步骤

使用 Compose 大致有三个步骤:

  • 使用 Dockerfile(或其他方式)定义应用程序环境,以便在任何地方重现该环境。
  • 在 docker-compose.yml 文件中定义组成应用程序的服务,以便各个服务在一个隔离的环境中一起运行。
  • 运行 docker-compose up 命令,启动并运行整个应用程序。

入门示例

下面笔者以之前课上用到的 Eureka 为例讲解 Compose 的基本步骤。

  • microservice-discovery-eureka-0.0.1-SNAPSHOT.jar 所在路径(默认是项目的 target 目录)创建 Dockerfile 文件,并在其中添加如下内容。

    FROM java:8
    VOLUME /tmp
    ADD microservice-discovery-eureka-0.0.1-SNAPSHOT.jar app.jar
    RUN bash -c ''touch /app.jar''
    EXPOSE 9000
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
    
  • microservice-discovery-eureka-0.0.1-SNAPSHOT.jar 所在路径创建文件 docker-compose.yml,在其中添加如下内容。

    version: ''2''			# 表示该docker-compose.yml文件使用的是Version 2 file format
    services:
      eureka:				# 指定服务名称
        build: .			# 指定Dockerfile所在路径
        ports:
          - "8761:8761"		# 指定端口映射,类似docker run的-p选项,注意使用字符串形式
    
  • docker-compose.yml 所在路径执行以下命令。

    docker-compose up
    

    Compose 就会自动构建镜像并使用镜像启动容器。我们也可使用 docker-compose up -d 后台启动并运行这些容器。

  • 访问:http://宿主机IP:8761/ ,即可访问 Eureka Server 首页。

工程、服务、容器

Docker Compose 将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。Docker Compose 运行目录下的所有文件(docker-compose.yml, extends 文件或环境变量文件等)组成一个工程(默认为 docker-compose.yml 所在目录的目录名称)。一个工程可包含多个服务;每个服务中定义了容器运行的镜像、参数和依赖,一个服务可包括多个容器实例。

对应《入门示例》一节,工程名称是 docker-compose.yml 所在的目录名。该工程包含了 1 个服务,服务名称是 eureka;执行 docker-compose up 时,启动了 eureka 服务的 1 个容器实例。

Docker CLI 实战指南:从基础命令到 Dockerfile 构建和 Docker Compose

Docker CLI 实战指南:从基础命令到 Dockerfile 构建和 Docker Compose

Docker 学习路线 11:Docker命令行

Docker CLI (命令行界面) 是一个强大的工具,可让您与 Docker 容器、映像、卷和网络进行交互和管理。它为用户提供了广泛的命令,用于在其开发和生产工作流中创建、运行和管理 Docker 容器和其他 Docker 资源。

安装

要开始使用 Docker CLI,您需要在计算机上安装 Docker。您可以从 Docker 文档的官方安装指南中按照您所使用的操作系统进行安装。

基本命令

以下是一些基本的 Docker CLI 命令,供您熟悉:

  • docker run:从 Docker 映像创建并启动容器
  • docker container:列出正在运行的容器
  • docker image:列出系统中所有可用的映像
  • docker pull:从 Docker Hub 或其他注册表拉取映像
  • docker push:将映像推送到 Docker Hub 或其他注册表
  • docker build:从 Dockerfile 构建映像
  • docker exec:在正在运行的容器中运行命令
  • docker logs:显示容器的日志

Docker Run 选项

docker run 是 Docker CLI 中最重要的命令之一。您可以使用各种选项自定义容器的行为,例如:

  • d, --detach:在后台运行容器
  • e, --env:为容器设置环境变量
  • v, --volume:绑定挂载卷
  • p, --publish:将容器的端口发布到主机
  • name:为容器指定名称
  • restart:指定容器的重启策略
  • rm:容器退出时自动删除容器

Dockerfile

Dockerfile 是一个包含构建 Docker 映像的指令的脚本。您可以使用 Docker CLI 使用 Dockerfile 构建、更新和管理 Docker 映像。

以下是 Dockerfile 的一个简单示例:

# Set the base image to use
FROM alpine:3.7
# Update the system and install packages
RUN apk update && apk add curl
# Set the working directory
WORKDIR /app
# Copy the application file
COPY app.sh .
# Set the entry point
ENTRYPOINT ["./app.sh"]

要构建映像,请使用以下命令:

docker build -t my-image .

Docker Compose

Docker Compose 是一个 CLI 工具,用于使用 YAML 文件定义和管理多容器 Docker 应用程序。它与 Docker CLI 协作,提供了一种一致的方式来管理多个容器及其依赖项。

使用官方的安装指南安装 Docker Compose,然后您可以创建一个 docker-compose.yml 文件来定义和运行多容器应用程序:

version: ''3''
services:  
web:    
image: webapp-image    
ports:      - "80:80"  
database:    
image: mysql    
environment:      - MYSQL_ROOT_PASSWORD=my-secret-pw

使用以下命令运行应用程序:

docker-compose up

总之,Docker CLI 是管理 Docker 容器和资源的强大而多才多艺的工具。一旦熟悉其命令和功能,您将能够轻松开发、维护和部署使用 Docker 的应用程序。

Docker镜像

Docker镜像是一种轻量级、独立、可执行的软件包,其包含了运行应用程序所需的所有组件。这些组件包括:依赖项、库、运行时、系统工具和代码等,以确保应用程序在不同的环境中可以保持一致地运行。

Docker镜像是使用Dockerfile进行构建和管理的。Dockerfile是一个包含了创建Docker镜像所需指令的脚本,提供了一个逐步设置应用程序环境的指南。

使用Docker镜像

Docker CLI提供了多个命令来管理和使用Docker镜像。其中一些重要的命令包括:

  • docker image ls:列出本地系统上所有可用的镜像。
  • docker build:从Dockerfile构建镜像。
  • docker image rm:删除一个或多个镜像。
  • docker pull:从注册表(如Docker Hub)将镜像拉到本地系统。
  • docker push:将镜像推送到仓库。

例如,要从Docker Hub拉取官方的Ubuntu镜像,可以运行以下命令:

docker pull ubuntu:latest

拉取镜像后,可以使用docker run命令创建和运行一个使用该镜像的容器:

docker run -it ubuntu:latest /bin/bash

这个命令将创建一个新的容器,并使用**/bin/bash** shell在容器内启动一个交互式会话。

共享镜像

Docker镜像可以使用容器注册表(如Docker Hub、Google Container Registry或Amazon Elastic Container Registry(ECR))共享和分发。一旦将您的镜像推送到注册表中,其他人就可以轻松地访问和使用它们。

要共享您的镜像,您首先需要使用适当的命名格式对其进行标记:

docker tag <image-id> <username>/<repository>:<tag>

然后,您可以使用以下命令将标记的镜像推送到注册表中:

docker push <username>/<repository>:<tag>

总之,Docker镜像是Docker生态系统中不可或缺的一部分,允许开发人员打包其应用程序、轻松地共享它们,并在不同的环境中确保一致性。通过理解Docker镜像和管理它们的命令,您可以利用容器化的力量,增强您的开发工作流程。在您的开发过程中使用Docker镜像可以大大提高开发效率,减少开发过程中的问题,让您能够更好地专注于应用程序的核心开发。

容器

容器可以被视为轻量级的、独立的可执行软件包,包括运行所需的所有东西,包括代码、运行时、库、环境变量和配置文件。容器将软件与其环境隔离开来,确保其在不同环境下工作一致。

为什么使用容器?

  • 可移植性:容器确保应用程序在不同平台上一致工作,无论是开发人员的笔记本电脑还是生产服务器。这消除了“它在我的机器上运行”的问题。
  • 效率:容器很轻量级,因为它们使用共享资源,没有完整操作系统的开销。这使得启动时间更快,减少资源使用。
  • 可扩展性:容器可以根据工作量轻松地进行缩放,因此非常适合分布式应用程序和微服务。
  • 一致性:容器使得开发人员、QA 和运维团队在整个应用程序生命周期中拥有一致的环境,从而加快了部署流程。
  • 安全性:容器提供了一定程度的隔离,使其与其他容器和底层主机系统隔离开来,有助于维护应用程序的安全性。

使用 Docker CLI 工作

Docker CLI 提供了多个命令,可帮助您创建、管理和与容器交互。一些常用命令包括:

  • docker run:用于创建和启动新容器。
  • docker container ls:列出运行中的容器。
  • docker container stop:停止运行中的容器。
  • docker container rm:删除已停止的容器。
  • docker exec:在运行中的容器中执行命令。
  • docker logs:获取容器的日志,有助于调试问题。

Docker卷

Docker卷是一种用于存储Docker容器生成和使用的数据的机制。它们允许您将数据与容器本身分开,从而轻松备份、迁移和管理持久性数据。

卷的重要性

Docker容器本质上是暂时的,这意味着它们可以轻松地停止、删除或替换。尽管这对应用程序开发和部署非常有利,但处理持久性数据时会带来挑战。这就是卷的作用。它们提供了一种将数据存储和管理与容器的生命周期分开的方法。

卷的类型

Docker中有三种类型的卷:

  • 主机卷:它们存储在主机机器的文件系统中,通常位于/var/lib/docker/volumes目录中。这些可以很容易地访问,但可能会带来可移植性或文件系统兼容性问题。
  • 匿名卷:这些是在运行容器时没有指定卷时自动生成的。它们的ID由Docker生成,也存储在主机机器的文件系统中。
  • 命名卷:与匿名卷类似,命名卷也存储在主机机器的文件系统中。但是,您可以提供自定义名称,这样在其他容器中引用或备份时更容易。

使用Docker CLI管理卷

Docker CLI提供了各种命令来管理卷:

  • docker volume create: 使用给定的名称创建新卷。
  • docker volume ls: 列出系统中的所有卷。
  • docker volume inspect: 提供有关特定卷的详细信息。
  • docker volume rm: 删除卷。
  • docker volume prune: 删除所有未使用的卷。

要在容器中使用卷,可以在docker run命令期间使用-v--volume标志。例如:

docker run -d --name my-container -v my-named-volume:/var/lib/data my-image

此命令使用“my-image”映像创建一个名为“my-container”的新容器,并在容器内部将“my-named-volume”卷挂载到/var/lib/data路径。

Docker 网络

Docker 网络提供了管理容器通信的重要方法。它允许容器使用各种网络驱动程序相互通信并与主机机器通信。通过理解和利用不同类型的网络驱动程序,您可以设计容器网络以适应特定的场景或应用程序需求。

网络驱动程序

Docker 中有几个可用的网络驱动程序。这里,我们将介绍四个最常见的驱动程序:

  • bridge:容器的默认网络驱动程序。它创建了一个私有网络,容器可以相互通信并与主机机器通信。在此网络上的容器可以通过主机网络访问外部资源。
  • host:该驱动程序取消了网络隔离并允许容器共享主机的网络。在网络性能至关重要的情况下,它非常有用,因为它最小化了容器网络的开销。
  • none:该网络驱动程序禁用容器网络。使用此驱动程序的容器在没有任何网络访问的隔离环境下运行。
  • overlay:该网络驱动程序使部署在不同主机上的容器能够相互通信。它专为 Docker Swarm 设计,并且非常适合多主机或基于集群的容器部署。

管理 Docker 网络

Docker CLI 提供了各种命令来管理网络。以下是一些有用的命令:

  • 列出所有网络:docker network ls
  • 检查网络:docker network inspect <network_name>
  • 创建新网络:docker network create --driver <driver_type> <network_name>
  • 将容器连接到网络:docker network connect <network_name> <container_name>
  • 将容器与网络断开连接:docker network disconnect <network_name> <container_name>
  • 删除网络:docker network rm <network_name>

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎 点赞、收藏、关注

Docker Compose 和 Docker Swarm 和 Docker Service

Docker Compose 和 Docker Swarm 和 Docker Service

Docker Compose

介绍

通过yml文件配置,高效管理多个docker,启停

中文文档

https://www.jb51.cc/manual/view/36129.html

安装

# 慢
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 国内镜像
$ sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

授权文件

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

测试

$ docker-compose --version
docker-compose version 1.27.4, build 1110ad01

卸载

sudo rm /usr/local/bin/docker-compose

测试使用(官方给的)

1创建文件夹

$ mkdir composetest
$ cd composetest

2写测试程序Python。app.py

import time

import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)

def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)

@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)

3创建py文件依赖文件requirements.txt

flask
redis

4创建Dockerfile文件

FROM python:3.7-alpine
workdir /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
copY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
copY . .
CMD ["flask", "run"]

5创建docker-compose.yml

# version: "3.9" 需要版本对应
version: "3"
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

6使用Compose构建并运行应用程序

docker-compose up
# 后台运行
# docker-compose up -d

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-87feppxX-1608950922543)(C:\Users\admin\AppData\Local\Temp\1608866566146.png)]

  1. docker images 自动下载依赖镜像
  2. 默认服务名: 文件名 _ 服务名 _ num(集群副本数量)
  3. 创建docker compose自己默认网络,并将所有启动的容器添加到网络中
  4. 在同一网络下可以直接使用域名访问

停止

# 前端运行使用 ctrl + c 停止
# 后台运行使用
docker-compose stop

yml文件规则

version: "3" # docker-compose核心版本
services: # 服务
	fw: # 服务名称
		image: redis # 服务配置
		ports: # 服务配置2
      		- "5000:5000"
      	depends_on: # 依赖(启动顺序)
      		- fw2
      		- redis
      	..... # 容器启动的所有配置
	fw2: 
		image: # 服务配置

官方文档 https://docs.docker.com/compose/compose-file/compose-file-v2/

测试开源程序(官方给的)

创建工作文件夹 my_wordpress/

创建docker-compose.yml

version: '3.3'

services:
   db:
     image: MysqL:5.7
     volumes:
       - db_data:/var/lib/MysqL
     restart: always
     environment:
       MysqL_ROOT_PASSWORD: somewordpress
       MysqL_DATABASE: wordpress
       MysqL_USER: wordpress
       MysqL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       wordpress_DB_HOST: db:3306
       wordpress_DB_USER: wordpress
       wordpress_DB_PASSWORD: wordpress
       wordpress_DB_NAME: wordpress
volumes:
    db_data: {}

后台运行

docker-compose up -d

Docker Swarm

  • 集群
  • 必须有两个或两个以上主节点才能运行

Swarm mode cluster

[root@centos3 ~]# docker swarm --help

Usage:  docker swarm COMMAND

Manage Swarm

Commands:
  ca          管理根CA
  init        初始化集群
  join        加入集群
  join-token  创建加入令牌
  leave       离开集群
  unlock      解锁群
  unlock-key  管理解锁密钥
  update      更新集群

Run 'docker swarm COMMAND --help' for more information on a command.

1初始化一个集群

docker swarm init [OPTIONS]
名字,简写默认描述
–advertise-addr通告地址(格式:<ip | interface>:端口)
–autolock启用管理器自动锁定(需要解锁密钥才能启动停止的管理器)
–availabilityactive节点的可用性(“活动”|“暂停”|“漏”)
–cert-expiry2160h0m0s节点证书的有效期(ns | us | ms | s | m | h)
–data-path-addr用于数据路径流量的地址或接口(格式:<ip | interface>)
–dispatcher-heartbeat5S调度员心跳周期(ns | us | ms | s | m | h)
–external-ca一个或多个证书签名端点的规格
–force-new-cluster强制从当前状态创建一个新的群集
–listen-addr0.0.0.0:2377监听地址(格式:<ip | interface>:端口)
–max-snapshots0要保留的附加木筏快照的数量
–snapshot-interval10000Raft快照之间的日志条目数
–task-history-limit5任务历史保留限制
# 初始化集群
docker swarm init --advertise-addr 192.168.0.191

2加入一个节点

docker swarm join [OPTIONS] HOST:PORT
名字,简写默认描述
–advertise-addr通告地址(格式:<ip | interface>:端口)
–availabilityactive节点的可用性(“活动”|“暂停”|“漏”)
–data-path-addr用于数据路径流量的地址或接口(格式:<ip | interface>)
–listen-addr0.0.0.0:2377监听地址(格式:<ip | interface>:端口)
–token进入群的令牌
# 例如加入一个节点
# 令牌SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2
docker swarm join --token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2 192.168.0.191:2377

3获取令牌

docker swarm join-token [OPTIONS] (worker|manager)
# 工作令牌
docker swarm join-token worker
# 管理令牌
docker swarm join-token manager

查看节点

# 查看节点
docker node

Docker Service

docker service COMMAND
命令描述
docker service create创建一项新服务
docker service inspect显示一项或多项服务的详细信息
docker service logs获取服务或任务的日志
docker service ls列出服务
docker service ps列出一项或多项服务的任务
docker service rm删除一项或多项服务
docker service scale扩展一个或多个复制服务
docker service update更新服务

1创建服务

docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]
名字,简写默认描述
–config指定配置以暴露给服务
–constraint展示位置限制
–container-label容器标签
–credential-spec托管服务帐户的凭证规范(仅限Windows)
–detach,-d真正立即退出,而不是等待服务收敛
–dns设置自定义DNS服务器
–dns-option设置DNS选项
–dns-search设置自定义DNS搜索域
–endpoint-mode要人端点模式(vip或dnsrr)
–entrypoint覆盖图像的默认入口点
–env,-e设置环境变量
–env-file读入环境变量文件
–group为容器设置一个或多个补充用户组
–health-cmd运行以检查运行状况的命令
–health-interval运行检查之间的时间(ms | s | m | h)
–health-retries0需要报告不健康的连续失败
–health-start-period在重新计数到不稳定(ms | s | m | h)之前,容器初始化的开始时间段
–health-timeout允许一次检查运行的最长时间(ms | s | m | h)
–host设置一个或多个自定义主机到IP映射(主机:IP)
–hostname容器主机名
–label, -l服务标签
–limit-cpu限制cpu
–limit-memory0限制记忆
–log-driver记录驱动程序的服务
–log-OPT记录驱动程序选项
–mode复制服务模式(复制或全局)
–mount将文件系统挂载附加到服务
–name服务名称
–network网络附件
–no-healthcheck禁用任何容器指定的HEALTHCHECK
–no-resolve-image不要查询注册表来解析图像摘要和支持的平台
–placement-PREF添加展示位置首选项
–publish,-p将端口发布为节点端口
–quiet,-q抑制进度输出
–read-only将容器的根文件系统挂载为只读
–replicas任务数量
–reserve-cpu预留cpu
–reserve-memory0保留内存
–restart-condition满足条件时重新启动(“none”|“on-failure”|“any”)(默认为“any”)
–restart-delay重启尝试之间的延迟(ns | us | ms | s | m | h)(默认5秒)
–restart-max-attempts放弃前的最大重启次数
–restart-window用于评估重新启动策略的窗口(ns | us | ms | s | m | h)
–rollback-delay0任务回滚之间的延迟(ns | us | ms | s | m | h)(默认值为0)
–rollback-failure-action回滚失败的操作(“暂停”|“继续”)(默认“暂停”)
–rollback-max-failure-ratio0在回滚期间容忍的失败率(默认0)
–rollback-monitor0(ns | us | ms | s | m | h)(默认5秒)每个任务回滚之后的持续时间
–rollback-order回滚顺序(“start-first”|“stop-first”)(默认“stop-first”)
–rollback-parallelism1同时回滚的任务的最大数量(0一次全部回滚)
–secret指定泄露给服务的秘密
–stop-grace-period强制杀死一个容器之前等待的时间(ns | us | ms | s | m | h)(默认10秒)
–stop-signal停止容器的信号
–tty, -t分配一个伪TTY
–update-delay0更新之间的延迟(ns | us | ms | s | m | h)(默认为0)
–update-failure-action更新失败的操作(“暂停”|“继续”|“回滚”)(默认“暂停”)
–update-max-failure-ratio0更新期间容许的失败率(默认0)
–update-monitor0(ns | us | ms | s | m | h)(默认5秒)每个任务更新后的持续时间
–update-order更新顺序(“start-first”|“stop-first”)(默认为“stop-first”)
–update-parallelism1同时更新的最大任务数(0个一次全部更新)
–user,-u用户名或UID(格式:<名称| uid>:<组| gid>)
–with-registry-auth向注册代理发送注册表认证详细信息
–workdir,-w容器内的工作目录
# 例如,启动一个Nginx服务,暴露8080端口
docker service create -p 8080:80 --name Nginx01 Nginx
# docker run 容器启动,单机版本
# docker service 服务启动,支持扩缩容器
# 查看服务
docker service ps Nginx01
# 查看副本
docker service ls
# 查看详情
docker service inspect Nginx01

2更新服务

docker service update [OPTIONS] SERVICE
名字,简写默认描述
–args服务命令参数
–config-add添加或更新服务上的配置文件
–config-RM删除配置文件
–constraint-add添加或更新展示位置约束
–constraint-RM删除约束
–container-label-add添加或更新容器标签
–container-label-rm用钥匙取出容器标签
–credential-spec托管服务帐户的凭证规范(仅限Windows)
–detach,-d立即退出,而不是等待服务收敛
–dns-add添加或更新自定义DNS服务器
–dns-option-add添加或更新DNS选项
–dns-option-rm删除一个DNS选项
–dns-rm删除自定义的DNS服务器
–dns-search-add添加或更新自定义DNS搜索域
–dns-search-rm删除一个DNS搜索域
–endpoint-mode端点模式(vip或dnsrr)
–entrypoint覆盖图像的默认入口点
–env-add添加或更新环境变量
–env-RM删除一个环境变量
–force即使没有更改需要,也强制更新
–group-add向容器添加一个附加的补充用户组
–group-RM从容器中删除先前添加的补充用户组
–health-cmd运行以检查运行状况的命令
–health-interval运行检查之间的时间(ms | s | m | h)
–health-retries0需要报告不健康的连续失败
–health-retries在重新计数到不稳定(ms | s | m | h)之前,容器初始化的开始时间段
–health-timeout允许一次检查运行的最长时间(ms | s | m | h)
–host加添加或更新自定义主机到IP映射(主机:IP)
–host-RM删除自定义的主机到IP映射(主机:IP)
–hostname容器主机名
–image服务图片标签
–label-add添加或更新服务标签
–label-RM用钥匙去除标签
–limit-cpu限制cpu
–limit-memory0限制记忆
–log-driver记录驱动程序的服务
–log-OPT记录驱动程序选项
–mount-add添加或更新服务上的装载
–mount-RM通过目标路径移除一个安装
–network加添加一个网络
–network-RM删除网络
–no-healthcheck禁用任何容器指定的HEALTHCHECK
–no-resolve-image不要查询注册表来解析图像摘要和支持的平台
–placement-PREF-ADD添加展示位置首选项
–placement-PREF-RM删除展示位置偏好设置
–publish相加添加或更新已发布的端口
–publish-RM通过目标端口删除发布的端口
–quiet,-q抑制进度输出
–read-only将容器的根文件系统挂载为只读
–replicas任务数量
–reserve-cpu预留cpu
–reserve-memory0保留内存
–restart-condition条件满足时重新启动(“none”|“on-failure”|“any”)
–restart-delay重启尝试之间的延迟(ns | us | ms | s | m | h)
–restart-max-attempts放弃前的最大重启次数
–restart-window用于评估重新启动策略的窗口(ns | us | ms | s | m | h)
–rollback回退到先前的规范
–rollback-delay0任务回滚之间的延迟(ns | us | ms | s | m | h)
–rollback-failure-action回滚失败的操作(“暂停”|“继续”)
–rollback-max-failure-ratio0在回滚期间容忍的失败率
–rollback-monitor0每个任务回滚后监视失败的持续时间(ns | us | ms | s | m | h)
–rollback-order回滚顺序(“start-first”|“stop-first”)
–rollback-parallelism0同时回滚的任务的最大数量(0一次全部回滚)
–secret-add添加或更新服务的秘密
–secret-RM去掉一个秘密
–stop-grace-period强制杀死一个容器之前的等待时间(ns | us | ms | s | m | h)
–stop-signal停止容器的信号
–tty, -t分配一个伪TTY
–update-delay0更新之间的延迟(ns | us | ms | s | m | h)
–update-failure-action更新失败的操作(“暂停”|“继续”|“回滚”)
–update-max-failure-ratio0更新期间容错的失败率
–update-monitor0(ns | us | ms | s | m | h)每个任务更新后的持续时间
–update-order更新顺序(“start-first”|“stop-first”)
–update-parallelism0同时更新的最大任务数(0个一次全部更新)
–user,-u用户名或UID(格式:<名称| uid>:<组| gid>)
–with-registry-auth向注册代理发送注册表认证详细信息
–workdir,-w容器内的工作目录
# 为 Nginx01 创建 10 个副本
docker service update --replicas 10 Nginx01 
# 或 使用 scale 命令
docker service scale Nginx01=10

移除服务

docker service rm Nginx01

Docker Compose比Docker Swarm和Docker Stack有什么好处?

Docker Compose比Docker Swarm和Docker Stack有什么好处?

从我读到的内容来看,似乎Docker-Compose是一个在单个主机上创建多个容器的工具,而Docker Swarm是一个可以完全相同但具有更多控制权的工具,并且在Docker Stack的帮助下可以在多个主机上完成.我浏览了教程,也遇到了这个帖子:

docker-compose.yml vs docker-stack.yml what difference?

而且我得出的结论是,当你可以将Docker Swarm与Docker Stack一起使用时,没有理由使用Docker-Compose.他们甚至可以使用相同的docker-compose.yml.

似乎Docker-compose出现在swarm和堆栈之前,并且可能是swarm堆栈的新解决方案使得compose过时,但它仍然是遗留原因.这个想法是否正确?如果没有,在构建开发或生产环境方面,Docker-Compose对Docker Swarm和Docker Stack有什么好处?

最佳答案

It seems that Docker-compose came before the swarm and stack and maybe the new solution of swarm + stack makes compose obsolete,but it still remains for legacy reasons. Is this thinking correct?

简而言之,是的. Compose在所有Swarm之前出现(它起源于名为fig的第三方实用程序).更糟糕的是,甚至还有两个不同的Swarms,旧的Swarm(一个是单独的工具)和Swarm模式(这些日子内置于docker二进制文件中).

它似乎正在演变为内置于Docker中的服务和部署概念.但我猜想Docker Compose和Swarm Mode部署的东西会并存一段时间.

知道Docker Compose基础是一个名为libcompose(https://github.com/docker/libcompose)的库是有益的,其他第三方实用程序使用它来支持用于部署的docker-compose.yml文件格式(参见Rancher和rancher-compose作为示例) .我想他们会努力继续支持libcompose.

我不清楚Docker Swarm部署的东西是否实际上使用了libcompose.在我粗略的搜索中,Swarm模式似乎没有实现libcompose并且做了自己的事情.我不确定这与Docker Compose和libcompose的未来有何关系.你认为合适的解释……

Docker 从入门到进阶七:DockerFile 与 Docker Compose

Docker 从入门到进阶七:DockerFile 与 Docker Compose

在这里插入图片描述

文章目录

    • Dockerfile
      • Dockerfile 是什么
      • Dockerfile 规则
      • Dockerfile 构建镜像示例
      • Dockerfile 保留字
    • 虚悬镜像
    • Docker Compose 容器编排
      • Docker Compose 是什么?
      • 下载安装 compose
      • compose 使用步骤
      • compose 常用命令

Dockerfile

Dockerfile 是什么

Dockerfile 是用来 构建 Docker 镜像 的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。

就拿我之前几次虚拟机崩溃的例子来说吧,别的咱也不说。由于我的虚拟机上部署着我毕设的一大堆环境,每次崩溃我都要一个一个去给它们下载回来,那时候我就在想,我能不能搞个一键安装的 shell 脚本,放那儿自己运行,我一觉醒来啥都配好了。

现在上容器了,一两个镜像咱自己安装就好了,但是原生 Linux 系统那是真的要啥没啥啊,还手动一个个安装吗?能确保一个不落吗?还是直接给我来个清单一键安装吧。


Dockerfile 规则

FROM:定制的镜像都是基于 FROM 的镜像。
RUN:用于执行后面跟着的命令行命令。

RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。

・1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数
・2:指令按照从上到下,顺序执行
・3:# 表示注释
・4:每条指令都会创建一个新的镜像层并对镜像进行提交,所以过多无意义的层,会造成镜像膨胀过大。

以下两种写法高下立判:

FROM centos
RUN yum -y install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz

以上执行会创建 3 层镜像。可简化为以下格式:


FROM centos
RUN yum -y install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && tar -xvf redis.tar.gz

如上,以 && 符号连接命令,这样执行后,只会创建 1 层镜像。


Dockerfile 构建镜像示例

在 Dockerfile 文件的存放目录下,执行构建动作:

mkdir myfile
cd myfile
vim Dockerfile
FROM ubuntu
MAINTAINER wlf<lion@qq.com>
 
ENV MYPATH /usr/local
WORKDIR $MYPATH
 
#安装vim编辑器
#安装ifconfig命令查看网络IP
#安装java8及lib库
RUN apt install net-tools && install vim && glibc.i686 && mkdir /usr/local/java

#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
 
EXPOSE 80
 
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

构建:docker build -t 新镜像名字:TAG .

在这里插入图片描述

Dockerfile 保留字

    FROM- 镜像从那里来

    MAINTAINER- 镜像维护者信息

    RUN- 构建镜像执行的命令,每一次RUN都会构建一层

    CMD- 容器启动的命令,如果有多个则以最后一个为准,也可以为ENTRYPOINT提供参数

    VOLUME- 定义数据卷,如果没有定义则使用默认

    USER- 指定后续执行的用户组和用户

    WORKDIR- 切换当前执行的工作目录

    HEALTHCHECH- 健康检测指令

    ARG- 变量属性值,但不在容器内部起作用

    EXPOSE- 暴露端口

    ENV- 变量属性值,容器内部也会起作用

    ADD- 添加文件,如果是压缩文件也解压

    COPY- 添加文件,以复制的形式

    ENTRYPOINT- 容器进入时执行的命令

虚悬镜像

・仓库名、标签都是的镜像,俗称 dangling image。

from ubuntu
CMD echo ''action is success''

喏,这个就可以构建出来一个,瞅一眼。

查看所有当前虚悬镜像:

docker image ls -f dangling=true

删除所有虚悬镜像:

docker image prune

留着也没用。


Docker Compose 容器编排

Docker Compose 是什么?

Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件
docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动 / 关闭这些容器

Docker-Compose 是 Docker 官方的开源项目, 负责实现对 Docker 容器集群的快速编排。


下载安装 compose

官网:https://docs.docker.com/compose/

下载命令:

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

compose 使用步骤

·编写Dockerfile定义各个微服务应用并构建出对应的镜像文件
·使用 docker-compose.yml 定义一个完整业务单元,安排好整体应用中的各个容器服务。
·最后,执行docker-compose up命令 来启动并运行整个应用程序,完成一键部署上线

关于 yml 文件教程:待补全。


compose 常用命令

Compose常用命令
docker-compose -h                           # 查看帮助
docker-compose up                           # 启动所有docker-compose服务
docker-compose up -d                        # 启动所有docker-compose服务并后台运行
docker-compose down                         # 停止并删除容器、网络、卷、镜像。
docker-compose exec  yml里面的服务id                 # 进入容器实例内部  docker-compose exec docker-compose.yml文件中写的服务id /bin/bash
docker-compose ps                      # 展示当前docker-compose编排过的运行的所有容器
docker-compose top                     # 展示当前docker-compose编排过的容器进程
docker-compose logs  yml里面的服务id     # 查看容器输出日志
docker-compose config     # 检查配置
docker-compose config -q  # 检查配置,有问题才有输出
docker-compose restart   # 重启服务
docker-compose start     # 启动服务
docker-compose stop      # 停止服务

本文同步分享在 博客 “看,未来”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与 “OSC 源创计划”,欢迎正在阅读的你也加入,一起分享。

关于Docker 系列教程 21-Docker Compose 快速入门docker compose实战的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Docker CLI 实战指南:从基础命令到 Dockerfile 构建和 Docker Compose、Docker Compose 和 Docker Swarm 和 Docker Service、Docker Compose比Docker Swarm和Docker Stack有什么好处?、Docker 从入门到进阶七:DockerFile 与 Docker Compose等相关内容,可以在本站寻找。

本文标签: