PHPer看docker容器的管理详解

查询容器信息

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 一直在线

docker-compose up 创建和启用服务 加-d后台运行 docker-compose up -d
作用是创建与启动容器,会重建有变化的服务器(删掉以前建立的容器) docker-compose up -d –no-create
如果存在与yaml中描述的容器就会直接启动,不会重建 docker-compose start 启动 docker-compose stop
停止 docker-compose ps 查看运行情况

其他选项

  • 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-compose.yml,解决如何管理的问题
问题:docker-compose创建容器会发现容器name和定义不一致,但是用docker-compose可以管理,没太明白为啥?

  • 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存放发布镜像的仓库,用户可以在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进阶架构师>>>实战视频、大厂面试文档免费获取

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享