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

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

    查询容器信息

    docker inspcet
    

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

    查询容器的运行状态

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

    查询容器的IP

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

    查询容器日志信息Ω

    docker logs 【容器】
    

    -f 实时打印最新的日志

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

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

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

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

    docker exec php7-dev ps -ef
    

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

    docker exec -it php7-dev /bin/bash
    

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

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

    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
    

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

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

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

    其他选项

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

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

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

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

    env_file:
      - .env
    
    
    RACK_ENV: development
    
    • net

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

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

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

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

    如重启nginx

    docker-compose restart nginx
    

    dockerfile

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

    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"]
    

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

    docker buil -t easyswoole:1.0
    

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

    有几个命令值得关注下:

    docker-php-source
    

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

    docker-php-source extract | delete
    

    参数说明:

    • 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
    

    一般都是需要跟 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
    

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

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

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

    注意 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 元