zoukankan      html  css  js  c++  java
  • docker搭建mangeto2最佳实践

    一、基于alpine基础镜像制作dockerFile,alpine的好处是体积小,有apk命令方便添加包

    制作nginx

    运行容器

    docker run -it -d  --name nginx  alpine:latest

    进入容器

    docker exec -it nginx sh

    # 简单解释:-it 获得输入输出

    配置阿里云的alpine,apk源,不然太慢了 

    sed -i 's@dl-cdn.alpinelinux.org@mirrors.aliyun.com@g' /etc/apk/repositories

    # 更新软件包索引 apk update

    apk查找包:apk search nginx

    nginx比较简单,所以直接用:apk add nginx,安装后程序文件会在各个常规目录

    修改nginx为前台启动模式:

    daemon off

    保存容器为镜像

    docker  commit  nginx  zenghansen/nginx:v1  

    然后同理制作php

    apk add php7 php7-fpm

    修改为前台运行模式:

    daemonize = no

    docker  commit  nginx  zenghansen/php74:v1   #docker  commit 容器名称  分组名称/镜像名称:镜像tag

    一般来说,制作Docker的过是很漫长的,不建议直接用dockerfile去调试,直接进到alpine容器里面执行命令,最后根据成品容器二次from,封装一层薄薄的Dockerfile即可

    此时,我们在容器里面运行完dockerfile里面的命令并且确认无误后,我们推出容器,然后执行制作镜像。

    或者我们可以基于Dockerfile来制作,比如

    FROM zenghansen/php-fpm-7.4:v4
    EXPOSE 9000
    CMD ["/usr/local/php/sbin/php-fpm"]

    docker build -t zenghansen/php-fpm-7.4:v1  .  #记得后面有个点

     

    推送到仓库

    docker login harbor.ym

    docker push harbor.ym/php-fpm/php56fpmzts:latest

     

    然后我们可以选择推送到docker.hub仓库备用

    docker login 

    docker push zenghansen/php-fpm-7.4:v1

     

     

    运行后发现容器停止了,是因为没有挂起的进程,

    设置php-fpm为前台模式:daemonize = no,修改一下Dockerfile,重新构建容器即可

    FROM zenghansen/php-fpm-7.4:v4
    RUN sed -i 's@daemonize = yes@daemonize = no@g' /usr/local/php/etc/php-fpm.conf
    EXPOSE 9000
    CMD ["/usr/local/php/sbin/php-fpm"]
    

     接下来,为了方便可以用docker-compose构建,进行容器之间的交互。包括es和mysql我也顺便放出来了

     

    version: '2.3'
    services:
      nginx:
        image: zenghansen/nginx:v1
        volumes:
         - $HOME/work:/data/www
         - $HOME/docker/nginx/conf.d:/etc/nginx/conf.d
        # nginx意外退出时自动重启
        restart: always
        command: ["/usr/sbin/nginx"]
        # 映射80和443端口
        ports:
         - "80:80"
         - "443:443"
        # 容器名称
        networks:
          - elastic
        container_name: nginx
    
      mysql:
        image: mysql:5.7
        command: --default-authentication-plugin=mysql_native_password --lower-case-table-names=1
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: root
        ports:
         - "3306:3306"
        networks:
          - elastic
        container_name: mysql
      php74:
        image: zenghansen/php-fpm-74:v1
        restart: always
        command: ["/usr/sbin/php-fpm7"]
        volumes:
         - $HOME/work:/data/www #注意,这里一定要挂载代码目录,因为nginx只负责文件路径转发,并不会把代码文件转发过去。
        networks:
          - elastic
        container_name: php74
      es01:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.5.2
        container_name: es01
        environment:
          - node.name=es01
          - cluster.name=es-docker-cluster
          - discovery.seed_hosts=es02,es03
          - cluster.initial_master_nodes=es01,es02,es03
          - bootstrap.memory_lock=true
          - "ES_JAVA_OPTS=-Xms128m -Xmx128m"
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - $HOME/docker/elk/es/data1:/usr/share/elasticsearch/data
          - $HOME/docker/elk/es/config1:/usr/share/elasticsearch/config
        ports:
          - 9200:9200
        networks:
          - elastic
      es02:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.5.2
        container_name: es02
        environment:
          - node.name=es02
          - cluster.name=es-docker-cluster
          - discovery.seed_hosts=es01,es03
          - cluster.initial_master_nodes=es01,es02,es03
          - bootstrap.memory_lock=true
          - "ES_JAVA_OPTS=-Xms128m -Xmx128m"
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - $HOME/docker/elk/es/data2:/usr/share/elasticsearch/data
          - $HOME/docker/elk/es/config2:/usr/share/elasticsearch/config
        networks:
          - elastic
      es03:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.5.2
        container_name: es03
        environment:
          - node.name=es03
          - cluster.name=es-docker-cluster
          - discovery.seed_hosts=es01,es02
          - cluster.initial_master_nodes=es01,es02,es03
          - bootstrap.memory_lock=true
          - "ES_JAVA_OPTS=-Xms128m -Xmx128m"
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - $HOME/docker/elk/es/data3:/usr/share/elasticsearch/data
          - $HOME/docker/elk/es/config3:/usr/share/elasticsearch/config
        networks:
          - elastic
      esh:
        image: mobz/elasticsearch-head:5
        container_name: es-head
        ports:
          - 9100:9100
        volumes:
          - $HOME/docker/elk/esh/vendor.js:/usr/src/app/_site/vendor.js
    
    networks:
      elastic:
        driver: bridge
    

      

      

    由于nginx和php的配置需要经常修改,我们一般挂载出来。

    php的监听端口,我们要改成:0.0.0.0:9000,如果是127.0.0.1会提示refund,因为nginx在另外一个容器, 所以需要开发所有ip可以转发到这个端口。

    另外需要修改一下php.ini的参数,可以参考官方文档;比如内存大小之类的。

    解决把magento2代码里的nginx配置文件复制到配置目录。调用nginx配置为:

    upstream fastcgi_backend {
       # use tcp connection
       server  php74:9000;
       # or socket
       #server   unix:/var/run/php/php7.4-fpm.sock;
    }
    server {
       listen 80;
       server_name localhost;
       set $MAGE_ROOT /data/www/m2;
       set $MAGE_DEBUG_SHOW_ARGS 0;
       include /etc/nginx/conf.d/nginx.conf.sample;
    }
    

      nginx.conf.sample;m2代码目录有提供。


    配置限定了只能直接访问某些根目录php,增加的php是无法访问的。


     

    然后进入php容器进行安装项目:

    docker exec -it php74 sh

     

    安装composer  apk add composer

    设置阿里云的源:

    composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

     

    拉取构建项目: composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition m2

     

    安装过程中发现少了很多php的扩展,由于我们用的是alpine,所以可以用 apk add php7-xxx(扩展名称来安装,有些扩展可能后缀会更多一些,注意版本号和php版本对应上即可),完毕后继续安装

    成功继续进入代码目录的bin目录,执行magento2的安装:

    ./magento setup:install --base-url=http://localhost 
    --db-host=mysql --db-name=magento --db-user=root --db-password=root 
    --admin-firstname=Magento --admin-lastname=User --admin-email=user@example.com 
    --admin-user=admin --admin-password=admin123 --language=en_US 
    --currency=USD --timezone=America/Chicago --use-rewrites=1 
    --search-engine=elasticsearch7 --elasticsearch-host=es01 
    --elasticsearch-port=9200
    

     安装完成是这个鸟样。

     

     

    暗夜之中,才见繁星;危机之下,暗藏转机;事在人为,为者常成。
  • 相关阅读:
    给object数组进行排序(排序条件是每个元素对象的属性个数)
    转化一个数字数组为function数组(每个function都弹出相应的数字)
    找出数字数组中最大的元素(使用Math.max函数)
    JavaFX学习笔记索引
    JavaFX学习:第一个程序 Hello World
    Notion笔记链接
    Windows 下 Chocolatey 的安装与使用
    Bootstrap3 文档整理
    (转)OpenCV视频生成报错 Incorrect library version loaded Could not open codec ‘libopenh264‘: Unspecified error
    OpenCV不能读取 mp4 的问题(转)
  • 原文地址:https://www.cnblogs.com/zenghansen/p/15309315.html
Copyright © 2011-2022 走看看