Tag: dockerfile docker

Docker应用程序部署

我的web应用程序由3个docker容器组成: app (带代码的主容器), redis和node 。 我有部署shell脚本,它执行以下操作: 从git克隆主( git clone <…> $REVISION ) 从文档根目录中删除所有文件( rm -rf $PROJECT_DIR ) 将所有克隆到文档根目录( mv $REVISION $PROJECT_DIR ) 停止所有正在运行的容器:( docker-compose stop ) 删除所有停止的容器( docker-compose rm -f ) 构build容器( docker-compose build ) 运行所有构build的容器( docker-compose up -d ) 运行所有init,并通过docker exec在容器内启动脚本(例如:config编译器,nginx重载) 这对我来说工作得很好,但是我对这个scheme有一些疑问: 在步骤6中 ,如果我不将文件更改为节点容器,则会使用已经构build的映像 – 速度很快。 但是,如果我改变了一些东西,容器会重新生成 – 速度很慢,会增加未使用的图像 在最糟糕的情况下(当我修改节点代码时),部署时间可能持续约2-3分钟,最好的情况是约30秒。 但即使如此,这是一些用户的停机时间。 正如我所想,我需要build立新的容器的可用性(在旧的容器parralel继续工作),只有在成功的状态 – 更改应用程序使用的最新容器的标签 […]

在使用docker命令创build并提交更改后无法看到文件

我创build了名为“task1”的docker集装箱。 我执行一个shell命令创build一个包含单词“hello”的文件foo.txt。 我提交docker容器“task1” 我用-it命令以交互模式进入docker container“task1” 但是我没有看到文件“foo.txt”。 我期待这个,因为我已经做了容器。 但是,当我只是通过“ls”命令,并在同一个容器“task1”中执行它,它显示文件“foo.txt”。 这里有什么问题? 以下是我正在尝试上述活动的控制台详细信息。 感谢你的帮助。 谢谢。 ~/G/S/d/d/H/test_io   master ±  docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 35784a56ffa3 task1 "/bin/bash" 5 seconds ago Up 4 seconds task2 eb03c7b89e36 task1 "/bin/bash" 6 minutes ago Up 6 minutes clever_bell 352c6f8f1ff2 registry:2 "/bin/registry /etc/d" 10 days ago […]

如何dynamic地将Docker容器的IP地址映射到另一个容器

我有几个泊坞窗容器在主机上运行。 我有一个场景,我需要将一个容器的IP地址映射到另一个容器中可用的configuration文件。 我知道我可以使用docker inspect [container]命令获取容器的IP地址。 我假设IP地址是每次重新启动容器时dynamic分配的。 所以每次我需要在另一个容器中更改此IP地址。 是否有可能有一个静态IP容器或我可以使用主机的IP地址,而不是容器的IP地址。 我是docker世界的新手。 另外我有一个情况,我需要映射IP地址到另一个主机上运行的容器。 例如,我有一个在HostA和HostB运行的tomcat容器中运行的redis容器。 为了从tomcat与redis通信,我需要在tomcat容器中映射redis的ip地址和端口。 docker工人如何做到这一点?

docker工人:无法纠正问题,你已经打破了软件包

我有多次使用Dockerfile,没有问题。 现在我需要添加一些软件包(ssmtp和sendmail),当我添加他们的构build失败: Sending build context to Docker daemon 645.3 MB Sending build context to Docker daemon Step 0 : FROM debian:jessie —> 736e5442e772 Step 1 : MAINTAINER Larry Martell <larry.martell@foo.com> —> Using cache —> bd272aa26940 Step 2 : ENV HOME /opt/django/CAPgraph/ —> Using cache —> 1c540ed91808 Step 3 : RUN echo "deb http://http.debian.net/debian jessie-backports main" […]

Docker撰写不识别'env_file'

我正在尝试运行docker-compose up并使用以下configuration: php: image: php:7.0-fpm expose: – 9000 links: – nginx nginx: env_file: .env image: nginx:latest ports: – 80:80 – 433:433 environment: – NGINX_HOST: ${APP_URL} mysql: env_file: .env image: mysql:latest ports: – 3306:3306 environment: – MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} – MYSQL_DATABASE: ${DB_DATABASE} – MYSQL_USER: ${DB_USERNAME} – MYSQL_PASSWORD: ${DB_PASSWORD} – MYSQL_ALLOW_EMPTY_PASSWORD: no 我有一个.env文件在同一个目录下,并且能够在shell中testing这个variables,但是.env似乎没有加载.env 。 警告 :APP_URLvariables未设置。 默认为空白string。 警告 […]

与minikube主机path – Kubernetes

更新:我连接到minikubevm,我看到我的主机目录安装,但没有文件那里。 另外,当我创build一个文件,它不会在我的主机。 任何链接都在他们之间 我尝试挂载一个主机目录来开发我的应用程序kubernetes。 正如文档build议,我使用minikube在我的电脑上运行我的kubernetes集群。 我们的目标是创build一个开发环境,使用docker和kubernetes开发我的应用程序。 我想装载一个本地目录,所以我的docker将从那里读取代码的应用程序。 但这不行。 任何帮助将非常感激。 我的testing应用程序(server.js): var http = require('http'); var handleRequest = function(request, response) { response.writeHead(200); response.end("Hello World!"); } var www = http.createServer(handleRequest); www.listen(8080); 我的Dockerfile: FROM node:latest WORKDIR /code ADD code/ /code EXPOSE 8080 CMD server.js 我的pod kubernetesconfiguration:(pod-configuration.yaml) apiVersion: v1 kind: Pod metadata: name: apiserver spec: containers: – name: node […]

Docker撰写开发和生产环境最佳工作stream程

我已经构build了一个简单的Docker Compose项目作为开发环境。 我有PHP-FPM,Nginx,MongoDB和Code容器。 现在我想要自动化这个过程并部署到生产环境。 docker-compose.yml可以扩展,并可以定义多个环境。 有关更多信息,请参阅https://docs.docker.com/compose/extends/ 。 但是,我的容器有Dockerfiles。 而对于开发环境来说,需要比生产更多的软件包。 主要问题是我应该使用单独的dockerfiles dev和prod ,并在docker-compose.yml和production.ymlpipe理它们? 单独的dockerfiles是简单的方法,但有代码重复。 另一种解决scheme是使用环境variables,并以某种方式从bash脚本(也许作为入口?)处理它们。 我正在寻找其他的想法。

Docker在docker上的主机运行脚本 – 组成

感谢您收看这个问题。 所以我的问题涉及如何在docker-up命令上运行脚本的最佳实践。 目前,我在主机和容器之间共享一个卷,以允许脚本更改对主机和容器都可见。 类似于观察脚本轮询configuration文件的更改。 脚本必须根据预定义的规则在主机上进行更改。 所以我的问题是: 我怎么能在docker上创build这个脚本 – 组成up指令,甚至是从服务的dockerfile开始,这样,只要容器上去了,“观察者”就可以find正在写入和写入的任何变化。 有问题的容器将永远运行在debian / ubuntu操作系统上,并且应该独立于架构,这意味着它也应该能够在ARM上运行。 提前致谢 我也想知道,为什么这个问题只是因为有些人不明白而被低估了。 我希望在主机上运行脚本,而不是在容器内部运行。我需要主机更改其networking接口configuration,以便轻松适应任何环境。主机需要更改我重复一次。这应该对用户是无缝的,并且很容易在运行的Web界面上编辑,以适应新的环境。 我目前正在基于crontab的主机上运行脚本。 我只想知道如何在INSIDE CONTAINER上运行HOST脚本的最佳实践和示例,这样安装操作员就可以轻松地运行docker-compose。 谢谢

Cron和Crontab文件不在Docker中执行

我有这个简单的Dockerfile进行testing,但是在PHP映像的LEMP堆栈中也是这样:cron作业根本不在Docker中执行。 这是我的testingDockerfile: FROM debian:latest MAINTAINER XY <info@domain.com> LABEL Description="Cron" Vendor="Istvan Lantos" Version="1.0" RUN apt-get -y update && apt-get -y dist-upgrade \ && apt-get -y install \ cron \ rsyslog \ vim RUN rm -rf /var/lib/apt/lists/* #cron fixes RUN touch /etc/crontab /etc/cron.d/* /var/spool/cron/crontabs/* #COPY etc/cron.d /etc/cron.d COPY etc/crontab /etc/crontab #COPY var/spool/cron/crontabs /var/spool/cron/crontabs RUN chmod 600 /etc/crontab […]

如何在Dockerfile中设置Node环境variables来运行node.js应用程序?

任何人都可以build议如何在运行节点应用程序时在dockerfile中设置NODE_ENVvariables。