Docker

Docker

安装

  1. 卸载旧版本

    sudo yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-engine
    
  2. 下载需要的安装包

    sudo yum install -y yum-utils
    
  3. 设置仓库镜像

    sudo yum-config-manager \
        --add-repo \
        https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  #默认为国外
        
    sudo yum makecache fast # 更新yum索引
    
  4. 安装docker

    sudo yum install docker-ce docker-ce-cli containerd.io
    
  5. 启动docker

    sudo systemctl start docker
    
  6. 测试docker镜像

    sudo docker run hello-world
    
  7. 查看镜像

    sudo docker images
    

卸载

  1. 卸载docker环境

    sudo yum remove docker-ce docker-ce-cli containerd.io
    
  2. 卸载docker

    sudo rm -rf /var/lib/docker
    sudo rm -rf /var/lib/containerd
    

常用指令

  • 启动docker

    sudo systemctl start docker
    
    sudo systemctl restart docker  #重启
    
    
  • docker常用运行方式

    -d #后台加载
    -it #交互运行
    -p #绑定端口
    -v #绑定挂载目录
    
  • docker ps #查看docker进程

  • docker images #查看镜像

  • docker commit -m #提交镜像文件

  • docker save #保存镜像文件

  • docker pull #获取镜像

  • docker run 将镜像加载到容器

  • docker up 将镜像更新启动到容器

  • docker start 开启容器

docker-compose

  1. 创建docker-compose目录

    mkdir docker-compose
    
  2. 安装docker-compose

    cd docker-compose
    
    vim docker-compose.yml
    upstream
    
    
  3. 利用dockerFile定义运行环境镜像

  4. 使用docker-compose.yml定义组成应用的各服务

  5. 运行docker-compose up

提交个人配置镜像

DockerFile

搭建私有docker仓库

laravel 环境搭建

laradock 搭建多版本php

  1. .env 文件修改

    DB_HOST=mysql
    REDIS_HOST=redis
    QUEUE_HOST=beanstalkd
    PHP56=5.6          #添加php5.6常量
    
  2. 打开docker-compose.yml文件(主要修改两处)

    • 新增 PHP-FPM-56 配置项

    • LARADOCK_PHP_VERSION=${PHP56}

    • ports:
      - "19003:19003"

    ### PHP-FPM-56 ##############################################
        php-fpm-56:
          build:
            context: ./php-fpm-56
            args:
              - CHANGE_SOURCE=${CHANGE_SOURCE}
              - BASE_IMAGE_TAG_PREFIX=${PHP_FPM_BASE_IMAGE_TAG_PREFIX}
              - LARADOCK_PHP_VERSION=${PHP56}
              - LARADOCK_PHALCON_VERSION=${PHALCON_VERSION}
              - INSTALL_BZ2=${PHP_FPM_INSTALL_BZ2}
              - INSTALL_ENCHANT=${PHP_FPM_INSTALL_ENCHANT}
              - INSTALL_GMP=${PHP_FPM_INSTALL_GMP}
              - INSTALL_GNUPG=${PHP_FPM_INSTALL_GNUPG}
              - INSTALL_XDEBUG=${PHP_FPM_INSTALL_XDEBUG}
              - INSTALL_PCOV=${PHP_FPM_INSTALL_PCOV}
              - INSTALL_PHPDBG=${PHP_FPM_INSTALL_PHPDBG}
              - INSTALL_BLACKFIRE=${INSTALL_BLACKFIRE}
              - INSTALL_SSH2=${PHP_FPM_INSTALL_SSH2}
              - INSTALL_SOAP=${PHP_FPM_INSTALL_SOAP}
              - INSTALL_XSL=${PHP_FPM_INSTALL_XSL}
              - INSTALL_SMB=${PHP_FPM_INSTALL_SMB}
              - INSTALL_IMAP=${PHP_FPM_INSTALL_IMAP}
              - INSTALL_MONGO=${PHP_FPM_INSTALL_MONGO}
              - INSTALL_AMQP=${PHP_FPM_INSTALL_AMQP}
              - INSTALL_CASSANDRA=${PHP_FPM_INSTALL_CASSANDRA}
              - INSTALL_GEARMAN=${PHP_FPM_INSTALL_GEARMAN}
              - INSTALL_MSSQL=${PHP_FPM_INSTALL_MSSQL}
              - INSTALL_BCMATH=${PHP_FPM_INSTALL_BCMATH}
              - INSTALL_PHPREDIS=${PHP_FPM_INSTALL_PHPREDIS}
              - INSTALL_MEMCACHED=${PHP_FPM_INSTALL_MEMCACHED}
              - INSTALL_OPCACHE=${PHP_FPM_INSTALL_OPCACHE}
              - INSTALL_EXIF=${PHP_FPM_INSTALL_EXIF}
              - INSTALL_AEROSPIKE=${PHP_FPM_INSTALL_AEROSPIKE}
              - INSTALL_OCI8=${PHP_FPM_INSTALL_OCI8}
              - INSTALL_MYSQLI=${PHP_FPM_INSTALL_MYSQLI}
              - INSTALL_PGSQL=${PHP_FPM_INSTALL_PGSQL}
              - INSTALL_PG_CLIENT=${PHP_FPM_INSTALL_PG_CLIENT}
              - INSTALL_POSTGIS=${PHP_FPM_INSTALL_POSTGIS}
              - INSTALL_INTL=${PHP_FPM_INSTALL_INTL}
              - INSTALL_GHOSTSCRIPT=${PHP_FPM_INSTALL_GHOSTSCRIPT}
              - INSTALL_LDAP=${PHP_FPM_INSTALL_LDAP}
              - INSTALL_PHALCON=${PHP_FPM_INSTALL_PHALCON}
              - INSTALL_SWOOLE=${PHP_FPM_INSTALL_SWOOLE}
              - INSTALL_TAINT=${PHP_FPM_INSTALL_TAINT}
              - INSTALL_IMAGE_OPTIMIZERS=${PHP_FPM_INSTALL_IMAGE_OPTIMIZERS}
              - INSTALL_IMAGEMAGICK=${PHP_FPM_INSTALL_IMAGEMAGICK}
              - INSTALL_CALENDAR=${PHP_FPM_INSTALL_CALENDAR}
              - INSTALL_FAKETIME=${PHP_FPM_INSTALL_FAKETIME}
              - INSTALL_IONCUBE=${PHP_FPM_INSTALL_IONCUBE}
              - INSTALL_APCU=${PHP_FPM_INSTALL_APCU}
              - INSTALL_CACHETOOL=${PHP_FPM_INSTALL_CACHETOOL}
              - INSTALL_YAML=${PHP_FPM_INSTALL_YAML}
              - INSTALL_RDKAFKA=${PHP_FPM_INSTALL_RDKAFKA}
              - INSTALL_GETTEXT=${PHP_FPM_INSTALL_GETTEXT}
              - INSTALL_ADDITIONAL_LOCALES=${PHP_FPM_INSTALL_ADDITIONAL_LOCALES}
              - INSTALL_MYSQL_CLIENT=${PHP_FPM_INSTALL_MYSQL_CLIENT}
              - INSTALL_PING=${PHP_FPM_INSTALL_PING}
              - INSTALL_SSHPASS=${PHP_FPM_INSTALL_SSHPASS}
              - INSTALL_MAILPARSE=${PHP_FPM_INSTALL_MAILPARSE}
              - INSTALL_PCNTL=${PHP_FPM_INSTALL_PCNTL}
              - ADDITIONAL_LOCALES=${PHP_FPM_ADDITIONAL_LOCALES}
              - INSTALL_FFMPEG=${PHP_FPM_FFMPEG}
              - INSTALL_AUDIOWAVEFORM=${PHP_FPM_AUDIOWAVEFORM}
              - INSTALL_WKHTMLTOPDF=${PHP_FPM_INSTALL_WKHTMLTOPDF}
              - INSTALL_XHPROF=${PHP_FPM_INSTALL_XHPROF}
              - INSTALL_XMLRPC=${PHP_FPM_INSTALL_XMLRPC}
              - INSTALL_PHPDECIMAL=${PHP_FPM_INSTALL_PHPDECIMAL}
              - INSTALL_ZOOKEEPER=${PHP_FPM_INSTALL_ZOOKEEPER}
              - INSTALL_SSDB=${PHP_FPM_INSTALL_SSDB}
              - DOWNGRADE_OPENSSL_TLS_AND_SECLEVEL=${PHP_DOWNGRADE_OPENSSL_TLS_AND_SECLEVEL}
              - PUID=${PHP_FPM_PUID}
              - PGID=${PHP_FPM_PGID}
              - IMAGEMAGICK_VERSION=${PHP_FPM_IMAGEMAGICK_VERSION}
              - LOCALE=${PHP_FPM_DEFAULT_LOCALE}
              - PHP_FPM_NEW_RELIC=${PHP_FPM_NEW_RELIC}
              - PHP_FPM_NEW_RELIC_KEY=${PHP_FPM_NEW_RELIC_KEY}
              - PHP_FPM_NEW_RELIC_APP_NAME=${PHP_FPM_NEW_RELIC_APP_NAME}
              - INSTALL_DOCKER_CLIENT=${PHP_FPM_INSTALL_DOCKER_CLIENT}
              - http_proxy
              - https_proxy
              - no_proxy
          volumes:
            - ./php-fpm/php${PHP_VERSION}.ini:/usr/local/etc/php/php.ini
            - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}${APP_CODE_CONTAINER_FLAG}
            - docker-in-docker:/certs/client
          ports:
            - "19003:19003"
          expose:
            - "9000"
          extra_hosts:
            - "dockerhost:${DOCKER_HOST_IP}"
          environment:
            - PHP_IDE_CONFIG=${PHP_IDE_CONFIG}
            - DOCKER_HOST=tcp://docker-in-docker:2376
            - DOCKER_TLS_VERIFY=1
            - DOCKER_TLS_CERTDIR=/certs
            - DOCKER_CERT_PATH=/certs/client
            - FAKETIME=${PHP_FPM_FAKETIME}
          depends_on:
            - workspace
          networks:
            - backend
          links:
            - docker-in-docker
    
  3. 打开 /var/www/laradock/nginx/sites/ 目录项目文件配置

    • 注意端口号
    • fastcgi_pass 修改为php-fpm-56:9000
    location ~ \.php$ {
            try_files $uri /index.php =404;
            fastcgi_pass php-fpm-56:9000;
            fastcgi_index index.php;
            fastcgi_buffers 16 16k;
            fastcgi_buffer_size 32k;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            #fixes timeouts
            fastcgi_read_timeout 600;
            include fastcgi_params;
        }
    
  4. 注意事项, 启动失败可能是端口冲突, 我们需要查看进程是否正常

laradock 配置nginx端口中的映射

  • 正向代理

    - 使单个域名对应的端口号对应单个项目
    
    - vim /var/www/laradock/nginx/dockerFile
      修改 EXPOSE 80 81 443 8888
    
    - vim /var/www/laradock/nginx/sites/laravel.conf #配置端口映射
    
    server {
    
        listen 8888;
        listen [::]:8888;
    
        # For https
        # listen 443 ssl;
        # listen [::]:443 ssl ipv6only=on;
        # ssl_certificate /etc/nginx/ssl/default.crt;
        # ssl_certificate_key /etc/nginx/ssl/default.key;
    
        server_name myproject.test;
        root /var/www/laraFile/public;
        index index.php index.html index.htm;
    
        location / {
             try_files $uri $uri/ /index.php$is_args$args;
        }
    
        location ~ \.php$ {
            try_files $uri /index.php =404;
            fastcgi_pass php-upstream;
            fastcgi_index index.php;
            fastcgi_buffers 16 16k;
            fastcgi_buffer_size 32k;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            #fixes timeouts
            fastcgi_read_timeout 600;
            include fastcgi_params;
        }
    
        location ~ /\.ht {
            deny all;
        }
    
        location /.well-known/acme-challenge/ {
            root /var/www/letsencrypt/;
            log_not_found off;
        }
    
        error_log /var/log/nginx/laravel_error.log;
        access_log /var/log/nginx/laravel_access.log;
    }
    
    - /var/www/laradock/docker-compose.yml #添加端口映射
    
    ### NGINX Server #########################################
        nginx:
          build:
            context: ./nginx
            args:
              - CHANGE_SOURCE=${CHANGE_SOURCE}
              - PHP_UPSTREAM_CONTAINER=${NGINX_PHP_UPSTREAM_CONTAINER}
              - PHP_UPSTREAM_PORT=${NGINX_PHP_UPSTREAM_PORT}
              - http_proxy
              - https_proxy
              - no_proxy
          volumes:
            - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}${APP_CODE_CONTAINER_FLAG}
            - ${NGINX_HOST_LOG_PATH}:/var/log/nginx
            - ${NGINX_SITES_PATH}:/etc/nginx/sites-available
            - ${NGINX_SSL_PATH}:/etc/nginx/ssl
          ports:
            - "${NGINX_HOST_HTTP_PORT}:80"
            - "${NGINX_HOST_HTTPS_PORT}:443"
            - "${VARNISH_BACKEND_PORT}:81"
            - "${MY_PROJECT_PORT}:8888"
          depends_on:
            - php-fpm
          networks:
            - frontend
            - backend
    
    - vim /var/www/laradock/.env         #配置.env文件
    
    ### Paths #################################################
    
    DB_HOST=mysql
    REDIS_HOST=redis
    QUEUE_HOST=beanstalkd
    PHP56=5.6
    MY_PROJECT_PORT=8888
    
  • 反向代理

    • 添加代理cluster
    • proxy_pass http://cluster;
    upstream cluster {
         server 192.168.20.128;
    }
    
    server {
    
        listen 8888;
        listen [::]:8888;
    
        # For https
        # listen 443 ssl;
        # listen [::]:443 ssl ipv6only=on;
        # ssl_certificate /etc/nginx/ssl/default.crt;
        # ssl_certificate_key /etc/nginx/ssl/default.key;
    
        server_name myproject.test;
        root /var/www/laraFile/public;
        index index.php index.html index.htm;
    
        location / {
             try_files $uri $uri/ /index.php$is_args$args;
             proxy_pass http://cluster;
        }
    
        location ~ \.php$ {
            try_files $uri /index.php =404;
            fastcgi_pass php-upstream;
            fastcgi_index index.php;
            fastcgi_buffers 16 16k;
            fastcgi_buffer_size 32k;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            #fixes timeouts
            fastcgi_read_timeout 600;
            include fastcgi_params;
        }
    
        location ~ /\.ht {
            deny all;
        }
    
        location /.well-known/acme-challenge/ {
            root /var/www/letsencrypt/;
            log_not_found off;
        }
    
        error_log /var/log/nginx/laravel_error.log;
        access_log /var/log/nginx/laravel_access.log;
    }