Рубрики
Uncategorized

Использование docker для создания среды разработки PHP + nginx + MySQL на MAC

Автор оригинала: David Wong.

I. Преимущества подготовки докера к созданию среды:

Simple operation, rapid construction and environmental isolation

Общие команды и параметры работы докера:

Docker search - find image from docker hub
 Docker images view the local image list
 Docker pull pulls or updates the specified image from the image warehouse
 Docker run create a new container and run a command
 Docker RM delete a container
 Docker RMI delete an image
 Docker inspect - get metadata of container / image
 Docker PS ා view the started containers, and add the parameter - A to view all containers
 Docker build? Use dockerfile to create image

Common dockerfile instructions:
 From format is from image or from image: tag, and the first instruction in the dockerfile must be from instruction, and multiple from instructions can be used when multiple images are created in the same dockerfile
 Run ා format is run command or run ["execute", "Param1", "param2"...], the former runs command in shell terminal, / bin / SH - C command, for example, / bin / SH - C "echo hello"; the latter uses exec to execute, and specifies that other running terminals use run ["/ bin / bash", "- C", "echo hello"]
 CMD ා used to specify the command to be executed when the container is started
 Maintainer - specify maintainer information
 Env ා is used to specify environment variables, which can be used by run instruction later
 Expose ා expose port, used for container external link

II. Начните порядок сборки: MySQL > php fpm > nginx Сначала убедитесь, что вы создали phpfpm, а затем построили docker ﹣ nginx

  • Настроить докер? MySQL

Во – первых, используйте docker search Mysql для перечисления образов MySQL, существующих на складе

Используйте команду docker pull для загрузки изображений с наибольшим количеством запусков локально (время загрузки немного велико…) тяга докера mysql

После загрузки используйте изображения docker, чтобы проверить, было ли изображение загружено в локальный изображения docker Вы можете увидеть следующее Используйте команду запуска docker для запуска docker? Контейнер MySQL docker run -di --имя моего docker mysql -p 3308:3306 -e mysql_root_password

Docker run command to start the container
-I. interactive operation
-D ා Daemons
--Name specifies the container name as mydockermysql
-P? Map the 3306 port of the container to the 3308 port of the host
-E ා specify the environment variable, which can be used in the container to set the root password
The last MySQL is to specify to use a certain image

Используйте команду docker PS, чтобы проверить, запущен ли контейнер

Если вы видите только что созданный MySQL, контейнер успешно создан. Если вы этого не видите, вы можете использовать докер войти в мой докер mysql Команда для проверки ошибок, измените команду, а затем перезапустите. Однако вам необходимо удалить контейнер. Команда такова докер rm mydockermysql

Попробуйте использовать инструмент Navicat для привязки базы данных и найти не удалось. Проверьте это Введите контейнер MySQL docker exec -это мой докер mysql/bin/bash запуск mysql mysql -uroot -p123456 Просмотр версии MySQL статус Авторизация удаленных ссылок РАЗРЕШИТЬ ВСЕ НА *.* ДЛЯ `root’ @ ‘%’ `; Обновить полномочия сбросить привилегии; Изменить правила шифрования ИЗМЕНИТЬ ПОЛЬЗОВАТЕЛЯ "root"@"localhost", ИДЕНТИФИЦИРОВАННОГО паролем "пароль", НИКОГДА НЕ ИСТЕКАЕТ; Изменить пароль root ИЗМЕНИТЬ ПОЛЬЗОВАТЕЛЯ "root"@"%", ИДЕНТИФИЦИРОВАННОГО паролем mysql_native_password ПО "123456"; Обновить полномочия сбросить привилегии; На этом этапе используйте Navicat, чтобы обнаружить, что вы можете подключиться к mysql mydocker В контейнере сначала выйдите из MySQL Затем выйдите из контейнера В это время строительство контейнера docker ﹣ MySQL завершено. Версия MySQL-8.0. Если вам нужно создать версию 5. X, вам нужно только использовать docker pull MySQL: 5. X и использовать изображение для запуска контейнера. В контейнере вам нужно только авторизовать удаленное подключение,

  • Сборка докера php fpm

Создание docker phpfpm немного утомительно, потому что PHP имеет разные версии, разные расширения и зависимости, поэтому вы можете использовать dockerfile для создания docker phpfpm и гибко настраивать необходимые расширения Создайте новый файл dockerfile со следующим содержимым

FROM php:7.1-fpm
MAINTAINER your name

#Define extension version number

#Redis extension
ENV PHPREDIS_VERSION 4.0.0
#Swoole extension
ENV SWOOLE_VERSION 4.0.3

#Set time
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' > /etc/timezone

#Some extensions that are neither in the PHP source package nor in the PECL extension warehouse are no longer available. Use apt to install the extensions directly
RUN apt-get update \
    && apt-get install -y \
        curl \
        wget \
        git \
        zip \
        libz-dev \
        libssl-dev \
        libnghttp2-dev \
        libpcre3-dev \
        libmemcached-dev \
        zlib1g-dev \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng-dev \
    && apt-get clean \
    && apt-get autoremove

#Install composer
RUN curl -sS https://getcomposer.org/installer | php \
    && mv composer.phar /usr/local/bin/composer \
    && composer self-update --clean-backups

#PHP source file directory comes with extension docker PHP ext install
#Mysqli extension
RUN docker-php-ext-install mysqli
PDO extension
RUN docker-php-ext-install pdo_mysql
# Bcmath 
RUN docker-php-ext-install bcmath
GD extension
RUN docker-php-ext-install -j$(nproc) iconv mcrypt
RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/
RUN docker-php-ext-install -j$(nproc) gd

#Some extensions are not included in the PHP source file, but exist in the extension library warehouse of PHP. Use PECL install to install the extension, and then use the docker PHP ext enable command to enable the extension

RUN wget http://pecl.php.net/get/redis-${PHPREDIS_VERSION}.tgz -O /tmp/redis.tgz \
    && pecl install /tmp/redis.tgz \
    && rm -rf /tmp/redis.tgz \
    && docker-php-ext-enable redis

#Msgpack extension download PECL local installation open extension (delay queue usage reduces source data space)
RUN wget http://pecl.php.net/get/msgpack-${MSGPACK_VERSION}.tgz -O /tmp/msgpack.tgz \
    && pecl install /tmp/msgpack.tgz \
    && rm -rf /tmp/msgpack.tgz \
    && docker-php-ext-enable msgpack


#Hiredis depends on installation
RUN wget https://github.com/redis/hiredis/archive/v${HIREDIS_VERSION}.tar.gz -O /tmp/hiredis.tar.gz \
  && mkdir -p /tmp/hiredis \
    && tar -xf /tmp/hiredis.tar.gz -C /tmp/hiredis --strip-components=1 \
    && rm /tmp/hiredis.tar.gz \
    && ( \
        cd /tmp/hiredis \
        && make -j$(nproc) \
        && make install \
        && ldconfig \
    ) \
    && rm -r /tmp/hiredis

#Swoole extension installation open extension
RUN wget https://github.com/swoole/swoole-src/archive/v${SWOOLE_VERSION}.tar.gz -O /tmp/swoole.tar.gz \
    && mkdir -p /tmp/swoole \
    && tar -xf /tmp/swoole.tar.gz -C /tmp/swoole --strip-components=1 \
    && rm /tmp/swoole.tar.gz \
    && ( \
        cd /tmp/swoole \
        && phpize \
        && ./configure --enable-async-redis --enable-mysqlnd --enable-openssl --enable-http2 \
        && make -j$(nproc) \
        && make install \
    ) \
    && rm -r /tmp/swoole \
    && docker-php-ext-enable swoole

После создания файла dockerfile выполните следующую команду в каталоге, в котором находится файл, для создания образа sudo docker build-t fpm-php-7.1:v1.0.0 . Примечание: последнее. Команды представляет текущий каталог Используйте образы докеров, чтобы проверить, успешно ли создан образ Запустите докер? Контейнер Php fpm с командой docker run

docker run --name docker_phpfpm71 \
--restart=always \
-p 9000:9000 \
-v ~/Sites:/data/home \
-v ~/Sites/docker_phpfpm71/logs:/data/logs \
--privileged \
-d fpm-php-7.1:v1.0.0
-V - mount the directory in the container to the local directory
--Privileged enables the root in the container to have real root permission, otherwise, the root in the container is only a common external user permission
--Restart - sets the container restart policy. When the container exits, does the docker daemons restart the container that just exited.

Используйте команду docker PS, чтобы проверить, запущен ли контейнер docker ps

Докер php fpm удался

  • Сборка докера

Когда вы начинаете докер? Nginx, вам нужно использовать параметр — link, чтобы связать контейнер nginx с контейнером phpfpm, который вы только что запустили, и вам нужно выполнить некоторые операции по монтированию каталогов Сначала создайте несколько локальных каталогов для хранения конфигурации nginx mkdir -p ~/Сайты/docker_nginx/{conf,conf.d,html,журналы} Создайте файл nginx.conf в ~/сайты/docker \ nginx/conf/. Содержание выглядит следующим образом

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log /var/log/nginx/access.log main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;

    server {
        listen      80 default_server;
        listen      [::]:80 default_server;
        server_name localhost;
        root        /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;


        error_page 404 /404.html;
        location = /40x.html{
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html{
        }

        location ~ ^/assets/.*\.php$ {
            deny all;
        }

        location ~ \.php$ {
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_pass docker_phpfpm71:9000;
            #fastcgi_pass unix:/var/run/php5-fpm.sock;
            try_files $uri =404;
        }

        location ~* /\. {
            deny all;
        }
    }
}

Запустите контейнер nginx с помощью команды docker run

docker run --name docker_nginx -d -p 80:80   -v ~/Sites/docker_nginx/conf/nginx.conf:/etc/nginx/nginx.conf  -v ~/Sites/docker_nginx/logs:/var/log/nginx -v ~/Sites:/usr/share/nginx/html -v ~/Sites/docker_nginx/conf.d:/etc/nginx/conf.d --link docker_phpfpm71:phpfpm --volumes-from docker_phpfpm71 nginx
--Link links two containers, so that the source container (the linked container) and the receiving container (the actively unlinked container) can communicate with each other, and the receiving container can obtain some data of the source container, such as the environment variables of the source container
--Volumes from authorize one container to access another's volume

Используйте команду docker PS, чтобы узнать, запускается ли контейнер Посетите локальный хост в браузере