分类 docker 下的文章

  • 目录结构
.
├── Dockerfile 
│   └── config
│        └── swoole_tracker.ini
├── swoole_tracker74.so
├── push_docker.sh 编译并推送镜像
└── run_dockerfile.sh 编译并运行
  • Dockerfile
FROM hyperf/hyperf:7.4-alpine-v3.13-swoole
# FROM hyperf/hyperf:8.0-alpine-v3.13-swoole

# COPY config /var/www/config
# RUN rm /etc/php7/php.ini -f && ln -s /var/www/config/php.ini /etc/php7/php.ini
# ADD swoole_tracker74.so /usr/lib/php7/modules/swoole_tracker.so
# COPY config/swoole_tracker.ini /etc/php7/conf.d/98_swoole_tracker.ini

COPY composer.phar ./
# RUN wget https://www.wuloves.com/d/composer.phar && chmod u+x composer.phar \
# RUN wget https://wuloves.oss-cn-shanghai.aliyuncs.com/d/composer.phar \
RUN chmod u+x composer.phar \
    && cp composer.phar /usr/local/bin/composer \
    && composer config -g repo.packagist composer https://mirrors.aliyun.com/composer \
    && composer -v

RUN apk add --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/v3.13/community/ gnu-libiconv=1.15-r3
ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so php
  • push_docker.sh
#!/bin/bash
pwd
docker login --username=root --password=123456 registry.cn-shanghai.aliyuncs.com
docker build -t hyperf:v20220406 .
docker tag h4 registry.cn-shanghai.aliyuncs.com/wuloves/hyperf-report:1.0
docker push registry.cn-shanghai.aliyuncs.com/wuloves/hyperf-report:1.0
  • run_dockerfile.sh
#!/bin/bash
pwd
# 构建镜像
docker build -t h4 .
# 启动镜像
docker run -v /data:/data -p 9501:9501 -it h4
  • swoole_tracker.ini
[swoole_tracker]
extension=swoole_tracker.so

;打开总开关
apm.enable=0
;采样率 例如:100%
apm.sampling_rate=100

;开启内存泄漏检测时添加 默认0 关闭状态
apm.enable_memcheck=1

;Leak检测开关
apm.enable_malloc_hook=1

docker-compose mysql nginx php

mysql提示没有目录的写权限

解决办法, 使用非网络映射目录作为挂载目录

docker-compose.yaml中会出现挂载卷的问题, 说权限不足
这种情况出现于该目录为使用了网络共享的挂载目录导致的
目录挂载网络共享路径, 无法修改挂载路径下的文件以及目录权限为777, 即执行 chmod 777 -R * 无效, 也不报错
将挂载目录位于非共享目录即可正常运行
  • 测试
# 重新初始化
# 移除创建的容器
docker stop $(docker ps -a | grep test | awk '{print $1}')
docker rm $(docker ps -a | grep test | awk '{print $1}')
# 强制删除所有指定开头的镜像
docker rmi -f $(docker images -a | grep test | awk '{print $3}')


# 重新编译镜像
docker-compose up -d
# 测试php接口响应
curl 127.0.0.1:8080
# 测试静态文件响应
curl 127.0.0.1:8080/1.html
  • 目录结构
.
├── app                                        应用目录
│   ├── index.php
│   └── phpinfo.php
├── docker-compose.yaml    
├── mysql                                    MYSQL容器
│   ├── Dockerfile                镜像配置
│   ├── data                            数据结构
│   └── log                                运行日志
├── nginx                        
│   ├── Dockerfile
│   ├── config
│   │   └── default.conf    NGINX配置
│   └── log                                运行日志
│       ├── access.log
│       └── error.log
└── php
    ├── Dockerfile
    └── config
        └── php.ini                PHP配置文件

代码仓库地址:
https://wuloves.coding.net/public/docker/docker-compose/git/files/master/mysql_nginx_php

使用加速器可以提升获取Docker官方镜像的速度

centos7环境下的安装和配置

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start

注意:其他注意事项在下面的注释中
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,你可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
#   将 [docker-ce-test] 下方的 enabled=0 修改为 enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
#   Loading mirror speeds from cached hostfile
#   Loaded plugins: branch, fastestmirror, langpacks
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
#   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
#   Available Packages
# Step2 : 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
# 注意:在某些版本之后,docker-ce安装出现了其他依赖包,如果安装失败的话请关注错误信息。例如 docker-ce 17.03 之后,需要先安装 docker-ce-selinux。
# yum list docker-ce-selinux- --showduplicates | sort -r
# sudo yum -y install docker-ce-selinux-[VERSION]

# 通过经典网络、VPC网络内网安装时,用以下命令替换Step 2中的命令
# 经典网络:
# sudo yum-config-manager --add-repo http://mirrors.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo
# VPC网络:
# sudo yum-config-manager --add-repo http://mirrors.could.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo


# 配置部分
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://dr8gnq1l.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

其他环境根据参考链接进行即可

参考链接: https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors?accounttraceid=7671094930d141cdbee604914069e21araif

危险命令, 切勿在生产环境使用, 执行前需要反复核对当前执行命令所在的连接的服务器的ip地址且关闭和非实验环境的shell连接

停止所有容器
docker stop $(docker ps -a -q) 
删除所有容器
docker rm $(docker ps -a -q)
删除所有镜像
docker rmi `docker images -a -q`
docker rmi -f `docker images -a -q` #可以保证镜像ID相同时还能正确删除


删除指定包含指定名称的容器名
docker stop $(docker ps -a | grep houdunren | awk '{print $1}')
docker rm $(docker ps -a | grep houdunren | awk '{print $1}')
# 强制删除包含指定名称的镜像
docker rmi -f $(docker images -a | grep houdunren | awk '{print $3}')
  • docker images -a 但是, 最后还是有无法删除的镜像
[root@localhost ~]# docker images -a
REPOSITORY          TAG                   IMAGE ID            CREATED             SIZE
hyperf/hyperf       7.2-alpine-v3.9-cli   1a067b031e1a        2 months ago        80.2MB
hyperf/hyperf       latest                1a067b031e1a        2 months ago        80.2MB
  • docker rmi $(docker images -q)
[root@localhost ~]# docker rmi `docker images -q`
Error response from daemon: conflict: unable to delete 1a067b031e1a (must be forced) - image is referenced in multiple repositories
Error response from daemon: conflict: unable to delete 1a067b031e1a (must be forced) - image is referenced in multiple repositories
  • 改为 docker rmi -f docker images -q 后成功删除
[root@localhost ~]# docker rmi -f `docker images -q`
Untagged: hyperf/hyperf:7.2-alpine-v3.9-cli
Untagged: hyperf/hyperf:latest
Untagged: hyperf/hyperf@sha256:133662bcd066f1826d44a971d876d3ca65910f0fbc881212526a5ef1c08c2502
Deleted: sha256:1a067b031e1a08101f89dca4bdc0a9ec47fae5df21ae8eb3842fe621123d52d6
Deleted: sha256:b78f069ad4b5383f0b0e71ea207dfd5d0c7878ca90d82df3ed0dd189992c1a1c
Deleted: sha256:be154a0e98e8945dbe8f4576f4688a6a857931f6dcb66522dbc5dc92ee664ead
Deleted: sha256:89ae5c4ee501a09c879f5b58474003539ab3bb978a553af2a4a6a7de248b5740
Error: No such image: 1a067b031e1a
  • 核查确认, 问题成功解决
[root@localhost ~]# docker images -a
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

  • Dockerfile
# Default Dockerfile
#
# @link     https://www.hyperf.io
# @document https://doc.hyperf.io
# @contact  group@hyperf.io
# @license  https://github.com/hyperf-cloud/hyperf/blob/master/LICENSE

FROM hyperf/hyperf:latest

##
# ---------- env settings ----------
##
# --build-arg timezone=Asia/Shanghai
ARG timezone

ENV TIMEZONE=${timezone:-"Asia/Shanghai"}
#    COMPOSER_VERSION=1.9.1 \
#    APP_ENV=prod \
#    SCAN_CACHEABLE=(true)

# update
RUN set -ex \
#    && apk update \
    # install composer
    # && cd /tmp \
    # && wget https://github.com/composer/composer/releases/download/${COMPOSER_VERSION}/composer.phar \
    # && wget http://github.com/composer/composer/releases/download/${COMPOSER_VERSION}/composer.phar \
    # && chmod u+x composer.phar \
    # && mv composer.phar /usr/local/bin/composer \
    # show php version and extensions
    && php -v \
    && php -m \
    && php --ri swoole \
    && echo -e "\033[42;37m Build Completed :).\033[0m\n"


# Composer Cache
# COPY ./composer.* /opt/www/
# RUN composer install --no-dev --no-scripts

# RUN composer install --no-dev -o && php bin/hyperf.php
# COPY . /opt/www

WORKDIR /var/www/html
# RUN php /var/www/html/bin/hyperf.php
EXPOSE 9501
# ENTRYPOINT ["php", "/var/www/html/bin/hyperf.php", "start"]
# ENTRYPOINT ["sh"]
  • docker-compose.yml
version: "3"
services:
  hyperf:
    build:
      context: ./
      dockerfile: ./Dockerfile
    ports:
      - "9501:9501"
    command: ["php", "/var/www/html/bin/hyperf.php", "start"]
    volumes:
      - .:/var/www/html
    restart: always
  • 在代码目录中执行即可
docker-compose down && docker-compose up -d