最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • PHPer看docker容器的管理详解

    正文概述 转载于:掘金(程序员安安)   2020-12-24   504

    查询容器信息

    docker inspcet
    
    PHP

    查询信息,包括运行情况、存贮位置、配置参数、网络设置等。

    查询容器的运行状态

    docker inspect -f {{.State.Status}} 【容器】
    
    PHP

    查询容器的IP

    docker inspect  -f {{.NetworkSettings.IPAddress}} 【容器】
    
    PHP

    查询容器日志信息Ω

    docker logs 【容器】
    
    PHP

    -f 实时打印最新的日志

    docker stats 实时查看容器所占的系统资源 如CPU使用率、内存、网络、磁盘开销

    容器内部命令 原生方式登入docker exec

    docker exec + 容器名 +容器内执行的命令
    
    PHP

    比如查询容器php的所有进程:

    docker exec php7-dev ps -ef
    
    PHP

    容器内连续执行多条命令,可以加上 “-it”参数,相当于以root身份登入容器内,可连续执行命令,执行exit退出。

    docker exec -it php7-dev /bin/bash
    
    PHP

    多容器管理 多个容器有数据交互,依赖,启动方式就必须有先后,如:

    # db容器优先于WordPress启动
    docker start db docker start WordPress
    
    PHP

    docker composer 容器编排工具,允许用户在一个模版(YAML格式)中定义一组相关联的应用容器,这组容器会根据配置模版中的“--link”等参数,对启动的优先级自动排序,简单执行一条“docker-composer up”,就可以把同一服务中的多个容器依次创建和启动。

    安装方式,参考官方

    sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
    
    #查看compose版本
    docker-compose --version
    #docker-compose version 1.23.1, build b02f1306
    
    PHP

    例如启动wordpress项目,创建wordpress文件夹,文件夹内创建docker-composer.yml文件,内容:

    wordpress:
        image: wordpress
        links:
            - db:mysql
        ports:
            - 8080:80
    db:
        image: mariadb
        environment:
            MYSQL_ROOT_PASSWORD: example
    
    PHP

    选项 links、ports、environment、volumes分别对应 docker run中的"--links"(容器互联)、"-p"(端口映射)、“-e”(环境变量设置)、“-v”(映射目录)。 restart: always 一直在线

    其他选项

    • container_name 指定容器名
    image: php:7.0-fpm
       container_name:  php7-dev
    
    PHP

    environment 加入环境变量,可以使用数组或者字典,只有一个key的环境变量可以在运行Compose的机器上找到对应的值,这有助于加密的或者特殊主机的值

    environment:
      RACK_ENV: development
      SESSION_SECRET:
    environments:
      - RACK_ENV=development
      - SESSION_SECRET
    
    PHP

    env_file 从一个文件中加入环境变量,该文件可以是一个单独的值或者一张列表,在environment中指定的环境变量将会重写这些值

    env_file:
      - .env
    
    
    RACK_ENV: development
    
    PHP
    • net

    网络模式,可以在docker客户端的--net参数中指定这些值

    net: "bridge"
    net: "none"
    net: "container:[name or id]"
    net: "host"
    
    PHP
    • dns

    自定义DNS服务,可以是一个单独的值或者一张列表

    dns: 8.8.8.8
    dns:
      - 8.8.8.8
      - 9.9.9.9
    
    PHP
    • docker-compose 基本包括了docker的基本命令:
    build 构建或重建服务
    help 命令帮助
    kill 杀掉容器
    logs 显示容器的输出内容
    port 打印绑定的开放端口
    ps 显示容器
    pull 拉取服务镜像
    restart 重启服务
    rm 删除停止的容器
    run 运行一个一次性命令
    scale 设置服务的容器数目
    start 开启服务
    stop 停止服务
    up 创建并启动容器
    
    PHP

    如重启nginx

    docker-compose restart nginx
    
    PHP

    dockerfile

    FROM image #代表新的镜像是从image这个基础镜像来的
    
    MAINTAINER:指定该镜像创建者
    
    ENV:指定环境变量
    
    COPY:将编译机本地文件拷贝到镜像文件系统中
    
    EXPOSE:指定监听的端口
    
    ENTERPOINT:欲执行命令,使用该镜像创建容器,容器启动时执行,如 ENTRYPOINT ["php", "/var/www/code/easyswoole", "start"]
    
    RUN:执行shell命令
    
    PHP

    easyswoole dockerfile

    FROM php:7.1
    
    # Version
    ENV PHPREDIS_VERSION 4.0.1
    ENV SWOOLE_VERSION 4.3.0
    ENV EASYSWOOLE_VERSION 3.x-dev
    
    # Timezone
    RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
        && echo 'Asia/Shanghai' > /etc/timezone
    
    # Libs
    RUN apt-get update \
        && apt-get install -y \
        curl \
        wget \
        git \
        zip \
        libz-dev \
        libssl-dev \
        libnghttp2-dev \
        libpcre3-dev \
        && apt-get clean \
        && apt-get autoremove
    
    # Composer
    RUN curl -sS https://getcomposer.org/installer | php \
        && mv composer.phar /usr/local/bin/composer \
        && composer self-update --clean-backups
    
    # PDO extension
    RUN docker-php-ext-install pdo_mysql
    
    # Bcmath extension
    RUN docker-php-ext-install bcmath
    
    # Redis extension
    RUN wget http://pecl.php.net/get/redis-${PHPREDIS_VERSION}.tgz -O /tmp/redis.tar.tgz \
        && pecl install /tmp/redis.tar.tgz \
        && rm -rf /tmp/redis.tar.tgz \
        && docker-php-ext-enable redis
    
    # Swoole extension
    RUN wget https://github.com/swoole/swoole-src/archive/v${SWOOLE_VERSION}.tar.gz -O swoole.tar.gz \
        && mkdir -p swoole \
        && tar -xf swoole.tar.gz -C swoole --strip-components=1 \
        && rm swoole.tar.gz \
        && ( \
        cd swoole \
        && phpize \
        && ./configure --enable-async-redis --enable-mysqlnd --enable-openssl --enable-http2 \
        && make -j$(nproc) \
        && make install \
        ) \
        && rm -r swoole \
        && docker-php-ext-enable swoole
    
    WORKDIR /var/www/code
    
    # Install easyswoole
    RUN cd /var/www/code \
        && composer require easyswoole/easyswoole=${EASYSWOOLE_VERSION} \
        && php vendor/bin/easyswoole install
    
    EXPOSE 9501
    
    ENTRYPOINT ["php", "/var/www/code/easyswoole", "start"]
    
    PHP

    构建image,切换到Dockerfile同级目录:

    docker buil -t easyswoole:1.0
    
    PHP

    有了Dockerfile文件,维护就很简单了,只需修改文件内容,重新构建即可,-t还可以指定版本标签。

    有几个命令值得关注下:

    docker-php-source
    
    PHP

    在PHP容器中创建一个/usr/src/php的目录,里面放了一些自带的文件而已。我们就把它当作一个从互联网中下载下来的PHP扩展源码的存放目录即可。事实上,所有PHP扩展源码扩展存放的路径: /usr/src/php/ext 里面。

    docker-php-source extract | delete
    
    PHP

    参数说明:

    • extract : 创建并初始化 /usr/src/php目录
    • delete : 删除 /usr/src/php目录

    docker-php-ext-install 安装php内核提供的扩展 docker-php-ext-install pdo_mysql

    docker-php-ext-enable 启用扩展 添加php.ini配置,如:docker-php-ext-enable pdo_mysql

    docker-php-ext-configure
    
    PHP

    一般都是需要跟 docker-php-ext-install搭配使用的。它的作用就是,当你安装扩展的时候,需要自定义配置时,就可以使用它来帮你做到。

    FROM php:7.1-fpm
    RUN apt-get update \
        # 相关依赖必须手动安装
        && apt-get install -y \
            libfreetype6-dev \
            libjpeg62-turbo-dev \
            libmcrypt-dev \
            libpng-dev \
        # 安装扩展
        && docker-php-ext-install -j$(nproc) iconv mcrypt \
        # 如果安装的扩展需要自定义配置时
        && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
        && docker-php-ext-install -j$(nproc) gd
    
    PHP

    仓库 docker Hub存放发布镜像的仓库,用户可以在https://hub.docker.com/中注册账号,既可发布镜像。

    //登录docker Hub
    docker login Username: sun Password: 123456 Email:sun@sun.com 
    
    //上传镜像
    docker push easyswoole:1.0
    
    PHP

    此外可能由于网络问题、安全问题,还可以使用私有仓库,具体执行命令本文不在细究。

    注意 docker compose可以判断容器间的依赖并生成正确的启动顺序,但仅仅是启动顺序,每个容器的启动时间不太一致,如果有依赖可能会不能正常交互导致启动失败。

    以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要戳这里PHP进阶架构师>>>实战视频、大厂面试文档免费获取


    下载网 » PHPer看docker容器的管理详解

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元