1. Docker#

client通过运行在主机上的docker daemon操作image和container,registry提供image的发布和下载(类似npm和pip)。
Docker 镜像是一个特殊的只读文件系统,提供容器运行时所需的程序、库、资源、配置等文件,还包含一些为运行时准备的配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
Container是image的运行实例,是运行在宿主机上的一种特殊的进程。一个image可以有多个container。

Container是在Image基础上叠加了一个读写层,在container内部做一些写操作后,可以commit读写层生成新的image
上图省略掉了存储配置文件信息的init层。init层位于上图image和container两层之间。存放运行操作系统时候需要写的一些目录/文件。例如/etc 目录。init层commit时候不提交。 因为没必要,每次只读层运行时候都会自动生成init层内容。
1.1. commands#
1.2. Dockerfile#
是用来build image的配置文件,从一个基础image开始,运行一些列配置命令,得到另外一个image
2. Docker Compose#
一个用于定义,运行和管理多容器的工具. 运行起来之后,也可以用之前的docker命令来操作容器。
3. Examples#
3.1. Docker#
3.1.1. directus#
以下映射了两个卷,读取环境变量,然后交互式运行directus,container名字为directus-sqlite。
其中环境变量文件 env_sqlite
DB_CLIENT="sqlite3"
DB_FILENAME="/directus/database/data.db"
RATE_LIMITER_ENABLED=true
RATE_LIMITER_POINTS=50
RATE_LIMITER_DURATION=1
RATE_LIMITER_STORE=memory
CACHE_ENABLED=true
CACHE_TTL="30m"
CACHE_NAMESPACE="directus-cache"
CACHE_AUTO_PURGE=true
# memory | redis | memcache
CACHE_STORE=memory
ASSETS_CACHE_TTL="30m"
STORAGE_LOCATIONS="local"
STORAGE_LOCAL_DRIVER="local"
STORAGE_LOCAL_ROOT="/directus/uploads"
KEY="xxxxxxx-xxxxxx-xxxxxxxx-xxxxxxxxxx"
SECRET="abcdef"
ACCESS_TOKEN_TTL="15m"
REFRESH_TOKEN_TTL="7d"
REFRESH_TOKEN_COOKIE_SECURE="false"
REFRESH_TOKEN_COOKIE_SAME_SITE="lax"
REFRESH_TOKEN_COOKIE_NAME="directus_refresh_token"
CORS_ENABLED="true"
CORS_ORIGIN="true"
CORS_METHODS=GET,POST,PATCH,DELETE
CORS_ALLOWED_HEADERS=Content-Type,Authorization
CORS_EXPOSED_HEADERS=Content-Range
CORS_CREDENTIALS="true"
CORS_MAX_AGE=18000
AUTH_PROVIDERS="dingtalk"
AUTH_DINGTALK_DRIVER="oauth2"
AUTH_DINGTALK_CLIENT_ID="...."
AUTH_DINGTALK_CLIENT_SECRET="c6rCTM1nmIm-...."
AUTH_DINGTALK_AUTHORIZE_URL="https://fb.....cn/apipro/oauth_dingtalk/auth"
AUTH_DINGTALK_ACCESS_URL="https://fb.....cn/apipro/oauth_dingtalk/access_token"
AUTH_DINGTALK_PROFILE_URL="https://fb.....cn/apipro/oauth_dingtalk/profile"
AUTH_DINGTALK_ALLOW_PUBLIC_REGISTRATION="true"
AUTH_DINGTALK_DEFAULT_ROLE_ID="86a3338c-26a5-447d-bfbd-f938ee2c3c40"
AUTH_DINGTALK_ICON="alipay"
EXTENSIONS_PATH="./extensions"
EMAIL_FROM="[email protected]"
EMAIL_TRANSPORT="smtp"
EMAIL_SMTP_POOL=false
EMAIL_SMTP_HOST="smtp........com"
EMAIL_SMTP_PORT=465
EMAIL_SMTP_SECURE=true # Use TLS
EMAIL_SMTP_IGNORE_TLS=false
EMAIL_SMTP_USER="[email protected]"
EMAIL_SMTP_PASSWORD="...."
后续就可以用docker start来启动directus。
3.1.2. 基本操作#
3.2. Docker Compose#
3.2.1. directus的 docker-compose.yaml#
3.2.2. 基本操作#