GVKun编程网logo

docker - 调试 Dockerfile(docker如何调试程序)

15

这篇文章主要围绕docker-调试Dockerfile和docker如何调试程序展开,旨在为您提供一份详细的参考资料。我们将全面介绍docker-调试Dockerfile的优缺点,解答docker如何

这篇文章主要围绕docker - 调试 Dockerfiledocker如何调试程序展开,旨在为您提供一份详细的参考资料。我们将全面介绍docker - 调试 Dockerfile的优缺点,解答docker如何调试程序的相关问题,同时也会为您带来Docker 04 应用部署与迁移备份 Dockerfile 与 Docker 私有仓库、Docker CLI 实战指南:从基础命令到 Dockerfile 构建和 Docker Compose、docker history 查看docker镜像构建过程 还原dockerfile 查看启动参数、Docker | Docker技术基础梳理(八) - Dockerfile定制镜像浅析的实用方法。

本文目录一览:

docker - 调试 Dockerfile(docker如何调试程序)

docker - 调试 Dockerfile(docker如何调试程序)

dockerfile 编写的过程中,不可避免会遇到运行构建新镜像错误的问题,那么我们应该怎样调试 dockerfile 呢。其实,当我们遇到某个指令失败时,我们也能够得到前一个指令构建的镜像。因此,我们可以进入到前一个临时镜像,调试下一个指令。

在 /root/debug-dockerfile 目录下创建一个 Dockerfile 构建一个包含有错误命令的新镜像

root@localhost debug-dockerfile]# pwd
/root/debug-dockerfile

Dockerfile

FROM centos:7.4.1708
RUN touch tmpfile
RUN cp tmpfile tmpdir/

    很明显,该 dockerfile 的第三个命令是会运行失败的,因为当前目录没有 tmpdir 目录。

    运行 Dockerfile 后,报错信息如下,在 step3,即 RUN cp tmpfile tmpdir/ 时出现了错误。

[root@localhost debug-dockerfile]# docker build -t debug-dockerfile .
Sending build context to Docker daemon   2.56kB
Step 1/3 : FROM centos:7.4.1708
 ---> 295a0b2bd8ea
Step 2/3 : RUN touch tmpfile
 ---> Running in 7530981ccd45
Removing intermediate container 7530981ccd45
 ---> 8408a48380c2
Step 3/3 : RUN cp tmpfile tmpdir/
 ---> Running in a50d0a45ce94
cp: cannot create regular file ''tmpdir/'': Not a directory
The command ''/bin/sh -c cp tmpfile tmpdir/'' returned a non-zero code: 1

这时,我们可以进入到前面一个指令中获取到的临时镜像 8408a48380c2,调试下一个指令。

[root@localhost debug-dockerfile]# docker run -it 8408a48380c2

通过 ll 命令,我们可以看到上一个命令创建的文件 tmpfile

 

Docker 04 应用部署与迁移备份 Dockerfile 与 Docker 私有仓库

Docker 04 应用部署与迁移备份 Dockerfile 与 Docker 私有仓库

MySQL 部署   

    拉取 mysql 镜像    docker pull centos/mysql-57-centos7

    创建 MySQL 容器    docker run -di --name=mysql01 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=320512 centos/mysql-57-centos7

    -p 代表端口映射,格式为 宿主机映射端口:容器运行端口
    -e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是 root 用户的登录密码

Tomcat 部署

    拉取镜像 docker pull tomcat:7-jre7

    创建容器 创建容器 -p 表示地址映射

    docker run ‐di ‐‐name=mytomcat ‐p 9000:8080

    ‐v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7‐jre7

Nginx 部署

    拉取镜像    docker pull nginx

    创建容器    docker run ‐di ‐‐name=mynginx ‐p 80:80 nginx

Redis 部署

    拉取镜像    docker pull redis

    创建容器    docker run ‐di ‐‐name=myredis ‐p 6379:6379 redis

 

 

迁移与备份

    容器保存为镜像

    我们可以通过以下命令将容器保存为镜像

    docker commit 容器名称 镜像名称

镜像备份

    我们可以通过以下命令将镜像保存为 tar 文件

    docker save -o tar 文件名称 镜像名称

恢复镜像

    docker load -i tar 文件名称

Dockerfile

    Dockerfile 是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。

    1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;

    2、对于测试人员:可以直接拿开发时所构建的镜像或者通过 Dockerfile 文件构建一个新的镜像开始工作了;

    3、对于运维人员:在部署时,可以实现应用的无缝移植。

常用命令

命令 作用
FROM image_name:tag 定义了使用哪个基础镜像启动构建流程
MAINTAINER user_name 声明镜像的创建者
ENV key value 设置环境变量 (可以写多条)
RUN command 是 Dockerfile 的核心部分 (可以写多条)
ADD source_dir/file dest_dir/file 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file dest_dir/file 和 ADD 相似,但是如果有压缩文件并不能解压
WORKDIR path_dir 设置工作目录

使用脚本创建镜像

步骤:
(1)创建目录

    mkdir –p /usr/local/dockerjdk8

(2)下载 jdk-8u171-linux-x64.tar.gz 并上传到服务器(虚拟机)中的 /usr/local/dockerjdk8 目录

(3)创建文件 Dockerfile vi Dockerfile

#依赖镜像名称和 ID
FROM centos:7
#指定镜像创建者信息
MAINTAINER ITCAST
#切换工作目录
WORKDIR /usr
RUN mkdir /usr/local/java
#ADD 是相对路径 jar, 把 java 添加到容器中
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

(4)执行命令构建镜像(注意后边的空格和点,不能省略)

docker build ‐t=''jdk1.8'' .

参看镜像是否建立完成

docker images

 

Docker 私有仓库

私有仓库搭建与配置

(1)拉取私有仓库镜像(此步省略)

    docker pull registry

(2)启动私有仓库容器

    docker run ‐di ‐‐name=registry ‐p 5000:5000 registry

  (3)    打开浏览器输入地址 http://ip:5000/v2/_catalog,看到 {"repositories":[]} 表示私有仓库搭建成功并且内容为空。

  (4)    修改 daemon.json    vi /etc/docker/daemon.json

            添加以下内容,保存退出,这是为了让 docker 信任私有仓库地址 {"insecure-registries":["ip:5000"]}

重启 docker 服务

    systemctl restart docker

 

镜像上传到私有仓库

    标记此镜像为私有仓库的镜像    docker tag jdk1.8 ip:5000/jdk1.8    

再次启动私服容器

    docker start registry

上传标记的镜像

    docker push ip:5000/jdk1.8

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 history 查看docker镜像构建过程 还原dockerfile 查看启动参数

docker history 查看docker镜像构建过程 还原dockerfile 查看启动参数

介绍:

~]# docker history --help
Usage:  docker history [OPTIONS] IMAGE
Show the history of an image
Options:
      --format string   Pretty-print images using a Go template
      --help            Print usage
  -H,--human           Print sizes and dates in human readable format (default true)
      --no-trunc        Don't truncate output
  -q,--quiet           Only show numeric IDs

示例:

~]# docker history kubeguide/tomcat-app:v1
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
a29e200a18e9        2 years ago         /bin/sh -c #(nop) ADD dir:c5c3bddef49cbc9f...   992kB               
<missing>           2 years ago         /bin/sh -c #(nop) MAINTAINER bestme <bestm...   0B                  
<missing>           2 years ago         /bin/sh -c #(nop) CMD ["catalina.sh" "run"]     0B                  
<missing>           2 years ago         /bin/sh -c #(nop) EXPOSE 8080/tcp               0B                  
<missing>           2 years ago         /bin/sh -c set -e  && nativeLines="$(catal...   0B                  
<missing>           2 years ago         /bin/sh -c set -x   && curl -fSL "$TOMCAT_...   16.6MB              
<missing>           2 years ago         /bin/sh -c #(nop) ENV TOMCAT_TGZ_URL=https...   0B                  
<missing>           2 years ago         /bin/sh -c #(nop) ENV TOMCAT_VERSION=8.0.35     0B                  
<missing>           2 years ago         /bin/sh -c #(nop) ENV TOMCAT_MAJOR=8            0B                  
<missing>           2 years ago         /bin/sh -c set -ex  && for key in   05AB33...   114kB               
<missing>           2 years ago         /bin/sh -c apt-get update && apt-get insta...   7.18MB              
<missing>           2 years ago         /bin/sh -c {   echo 'deb http://httpredir....   172B                
<missing>           2 years ago         /bin/sh -c #(nop) ENV OPENSSL_VERSION=1.0....   0B                  
<missing>           2 years ago         /bin/sh -c #(nop) workdir /usr/local/tomcat     0B                  
<missing>           2 years ago         /bin/sh -c mkdir -p "$CATALINA_HOME"            0B                  
<missing>           2 years ago         /bin/sh -c #(nop) ENV PATH=/usr/local/tomc...   0B                  
<missing>           2 years ago         /bin/sh -c #(nop) ENV CATALINA_HOME=/usr/l...   0B                  
<missing>           2 years ago         /bin/sh -c set -x  && apt-get update  && a...   163MB               
<missing>           2 years ago         /bin/sh -c #(nop) ENV JAVA_DEBIAN_VERSION=...   0B                  
<missing>           2 years ago         /bin/sh -c #(nop) ENV JAVA_VERSION=7u101        0B                  
<missing>           2 years ago         /bin/sh -c #(nop) ENV JAVA_HOME=/usr/lib/j...   0B                  
<missing>           2 years ago         /bin/sh -c {   echo '#!/bin/sh';   echo 's...   87B                 
<missing>           2 years ago         /bin/sh -c #(nop) ENV LANG=C.UTF-8              0B                  
<missing>           2 years ago         /bin/sh -c apt-get update && apt-get insta...   1.17MB              
<missing>           2 years ago         /bin/sh -c apt-get update && apt-get insta...   44.3MB              
<missing>           2 years ago         /bin/sh -c #(nop) CMD ["/bin/bash"]             0B                  
<missing>           2 years ago         /bin/sh -c #(nop) ADD file:5d8521419ad6cfb...   125MB

如果要让CREATED BY 列完整显示,可以加上 --no-trunc 参数。直接在shell中看会比较乱,可以输出到文件查看,就比较直观了

以PHPmyadmin docker镜像为例,效果如下:

 

 

 

 

Docker | Docker技术基础梳理(八) - Dockerfile定制镜像浅析

Docker | Docker技术基础梳理(八) - Dockerfile定制镜像浅析

图片

什么是Dockerfile?

Dockerfile其实就是根据特定的语法格式撰写出来的一个普通的文本文件,可以使用docker build命令依次执行在Dockerfile中定义的一系列命令,最终生成一个新的镜像

如果你想要定制属于自己的镜像Dockerfile是你必不可少的工具。

docker build的使用

想要构建定制化的镜像,可以使用docker build运行Dockerfile构建镜像

命令格式: docker build [参数] PATH | URL

其中:

PATH 是Dockerfile所在路径

URL 是Dockerfile所在的URL

常用参数:

-t 为镜像设置名称和tag(不适用-t参数,创建出来的镜像名称以及版本为none)
-f 指定Dockerfile的路径(这是可以使用其他名称命名Dockerfile)

关于Dockerfile构建过程的浅析

在之前关于Docker镜像与容器的文章中,咸鱼对镜像的文件系统做了一个简单的解释,不熟悉的朋友可以再温习一下。

Docker | Docker技术基础梳理(四) - 深入理解镜像与容器

我们先看下可以直接使用的Dockerfile结构是什么样的:

图片

现在简单讲讲咸鱼对Dockerfile构建过程的理解:

Dockerfile的执行顺序是自上而下进行的,当第一次使用Dockerfile构建镜像时Dockerfile中的全部命令都会执行一遍最后构建为一个完整的镜像。

在构建的过程中,每执行一条命令Docker都会执行一次commit命令,接下来的每一条命令都是在前面所有命令集成的镜像基础上再次执行的。

这样的执行有什么好处呢,假设当你执行过一次的镜像构建后想要在Dockerfile中间部分添加一行Dockerfile的命令,那么在执行新的Dockerfile命令时,Docker只会执行新增命令(包括新增命令)之后的构建命令,大大减少了性能的损耗。

Dockerfile常用命令解析

接下来就是关于Dockerfile命令的介绍更多实例可以参考官方的Dockerfile实例:https://github.com/docker-library/docs

关于Dockerfile命令的介绍也可以参考:https://docs.docker.com/engine/reference/builder/#usage

RUN

构建镜像过程中需要执行的命令,可以执行多条

同时RUN命令后可以使用两种形式输入要执行的命令 exec与shell

当使用exec方式输入执行的命令时,命令格式是json格式的,命令在当前进程执行

当使用shell方式输入执行的命令时,命令在子进程中执行(推荐使用shell方式)

CMD与ENTRYPOINT

CMD是添加启动容器是需要执行的命令,多条命令只有最后一条生效,可以在启动容器事被覆盖和修改。
CMD命令格式有三种,exec、shell、默认提供给ENTRYPOINT的命令

  • 命令格式为shell形式,命令是以子进程的形式执行

  • 命令格式为json形式,命令在当前进程执行(推荐使用)

  • 命令格式为json形式,且所有json内容为参数形式,则默认提供给ENTRYPOINT

ENTRYPOINT的使用CMD与相同,但这个一定会被执行,且不会被覆盖和修改

LABEL与MAINTAINER

LABEL用于为镜像添加对应的数据

添加的数据格式为:LABEL key=value …. Key=value

MAINTAINER:用于表示镜像的作者(即将被遗弃使用)

ENV与ARG

ENV用于设置执行命令时的环境变量,并且在构建完成后,仍然生效

ARG用于设置只在构建过程中使用的环境变量,构建完成后消失

ADD与copY

ADD用于将本地文件或目录拷贝到镜像的文件系统中,且能解压特定格式文件,且能将URL作为要拷贝的文件(会先将URL的文件先下载下来再拷贝)

copY将本地文件或目录拷贝到镜像的文件系统中(推荐使用copY+RUN),因为ADD命令对于需要解压的文件支持的不是非常智能

VOLUME

添加数据卷

命令格式可以为数组格式,也可以直接接上路径,路径为容器或镜像中的路径
常用命令行格式为:

VOLUME [“/XXX”]

VOLUME /XXX

USER与workdir

USER指定以哪个用户的名义执行RUN,CMD和ENTRPOINT等命令

workdir设置工作目录

简单实例构建Kafka工作环境

version: '2'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:latest
    environment:
      ZOOKEEPER_CLIENT_PORT: 32181
      ZOOKEEPER_TICK_TIME: 2000

  kafka:
    image: confluentinc/cp-kafka:latest
    depends_on:
      - zookeeper
    ports:
      - 9092:9092
    environment:
      KAFKA_broKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:32181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092
      KAFKA_LISTENER_Security_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_INTER_broKER_LISTENER_NAME: PLAINTEXT
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

这里咸鱼有一个建议,如果当你需要构建某一工作环境但毫无头绪时,在Github上以“xxxt docker”为关键字搜索,希望结果能让你满意。

图片

图片

图片

咸鱼学Python

专注于Python商业化爬虫、Python数据科学的咸鱼

今天关于docker - 调试 Dockerfiledocker如何调试程序的讲解已经结束,谢谢您的阅读,如果想了解更多关于Docker 04 应用部署与迁移备份 Dockerfile 与 Docker 私有仓库、Docker CLI 实战指南:从基础命令到 Dockerfile 构建和 Docker Compose、docker history 查看docker镜像构建过程 还原dockerfile 查看启动参数、Docker | Docker技术基础梳理(八) - Dockerfile定制镜像浅析的相关知识,请在本站搜索。

本文标签: