docker容器中使用宿主机的docker命令(基于yeszao/dnmp使用和修改记录)

需求

  • 因为每次在服务器上搭建lnmp环境都是一个很繁琐的事,所以打算采用docker
  • 目前项目中基本都会用到supervisor,所以我打算单独将supervisor做成一个容器,但是我又想在这个容器中使用宿主机的docker。所以需要对dnmp进行一些改动。

前提

  1. 原项目地址:dnmp
  2. 建议想看原文文档
  3. 提前在宿主机安装git,docker,docker-compose
  4. 我需要的容器有,php,nginx,redis,supervisor。为什么没有mysql?因为我们mysql一般都是单独一台服务器跑

注意

  1. 下面不会说docker相关的命令,因为项目本身就是基于docker的,所以不熟悉的话最好先去看看文档或者直接按照原项目的文档跑着看

概述

  1. 因为我目前只需要supervisor容器中跑php命令,但是我又不想把php和supervisor装成一个容器,这个时候就可以换种方式,通过宿主机的docker进入php容器,然后在执行php命令。

改动

  1. 打开docker-compose.yml文件,找到supervisor,将注释去掉,增加挂载的文件,/var/run/docker.sock和/usr/bin/docker,将宿主机中的这两个文件挂载到容器中,注意权限问题,如果没有权限就直接改文件的权限,或者将当前用户加入到docker组
  2. 如果不需要开启web管理页面,那就不需要看这一步。里面有个command - /bin/sh
          - -c
          - |
            supervisord -n -c /etc/supervisor/supervisord.conf ,是什么意思呢?就是手动启动supervisord监控服务,也就是启动了这个supervisor才有web页面可以查看。启动前还需要在supervisord.conf配置文件里面配置一下
    [inet_http_server]
    port=0.0.0.0:9001
    username=admin
    password=123456


  supervisor:
    build:
      context: ./services/supervisor
    container_name: supervisor
    ports:
      - "${SUPERVISOR_HOST_PORT_C}:9001"
    privileged: true  
    volumes:
      - ${SOURCE_DIR}:/www/:rw
      - ${SUPERVISOR_LOG}:/var/log/supervisor/:rw
      - ${SUPERVISOR_CONFIG}:/etc/supervisor/conf.d/:rw
      - ${SUPERVISOR_CONF_FILE}:/etc/supervisor/supervisord.conf:ro
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker
    command:
      - /bin/sh
      - -c
      - |
        supervisord -n -c /etc/supervisor/supervisord.conf
    restart: always
    cap_add:
      - SYS_PTRACE
    networks:
      - default

      2.这个时候重新build镜像,重新开启容器,然后docker-compose exec supervisor sh,进入到容器你会发现还是不行,直接报错:docker not found

        dnmp容器镜像都是基于Alpine 版本的,所以刚刚挂载进去的文件是不会生效的。

        dnmp容器镜像都是基于Alpine 版本的,所以刚刚挂载进去的文件是不会生效的。

        dnmp容器镜像都是基于Alpine 版本的,所以刚刚挂载进去的文件是不会生效的。

       3.解决办法:修改services/supervisor/Dockfile文件

FROM ubuntu
MAINTAINER phonecom<1053653379@qq.com>

RUN apt update
RUN apt install -y supervisor

USER root

WORKDIR /www

     4.在重新创建容器,就可以直接容器中执行docker 相关命令了

        5.现在我们可以在supervisor配置文件中使用PHP的命令了,配置文件挂载到宿主机的dnmp/services/conf.d目录下了

        

              

6.重启supervisor容器,直接访问IP:9001,默认账号user,密码123,这个可以到配置文件中去改,看看是不是进程运行成功了

 7.创建定时任务:利用docker,直接在宿主机创建就行,

8:开启swoole服务,代码是我这边写好的,是基于laravel的,我swoole监听的9502的端口,所以要先更改docker-compose.yml的php容器,将9502端口暴露给宿主机

9:直接在supervisor中创建swoole守护进程 配置文件就OK了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值