Docker DesktopからApple Containerへの移行ツール・Xanshipをリリースしました

Docker DesktopからApple Containerへの移行ツール・Xanshipをリリースしました

Docker DesktopからApple Containerへの移行ツール・Xanshipをリリースしました

Xanship

Xanship (transship) は、Docker Desktop で稼働しているコンテナを Apple Container に移行するためのCLIです。

ライブマイグレーションではなく、段階的な移行を行います。

  1. docker inspectdocker volume lsdocker network ls などで Docker Desktop コンテナをアセスメントする。
  2. Apple Container 向けの移行計画を生成する。
  3. 必要に応じてイメージを Apple Container にロードする。
  4. Apple Container でドライラン作成を行う。
  5. Docker の named volume データを Apple Container の volume にコピーする。
  6. Docker Desktop 側のコンテナを停止する。
  7. Apple Container 側で同等のコンテナを起動する。

インストール

GitHub Releases から最新版をインストールできます。

curl -fsSL https://raw.githubusercontent.com/rioriost/xanship/main/scripts/install.sh | sh

使用例

単体の稼働中コンテナをアセスメントする:

xanship assess --container my-container
xanship commands --dry-run
xanship dry-run --apply
xanship load-images
xanship copy-volumes
xanship stop-docker
xanship start-apple

全フェーズを連続実行する:

xanship migrate --compose-project myproject

テスト済みコンテナ・Docker Compose例

Single containers

ImageNotes
nginx:alpineHTTP service with published port
redis:7-alpineRedis service with published port
postgres:16-alpineDatabase with named volume
mysql:8.4Database with named volume
mongo:7Database with named volume
httpd:alpineHTTP service with published port
traefik:v3.0HTTP reverse proxy entrypoint
memcached:alpineMemcached service with published port
rabbitmq:3-management-alpineBroker plus management ports
minio/minio:latestObject storage with named volume
alpine:3.20Base Linux image
busybox:1.36Minimal utility image
ubuntu:24.04Ubuntu base image
debian:bookworm-slimDebian base image
fedora:latestFedora base image
rockylinux:9Rocky Linux base image
almalinux:9AlmaLinux base image
amazonlinux:2023Amazon Linux base image
bash:5Shell utility image
node:22-alpineNode.js runtime
python:3.12-alpinePython runtime
golang:1.23-alpineGo toolchain image
eclipse-temurin:21-jre-alpineJava runtime
maven:3-eclipse-temurin-21-alpineMaven build image
gradle:8-jdk21-alpineGradle build image
rust:1-alpineRust toolchain image
ruby:3.3-alpineRuby runtime
perl:5-slimPerl runtime
php:8.3-cli-alpinePHP CLI runtime
composer:latestPHP Composer image
caddy:2-alpineCaddy HTTP server
eclipse-mosquitto:2MQTT broker
nats:2-alpineNATS broker
registry:2Docker registry with named volume
adminer:latestDatabase admin web UI
php:8.3-apachePHP Apache web server
tomcat:10-jre17-temurinTomcat app server
jetty:12-jre17Jetty app server
wordpress:php8.2-apacheWordPress web container
mariadb:11MariaDB with named volume
couchdb:3CouchDB with named volume
zookeeper:3.9ZooKeeper coordination service
solr:9-slimSolr search service
hashicorp/http-echo:1.0HTTP echo service
hashicorp/consul:1.19Consul dev agent
gitea/gitea:latestGitea with named volume
grafana/grafana-oss:latestGrafana with named volume
prom/prometheus:latestPrometheus with named volume
prom/alertmanager:latestAlertmanager service
prom/node-exporter:latestNode exporter service

Docker Compose combinations

CombinationImages
WordPress + MariaDBwordpress:php8.2-apache, mariadb:11
Web + Redisnginx:alpine, redis:7-alpine
Nginx + httpdnginx:alpine, httpd:alpine
Adminer + Postgresadminer:latest, postgres:16-alpine
Prometheus + Grafanaprom/prometheus:latest, grafana/grafana-oss:latest
Caddy + Rediscaddy:2-alpine, redis:7-alpine
Node.js + Postgresnode:22-alpine, postgres:16-alpine
Python + Redispython:3.12-alpine, redis:7-alpine
PHP Apache + MySQLphp:8.3-apache, mysql:8.4
Registry + Redisregistry:2, redis:7-alpine
Grafana + Prometheus + Alertmanagergrafana/grafana-oss:latest, prom/prometheus:latest, prom/alertmanager:latest
Gitea + Postgresgitea/gitea:latest, postgres:16-alpine
CouchDB + Adminercouchdb:3, adminer:latest
Solr + ZooKeepersolr:9-slim, zookeeper:3.9
NATS + Redisnats:2-alpine, redis:7-alpine
Mosquitto + Node.jseclipse-mosquitto:2, node:22-alpine
Tomcat + Redistomcat:10-jre17-temurin, redis:7-alpine
Jetty + Postgresjetty:12-jre17, postgres:16-alpine
Consul + Grafanahashicorp/consul:1.19, grafana/grafana-oss:latest
MinIO + Adminerminio/minio:latest, adminer:latest

最新のリストは、GitHubのtested.mdを参照してください。