supervisor下的Dockerfile的多服务镜像封装操作

编写Dockerfile文件

配置yum源

cd /tmp/docker
vim Dockerfile
FROM rhel7
EXPOSE 80 22  # 向外暴露80和22的端口
COPY dvd.repo /etc/yum.repos.d/dvd.repo
&& yum install -y httpd openssh-server openssh-clients supervisor
&& yum clean all
&& ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -N ""
&& ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ed25519_key -N ""
&& echo root:redhat | chpasswd
COPY supervisord.conf /etc/supervisord.conf
CMD ["/usr/bin/supervisord"]
vim supervisord.conf
[supervisord]
nodaemon=true

[program:sshd]
command=/usr/sbin/sshd -D

[program:httpd]
command=/usr/sbin/httpd
docker build -t rhel7:v3
Sending build context to Docker daemon 8.192 kB
Step 1/6 : FROM rhel7
 ---> 0a3eb3fde7fd
Step 2/6 : EXPOSE 80 22
 ---> Running in 5727c9e984a5
 ---> e25a8a0821f7
Removing intermediate container 5727c9e984a5
Step 3/6 : COPY dvd.repo /etc/yum.repos.d/dvd.repo
 ---> 2d9e8f9648a7
Removing intermediate container 62955f7a7a74
Step 4/6 : RUN rpmdb --rebuilddb && yum install -y httpd openssh-server openssh-clients supervisor && yum clean all && ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -N "" && ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N "" && ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ed25519_key -N "" && echo root:redhat | chpasswd
Dependency Updated:
 elfutils-libelf.x86_64 0:0.166-2.el7                     

Complete!
Skipping unreadable repository '///etc/yum.repos.d/rhel7.repo'
Cleaning repos: docker dvd-rhel
Cleaning up everything
 ---> 1cb2f9e34bac
Removing intermediate container 33cb452dbc8d
Step 5/6 : COPY supervisord.conf /etc/supervisord.conf
 ---> e8de2ff5ca3c
Removing intermediate container f219cb2b6a88
Step 6/6 : CMD /usr/bin/supervisord
 ---> Running in eddfb3973ad2
 ---> dbf4cf5cb116
Removing intermediate container eddfb3973ad2
Successfully built dbf4cf5cb116

docker run -d --name vm1 -v /tmp/docker/web/:/var/www/html rhel7:v3

docker ps

docker inspect vm1
      "Networks": {
        "bridge": {
          "IPAMConfig": null,
          "Links": null,
          "Aliases": null,
          "NetworkID": "126902125dd9c54631622845c1a75d656b45023840c57944ec24f4acecf6dc3f",
          "EndpointID": "3d995f01fce91968f59b151a19ba3868292efe0a61c2ef355bcd1eb84bda7248",
          "Gateway": "172.17.0.1",
          "IPAddress": "172.17.0.2",  # 容器的ip
          "IPPrefixLen": 16,
          "IPv6Gateway": "",
          "GlobalIPv6Address": "",
          "GlobalIPv6PrefixLen": 0,
          "MacAddress": "02:42:ac:11:00:02"
        }
      }

验证:

curl 172.17.0.2

验证sshd服务:

补充知识:使用Dockerfile构建supervisor容器部署项目,CMD ["supervisord","-c","/etc/supervisord.conf"]执行失败

问题描述:

在编写Dockerfile创建supervisor容器时,最后一条启动supervisor的命令不起作用 -> CMD ["supervisord","-c","/etc/supervisord.conf"],但是进到容器内部执行supervisord -c /etc/supervisord.conf可以成功运行。

先贴出来Dockerfile文件代码

FROM python:latest
WORKDIR /root/

RUN mkdir /etc/supervisor
RUN mkdir -p /root/projects/logs/gunicorn/
RUN mkdir -p /root/projects/logs/celery/
RUN mkdir -p /root/projects/Sy_EvaluateJkApi/logs/
RUN echo "deb http://mirrors.aliyun.com/debian/ buster main non-free contrib" > /etc/apt/sources.list
RUN echo "deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/debian-security buster/updates main" >> /etc/apt/sources.list
RUN echo "deb-src http://mirrors.aliyun.com/debian-security buster/updates main" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib" >> /etc/apt/sources.list
RUN echo "deb-src http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib" >> /etc/apt/sources.list
RUN echo "deb-src http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib" >> /etc/apt/sources.list
RUN apt-get update -y
RUN apt-get install -y git lrzsz vim
RUN pip install supervisor -i https://mirrors.aliyun.com/pypi/simple/
RUN pip install gunicorn -i https://mirrors.aliyun.com/pypi/simple/
RUN pip install gevent -i https://mirrors.aliyun.com/pypi/simple/
RUN /usr/local/bin/echo_supervisord_conf > /etc/supervisord.conf
RUN echo "[include]">>/etc/supervisord.conf
RUN echo "files = /etc/supervisor/*.ini">>/etc/supervisord.conf

ADD sy.ini /etc/supervisor/sy.ini
ADD Sy_EvaluateJkApi /root/projects/Sy_EvaluateJkApi
RUN pip3 install -r /root/projects/Sy_EvaluateJkApi/requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
EXPOSE 8800
CMD ["supervisord","-c","/etc/supervisord.conf"]

使用docker build -t system:test . 命令构建容器镜像没有异常,但是使用docker run -itd system:test运行容器就会显示容器不在运行。

解决方式:

把CMD ["supervisord","-c","/etc/supervisord.conf"]命令改成CMD ["supervisord","-n","-c","/etc/supervisord.conf"]就可以成功运行了。

supervisor里是这么写的-n/--nodaemon -- run in the foreground (same as 'nodaemon=true' in config file),加了-n让supervisor在前台保持运行就可以了。

以上这篇supervisor下的Dockerfile的多服务镜像封装操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Docker 使用 Supervisor 来管理进程操作

    Docker容器在启动的时候开启单个进程,比如,一个 ssh 或者 apache 的 daemon 服务. 但我们经常需要在一个机器上开启多个服务,这可以有很多方法,最简单的就是把多个启动命令放到一个启动脚本里面,启动的时候直接启动这个脚本,另外就是安装进程管理工具. 本小节将使用进程管理工具 supervisor 来管理容器中的多个进程.使用Supervisor可以更好的控制.管理.重启我们希望运行的进程.在这里我们演示一下如何同时使用 ssh 和 apache 服务. 配置 首先创建一个Do

  • docker容器内要启动两个进程时Dockerfile的实现代码

    近期想做一个cron定时任务的docker,在Dockerfile中做如下定义 FROM library/alpine:latest RUN apk --update add rsync openssh bash VOLUME ["/data"] ADD start.sh / CMD ["/bin/bash","/start.sh"] 在start.sh中用crontab 加载定时任务run.cron,然后启动crond: /usr/bin/cr

  • 编写最佳的Dockerfile的方法

    Dockerfile的语法非常简单,然而如何加快镜像构建速度,如何减少Docker镜像的大小却不是那么直观,需要积累实践经验.这篇博客可以帮助你快速掌握编写Dockerfile的技巧. 为了保证可读性,本文采用意译而非直译.另外,本文版权归原作者所有,翻译仅用于学习. 我已经使用Docker有一段时间了,其中编写Dockerfile是非常重要的一部分工作.在这篇博客中,我打算分享一些建议,帮助大家编写更好的Dockerfile. 目标: 更快的构建速度 更小的Docker镜像大小 更少的Dock

  • supervisor下的Dockerfile的多服务镜像封装操作

    编写Dockerfile文件 配置yum源 cd /tmp/docker vim Dockerfile FROM rhel7 EXPOSE 80 22 # 向外暴露80和22的端口 COPY dvd.repo /etc/yum.repos.d/dvd.repo && yum install -y httpd openssh-server openssh-clients supervisor && yum clean all && ssh-keygen -q

  • 详解Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较

    1.概述 创建Docker镜像的方式有三种 docker commit命令:由容器生成镜像: Dockerfile文件+docker build命令: 从本地文件系统导入:OpenVZ的模板. 关于这三种方式的大致说明请参考yeasy/docker_practice的创建镜像. 最近学习了Dockerfile文件的相关配置,这里做一下简单的总结,并对之前一直感到有些迷惑的CMD和ENTRYPOINT指令做个差异对比. 2.Dockerfile文件总结 Dockerfile 由一行行命令语句组成,

  • 利用Dockerfile优化Nestjs构建镜像大小详情

    目录 前言 原文开始 开始编写Dockerfile 在本地测试下 Dockerfile 生产环境优化 使用Alpine node镜像 添加 NODE_ENV 环境变量 使用npm ci 而不是npm install 使用User指令 使用多阶段构建 最终的Dockerfile 前言 众所周知,Node.js项目在部署的时候,无论是在虚拟机部署,还是使用docker进行部署,无非都是要先npm install,然后把整个node_modules丢上去,最后启动服务 但是有些开发依赖在生产环境部署的

  • 基于alpine用dockerfile创建的tomcat镜像的实现

    1.下载alpine镜像 [root@docker43 ~]# docker pull alpine Using default tag: latest Trying to pull repository docker.io/library/alpine ... latest: Pulling from docker.io/library/alpine 4fe2ade4980c: Pull complete Digest: sha256:621c2f39f8133acb8e64023a94dbd

  • dockerfile指令构建docker镜像的示例代码

    目录 初识Dockerfile 编写一个自己的docker 镜像: DockerFile docker build . 命令 查看镜像是如何生成的 初识Dockerfile Dockerfile就是用来构建docker镜像的构建文件!命令脚本! 通过这个脚本可以生成镜像,镜像是一层层的,脚本是一行行的命令,每行命令都是一层 dockerfile是面向开发的,我们以后要发布项目,作镜像,就需要编写dockerfile文件,这个文件十分简单. Dockerfile镜像之间成为了企业交付的标准,必须掌

  • Linux下重启多个 tomcat 服务的脚本(推荐)

    由于修改tomcat的配置文件或手动操作数据库数据后,tomcat的缓存和redis的缓存很严重,需要经常重启tomcat来释放缓存,经常就是手动重启. # 1.查找tomcat的进程ID ps -ef | grep tomcat # 2.根据路径去查找进程ID,然后逐个杀掉(毕竟一台服务器上面是会有多个不同业务的tomcat在运行.) kill -9 [ID] 刚接触这些命令的时候,会经常的手动去敲命令然后练习加深,久而久之,感觉是在浪费时间(有时候会频繁修改数据库内容). 所以就想着,能不能

  • windows下安装、卸载mysql服务的方法(mysql 5.6 zip解压版安装教程)

    MySQL是一个小巧玲珑但功能强大的数据库,目前十分流行.但是官网给出的安装包有两种格式,一个是msi格式,一个是zip格式的.很多人下了zip格式的解压发现没有setup.exe,面对一堆文件一头雾水,不知如何安装.下面笔者将介绍如何解决此情况下安装过程中的各种问题. 比较简单的步骤: 在win2003及win2008 r2以上版本: 将下载下来的mysql解压到指定目录下(如:d:\mysql) 安装服务 在命令行输入 d:\mysql\bin\mysqld -install net sta

  • linux环境下安装 openOffice 并启动服务 的方法

    一.背景故事 这两天遇到一个大坑,客户要做office 文档在线预览功能,于是乎就要把office文档转换成pdf交给前端显示.      在某度找了一圈都说openOffice+jodconverter 可以搞定这个事情.代码倒是很好找,不过版本很多,各类jar包也很多,但尝试下来发现,转化效果很一般,复杂的excel也无法成功.有同事建议放到服务器上效果可能好些,于是就开始折腾在服务器上安装OpenOffice这个事情.网上各种找大神的博文,发现安装起来不是很顺畅,就写了这篇随笔,记录一下,

  • 解决Mac下安装nmp的淘宝镜像失败问题

    安装命令如下: npm install -g cnpm --registry=https://registry.npm.taobao.org --verbose 提示报错,信息如下: npm ERR! Darwin 16.6.0 npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "-g" "cnpm" "--reg

  • 在docker下删除两个id相同的镜像的操作

    今天建立docker容器的时候由于疏忽,镜像的名字输错了,结果容器创建成功后,镜像中出现两个id相同的: 使用docker rmi e4a35914679d删除的时候执行失败: Error response from daemon: conflict: unable to delete e4a35914679d (must be forced) - image is referenced in one or more repositories 提示应该是该id有两个本地文件,不能用id删除. 所

随机推荐