export DOCKER_COMPOSE_VERSION=v2.32.4 # https://github.com/docker/compose/releases
# apiv1/code-server
docker build . --target docker-compose --build-arg DOCKER_COMPOSE_VERSION=$DOCKER_COMPOSE_VERSION -t apiv1/docker-compose -t apiv1/docker-compose:$DOCKER_COMPOSE_VERSION
docker buildx build . --target docker-compose --platform linux/amd64,linux/arm64 --build-arg DOCKER_COMPOSE_VERSION=$DOCKER_COMPOSE_VERSION --pull --push -t apiv1/docker-compose -t apiv1/docker-compose:$DOCKER_COMPOSE_VERSION
# 可选 需要 root 权限
sudo -s
# 可选 安装到 /bin, 或者自己设置的路径
cd /bin
docker container create --pull always --name docker-compose-container apiv1/docker-compose
docker container cp docker-compose-container:/usr/local/bin/docker-compose .
docker container remove docker-compose-container
# 默认 装在system目录
type docker-compose && mkdir -p /usr/local/lib/docker/cli-plugins && ln -sf $(which docker-compose) /usr/local/lib/docker/cli-plugins/
# 可选 装在user目录
type docker-compose && ln -sf $(which docker-compose) ~/.docker/cli-plugins/
# 放置临时配置文件, 名字格式为 *compose*.yml
# 下面选一个构建方式构建
docker build . --build-arg DOCKER_COMPOSE_STAGE=apiv1/docker-compose --target docker-compose-pack -t $DOCKER_COMPOSE_IMAGE # legacy
docker buildx build . --build-arg DOCKER_COMPOSE_STAGE=apiv1/docker-compose --target docker-compose-pack --platform linux/amd64,linux/arm64 --pull --push -t $DOCKER_COMPOSE_IMAGE # recommended
rm *compose*.yml # 删除临时配置文件
bash/zsh
docker-compose() {
local PROJECT_DIRECTORY=${PROJECT_DIRECTORY:-$PWD}
local PUID=$(id -u)
local PGID=$(id -g)
test -n "$DOCKER_HOST" -a -z "$DOCKER_SOCK" && export DOCKER_SOCK=${DOCKER_HOST//unix:\/\//}
$(which docker) run --rm -it --tmpfs /tmp -v "${DOCKER_SOCK:-/var/run/docker.sock}:/var/run/docker.sock" -v "$PROJECT_DIRECTORY:$PROJECT_DIRECTORY" -w "$PROJECT_DIRECTORY" -e PUID=$PUID -e PGID=$PGID -e DOCKER_SOCK="${DOCKER_SOCK}" apiv1/docker-compose --project-directory "$PROJECT_DIRECTORY" $*
}
docker-compose () {
local PROJECT_DIRECTORY=${PROJECT_DIRECTORY:-$PWD}
local PUID=$(id -u)
local PGID=$(id -g)
local DOCKER_COMPOSE_FILE=${DOCKER_COMPOSE_FILE:-$PROJECT_DIRECTORY/compose.yml}
test -n "$DOCKER_HOST" -a -z "$DOCKER_SOCK" && export DOCKER_SOCK=${DOCKER_HOST//unix:\/\//}
$(which docker) run --rm -it --tmpfs /tmp -v "${DOCKER_SOCK:-/var/run/docker.sock}:/var/run/docker.sock" -v "$PROJECT_DIRECTORY:$PROJECT_DIRECTORY" -w "$PROJECT_DIRECTORY" -e PUID=$PUID -e PGID=$PGID -e DOCKER_SOCK="${DOCKER_SOCK}" -v $DOCKER_COMPOSE_FILE:/compose.yml apiv1/docker-compose --project-directory "$PROJECT_DIRECTORY" -f /compose.yml $*
}
# (可选, 使用dood-run)
docker-compose () {
local DOCKER_COMPOSE_FILE=${DOCKER_COMPOSE_FILE:-$PROJECT_DIRECTORY/compose.yml}
dood-run -v $DOCKER_COMPOSE_FILE:/compose.yml apiv1/docker-compose --project-directory "$PWD" "$@"
}
Powershell
function global:docker-compose() {
docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock -v "${PWD}:${PWD}" -w "${PWD}" apiv1/docker-compose $args
}
Windows Powershell
function global:docker-compose() {
docker run --rm -it -e COMPOSE_CONVERT_WINDOWS_PATHS=1 -v //var/run/docker.sock:/var/run/docker.sock -v "${PWD}:/workspace" -w "/workspace" apiv1/docker-compose $args
}