• 喜欢前端以及PHP的朋友们可以加PHP同好会QQ群 点击加入qq群
  • 最近在写一个项目---"小A微信托管平台",大家可以去帮忙测试一下!功能在不断完善中,敬请关注!点击进入
  • 本站使用了PHP8.1与HTTP2.0协议,速度简直超级快有木有?

Docker 再探 — 使用docker-compose 搭建完整的lnmp开发环境(3/3)

Linux Mr.Adam 4年前 (2021-01-16) 1634次浏览 已收录 0个评论

Docker 再探 --- 使用 docker-compose 搭建完整的 lnmp 开发环境(3/3)

Docker 再探 — 使用 docker-compose 搭建完整的 lnmp 开发环境(3/3)

继上次使用 Docker-compose 安装 lnmp 环境之后,经过几天的学习,对 Docker 有了一个比较完整的认识,接下来就安装一个比较完善的 lnmp 环境!
下面是该项目的目录结构

..
.
├── db
│   └── myconf
│       └── my.cnf
│   └── mydata
│   └── redisconf
│       └── redis.conf
│   └── redisdata
│   └── mongoconf
│   └── MysqlDockerFile
├── nginx
│   └── conf.d
│       └── default.conf
│   └── nginx.conf
│   └── logs
│   └── DockerFile
├── php 
│   └── DockerFile
│   └── php_fpm_conf
│   └── php_ini.d
│   └── php.ini
├── node
│   └── node_modules
├── www 
│   └── default.com
├── docker-compose.yml

以下是docker-compose.yml文件内容,仅供参考

version: "3"
services:
  nginx:
    container_name: nginx
    build:
      context: ./nginx
      dockerfile: DockerFile
    privileged: true
    restart: always
    networks:
      - lnmp_cluster
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/logs:/var/log/nginx
      - ./www:/usr/share/nginx/html
    depends_on:
      - php
  php:
    container_name: php8
    build:
      context: ./php
      dockerfile: DockerFile
    privileged: true
    restart: always
    volumes:
      - ./www:/usr/share/nginx/html
    environment
      - TZ=Asia/Shanghai
    networks:
      - lnmp_cluster
    links:
      - mysql
      - redis
  redis:
    container_name: redis
    image: redis
    privileged: true
    restart: always
    volumes:
      - ./db/redisdata:/data
      - ./db/redisconf:/etc/redis
    ports:
      - "6379:6379"
    networks:
      - lnmp_cluster
    command: redis-server /etc/redis/redis.conf
    expose:
      - "6379"
  nodejs:
    container_name: nodejs
    image: node
    privileged: true
    restart: always
    tty: true
    volumes:
      - ./node/node_modules:/usr/local/lib/node_modules
      - ./www:/usr/share/nginx/html
    ports:
      - "3000:3000"
    networks:
      - lnmp_cluster
    expose:
      - "3000"
  mysql:
    container_name: mysql
    image: mysql
    privileged: true
    restart: always
    volumes:
      - ./db/myconf:/etc/mysql/conf.d
      - ./db/my_data:/var/lib/mysql
    ports:
      - "3306:3306"
    command: >
      bash -c "
      chmod 644 /etc/mysql/conf.d/*.cnf
      && /entrypoint.sh mysqld
      "
    environment:
      MYSQL_ROOT_PASSWORD: 111111
      MYSQL_DATABASE: test
      MYSQL_USER: user
      MYSQL_PASSWORD: user123
    networks:
      - lnmp_cluster
    expose:
      - "3306"
networks:
  lnmp_cluster:
    name: lnmp_cluster

其中 php 和 nginx 采用了 build 的方式加载新的 image
php 需要安装 n 多的扩展库

#php DockerFile
FROM php:8.0.1-fpm
RUN sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list
RUN cat /etc/apt/sources.list
RUN rm -Rf /var/lib/apt/lists/*
RUN apt-get update
RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) gd
RUN docker-php-ext-install -j$(nproc) bcmath sockets dba mysqli pcntl pdo_mysql shmop sysvmsg sysvsem sysvshm calendar exif gettext
RUN apt-get update && apt-get install -y \
        libbz2-dev \
        libenchant-dev \
        libgmp-dev \
        libxml2-dev \
        libtidy-dev \
        libxslt1-dev \
        libzip-dev \
        libsnmp-dev \
        librecode-dev \
        libc-client-dev \
        libkrb5-dev \
        libmcrypt-dev \
        zlib1g-dev \
        libmemcached-dev
RUN docker-php-ext-install -j$(nproc) bz2
RUN docker-php-ext-install -j$(nproc) enchant
RUN docker-php-ext-install -j$(nproc) gmp
RUN docker-php-ext-install -j$(nproc) soap tidy xsl
RUN docker-php-ext-install -j$(nproc) zip
RUN docker-php-ext-install -j$(nproc) snmp
RUN docker-php-ext-configure imap --with-kerberos --with-imap-ssl && \
        docker-php-ext-install -j$(nproc) imap
RUN pecl install mcrypt-1.0.4
RUN pecl install redis-5.3.2
RUN pecl install memcached
RUN pecl install xdebug
RUN docker-php-ext-enable redis xdebug memcached mcrypt
RUN pecl install swoole
RUN docker-php-ext-enable swoole
RUN pecl install mongodb
RUN docker-php-ext-enable mongodb

nginx 则只是把当前目录下的 nginx.conf 复制到/etc/nginx/nginx.conf

#nginx DockerFile
FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf

一些需要注意的坑!

这两天在使用 docker 配置我的 lnmp 开发环境的时候遇到很多问题!

这个貌似只能通过 docker cp ...:... ... 命令的方式才可以从镜像中复制文件到外界
而且不支持批量复制(cp /* ..),且只支持单个文件或文件夹的复制.
如果使用 docker 部署了一个 nginx 应用,我需要对 nginx.conf 来进行更改,就必须从外界挂载一个配置文件到 nginx.conf,但是此时我并不知道 docker 中 nginx.conf 的内容,而且可能也不知道它的确切位置
这样只能先创建一个实例,然后使用docker cp的命令将需要的配置文件复制出来放到挂载的目录里,然后再修改 docker-compose 文件挂载到镜像中!
安装 nginx php redis node 的时候几乎都碰到了这种问题,很头疼!

将 docker 镜像运行起来之后在里面把自己更改的东西都修改完善,然后再自己打个 image 包,上传至 hub.docker.com,然后修改 docker-compose.yml 文件,将 image 改为自己的包名,这样也就牺牲了随时调整配置文件的方便
或者使用 docker exec 命令进入到镜像环境中去修改相应配置项,这个也是很麻烦!


小 A 空间 , 版权所有丨如未注明转载 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Docker 再探 — 使用 docker-compose 搭建完整的 lnmp 开发环境(3/3)
喜欢 (1)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址