caddy和php在不同docker下:部署laravel应用的caddyfile配置

caddy和php容器不同时需要分别设置root路径,参考以下caddyfile文件。

mysite.com {
        // 这是caddy容器下的laravel目录
        root * /srv/mysite.com/public
        encode zstd gzip
        file_server

        try_files {path} /index.php?{query}
        php_fastcgi * php_docker:9000 {
                // 这是php容器下的laravel目录
                root /var/www/html/mysite.com/public
        }
        log {
                output file /data/caddy.log
        }
}
laravel - 在docker中composer install时,ext-zip扩展问题,docker安装libzip
RUN apt-get install -y zip libzip-dev && docker-php-ext-install zip

首先,安装libzip库,然后就是docker-php-ext-install来安装zip扩展即可。

docker问题:docker.errors.DockerException: Error while fetching server API version: HTTPConnection.request() got an unexpected keyword argument 'chunked'

错误信息:

docker.errors.DockerException: Error while fetching server API version: HTTPConnection.request() got an unexpected keyword argument 'chunked'

解决方案:

这是因urllib3的新版本导致的问题。需要降低urllib3的版本。首先,pip删除urllib3,然后安装2.0以下的版本,如下

pip install urllib3==1.26.8 -i https://pypi.tuna.tsinghua.edu.cn/simple
redis with docker docker-compose

version: '3.8'
services:
  cache:
    image: redis:6.2-alpine
    restart: always
    ports:
      - '6379:6379'
    command: redis-server --save 20 1 --loglevel warning --requirepass this_is_password
    volumes: 
      - cache:/data
volumes:
  cache:
    driver: local

以上是redis在docker下运行时的docker.yml文件示例。

docker-compose.yml文件中限制容器内存方法

在 Docker Compose 的yaml文件中,可以通过指定每个服务的内存限制来限制容器的内存。具体的做法是使用mem_limit字段来指定内存限制,单位可以是字节 (b) 或者是常用单位(例如 k 表示 KB,m 表示 MB,g 表示 GB)。

以下是示例代码:

yamlversion: '3'
services:
  myservice:
    image: myimage
    mem_limit: 512m   # 限制内存为 512 MB

 

docker中安装snpad:error: cannot communicate with server: Post "http://localhost/v2/snaps/core": dial unix /run/snapd.socket: connect: no such file or directory、

我发现了在docker容器中安装snapd的问题:目前不支持以这种方式运行snapd。

这个问题已经在snapcraft论坛上被问到了。snapd的依赖项之一是systemd,如果不重新启动或重新登录,snapd服务就无法正确初始化。根据所有发行版的文档,这是必需的程序,但显然在docker中不是一个选项。

在docker主机上安装snapd,在运行时将snapd套接字装入已安装snapd的容器中。

这里是官方回复:无法在 docker 映像(ubuntu:19.10)中安装 snapcraft snap) - snapcraft - snapcraft.io

docker run --rm中rm的作用是什么?

在Docker中,--rm选项用于在容器退出时自动删除容器所创建的镜像。

默认情况下,当容器退出时,Docker会保留该容器的镜像,以供后续使用。但是,如果你使用了--rm选项,Docker将会删除该容器的镜像。

这个选项非常有用,特别是当你只需要临时运行一个容器,而不需要保留其镜像时。使用--rm选项可以确保容器的镜像不会被保留,从而节省磁盘空间。

docker中-m 1g参数是什么意思

在Docker中,-m或--memory参数用于限制容器的最大内存使用量

例如,docker run -m 1g [镜像名],表示运行一个容器,并限制其最大内存使用量为1GB。这种设置可以避免某个容器占用过多内存而导致整个主机的性能问题.

ubuntu docker安装php imageMagick方法

在ubuntu上或docker上安装方法类似,以下是具体步骤。

一般都会先运行pecl

pecl install imagick

但大部分情况下此时会报错:configure: error: not found.

解决:安装imageMagick软件

sudo apt install imagemagick

 

再次运行,pecl install imagick时,还是有错误提示,不过跟之前不同,

报错信息:checking ImageMagick MagickWand API configuration program... configure: error: not found. Please provide a path to MagickWand-config or Wand-config program.
ERROR: `/tmp/pear/temp/imagick/configure --with-imagick' failed

解决:需要额外安装以下软件

sudo apt-get install libmagickwand-dev libmagickcore-dev

 

现在运行pecl install imagick,顺利完成。

接下来,如果是docker安装,额外执行以下命令。

docker-php-ext-enable imagick

重启phpdocker即可。

 

 

 

docker中php安装gd以及jpg webp freetype扩展的方法

webp,jpeg,freetyp都是php图片处理中经常使用的扩展,但官方的php docker并没有安装这些扩展,需要自行安装,

以下命令即可安装所需扩展。

FROM php:8.2-fpm
RUN apt-get update && apt-get install -y \
		libfreetype-dev \
		libjpeg62-turbo-dev \
		libpng-dev \
	&& docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp \
	&& docker-php-ext-install -j$(nproc) gd
docker 删除一个镜像文件的命令

要删除Docker镜像文件,可以使用docker rmi命令。以下是删除镜像文件的步骤:

  1. 使用docker images命令列出所有可用的镜像。
  2. 选择要删除的镜像,并使用docker rmi命令删除它。例如,要删除名为myrepo/nginx:latest的镜像,可以使用以下命令:
bashdocker rmi myrepo/nginx:latest
  1. 如果要删除多个镜像,可以在一个命令中列出所有要删除的镜像。例如:
bashdocker rmi myrepo/nginx:latest myrepo/redis:latest otherrepo/mysql:5.7

注意:删除镜像会永久删除该镜像及其相关的数据。因此,在删除之前请确保您不再需要该镜像或其相关的数据。

docker 更新一个容器,并保存为新的镜像,再推送到自己的dockerhub
# 登录dockerhub
docker login

# 把一个现有容器存储为镜像,这里-a是作者,-m是备注,a1b0584c10cb是容器id,php8.2:v1.0是新的镜像名称
sudo docker commit -a="iamxxx" -m="with pdo_mysql and gd" a1b0584c10cb php8.2:v1.0

# 把新生成的镜像改为自己仓库的tag,这里myrepoxxx是我的dockerhub账号
sudo docker tag php8.2:v1.0 myrepoxxx/php8.2:v1.0

# 把修改的镜像推送到自己的仓库
sudo docker push myrepoxxx/php8.2:v1.0
php docker安装gd库的方法

进入php docker后,运行以下命令进行安装。

 

apt update
apt install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev

docker-php-source extract

docker-php-ext-configure gd \
--with-jpeg=/usr/include \
--with-freetype=/usr/include/

docker-php-ext-install gd

docker-php-ext-enable gd
mysql在docker容器下运行时的数据备份

本地备份命令改为docker命令

#mysqldump -h 127.0.0.1 $dbname > $backup_file

改成如下
docker exec mysql容器名 mysqldump $dbname > $backup_file

 

其中-u root -p password都应该在my.cnf配置文件中设置,如下

[mysqldump]
user=root
password=你的密码

docker mysqldump the input device is not a TTY

当用crontab运行一个脚本,该脚本含有docker命令时,出现docker mysqldump the input device is not a TTY错误提示。

解决方法是去掉命令行中的-i和-t选项。

 

如脚本文件中的命令如下:

docker exec -it dockername mysqldump

需改成

docker exec dockername mysqldump

 

ubuntu普通用户无法执行docker命令,必须得用sudo的问题

1. 一般安装docker已经有了docker用户组,以下命令可能返回已存在的信息。

sudo groupadd docker


2.将当前用户添加到 docker 组中

sudo usermod -aG docker 用户名


3.更新 docker 用户组

newgrp docker


4.重启 docker 服务

sudo service docker restart

docker-compose 无法用普通用户运行

Docker Compose需要管理员权限才能运行,因为它需要控制Docker守护进程和容器。因此,您需要使用sudo或root用户来运行docker-compose命令。


如果您想让普通用户也能够运行docker-compose命令,可以按照以下步骤进行操作:


编辑sudoers文件,允许普通用户使用docker命令:

sudo visudo


在文件末尾添加以下行:


%sudo ALL = NOPASSWD: /usr/bin/docker


保存并退出。


将当前用户的组更改为sudo组:

sudo usermod -aG sudo yourusername


其中,yourusername是您的用户名。


重新登录或注销并重新登录,以使更改生效。

现在,您应该能够使用普通用户身份运行docker-compose命令了。

如何关闭Docker远程访问

打开Docker引擎的配置文件。

在Linux上,您可以运行以下命令:


shell

sudo nano /etc/docker/daemon.json

在Windows上,您可以运行以下命令:


shell

notepad %programdata%\Docker\config\daemon.json

在配置文件中添加以下内容以限制远程访问:

json

{

  "hosts": ["localhost:2375/tcp"]

}

这将仅允许通过本地主机进行连接,从而防止远程访问。 3. 保存配置文件并退出。 4. 重新启动Docker引擎以使更改生效。


在Linux上,您可以运行以下命令:


shell

sudo systemctl restart docker

在Windows上,您可以右键单击任务栏中的Docker图标,然后选择“重启”。


这样,您就成功地关闭了Docker的远程访问。

  • 当前日期:
  • 北京时间:
  • 时间戳:
  • 今年的第:17周
  • 我的 IP:3.149.241.32
农历
五行
冲煞
彭祖
方位
吉神
凶神
极简任务管理 help
+ 0 0 0
Task Idea Collect