记录一些使用 Docker 的经验和技巧,备忘 📝
加速
Docker 镜像加速
尝试过各种国内镜像,最终发现还是阿里云的最快,这与 【测速】使用不同的Docker镜像加速器下载速度 对比测试 这篇博客中的测试结果一致。由于阿里云会为每个用户分配独立的加速器地址,建议有阿里云账号的还是用自己的地址,查看方式是,登录阿里云账号后进入控制台,然后【容器镜像服务】->【镜像工具】->【镜像加速器】查看:
1 2 3 4 5 6 7 8
| sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
|
镜像内 apt 更换为清华源
编写 Docker 文件的时候,经常需要在基础镜像的基础上通过包管理安装额外的软件。基于 debian 的基础镜像通过默认源安装阮建师速度会慢得令人发指,替换成国内源则可以大幅提速。个人经验清华源在速度、仓库丰富度、更新及时性多个方面都是较为优秀的:
Debian 镜像使用帮助
通过在 Dockerfile
中加入如下命令即可:
1
| RUN apt install apt-transport-https ca-certificates && sed -i 's|deb.debian.org|mirrors.ustc.edu.cn|g' /etc/apt/sources.list
|
实用工具
Watchtower – 自动更新 Docker 镜像与容器
Quick Start
- 监控更新所有容器:
1
| docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
|
- 只更新某个容器一次
1
| docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once portainer
|
- 只监控更新指定容器
1
| docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --label-enable
|
然后需要被监控的容器运行命令中加入 --label='com.centurylinklabs.watchtower.enable=true'
dive - 查看镜像层级和文件目录
A tool for exploring each layer in a docker image
用法:
1
| docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive:latest [image]:[tag]
|
构建镜像瘦身
将容器作为程序运行
dart
1 2 3
| docker run --rm -it -v ${PWD}:/runner --workdir /runner dart:stable dart --version
alias dart="docker run --rm -it -v ${PWD}:/runner --workdir /runner dart:stable dart"
|
php
Dockerfile:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| FROM php:7.4-cli
RUN apt install apt-transport-https ca-certificates && sed -i 's|deb.debian.org|mirrors.ustc.edu.cn|g' /etc/apt/sources.list
RUN apt-get update && apt-get install -y \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ librabbitmq-dev \ libssh-dev \ zip \ unzip \ zlib1g-dev \ libzip-dev \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) gd \ && docker-php-ext-install bcmath \ && docker-php-ext-install zip \ && docker-php-ext-install sockets
RUN pecl install redis-5.3.1 \ && pecl install mongodb-1.7.5 \ && pecl install xdebug-2.8.1 \ && pecl install amqp \ && docker-php-ext-enable redis mongodb xdebug amqp
RUN echo "xdebug.enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && \ echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && \ echo "xdebug.idekey=PHPSTORM" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && \ echo "xdebug.remote_host=172.17.0.1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && \ echo "xdebug.remote_port=9000" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
EXPOSE 8000
|
构建、运行
1 2
| docker build -t php-runner . docker run --name="php-runner" -it --rm php-runner /bin/bash
|
PhpStorm 配置
首先在如下设置页面选择新增来自 Docker 的解释器
然后在弹框中选择 Docker,再在下拉框中选择编译好的 php-runner
镜像
运行或调试代码前选择这个解释器,效果如下图所示,可以看到断点调试工作正常
利用 docker-compose 跑服务
Piwigo
Piwigo - 管理您的图像收藏
docker-compose.yml
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| version: "2.1"
services: mysql: image: mysql:latest restart: always container_name: piwigo_mysql command: --default-authentication-plugin=mysql_native_password environment: MYSQL_ROOT_PASSWORD: [password] MYSQL_DATABASE: piwigo MYSQL_USER: debuggerx MYSQL_PASSWORD: [password] volumes: - /mnt/hd500/db:/var/lib/mysql ports: - "3306:3306" networks: - mynet
piwigo: image: lscr.io/linuxserver/piwigo container_name: piwigo links: - mysql environment: - PUID=1000 - PGID=1000 - TZ=Asia/Shanghai volumes: - /mnt/hd500/config:/config - /mnt/hd500/gallery:/gallery ports: - 80:80 networks: - mynet restart: unless-stopped
networks: mynet: driver: bridge
|
Files Gallery
Files Gallery
Tiny File Manager
How to deal with permissions using docker - nginx / php-fpm
一键部署的相册和文件管理器:docker_gallery_with_manager