aboutsummaryrefslogtreecommitdiff
path: root/src/tools/docker-run-to-docker-compose-converter
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/docker-run-to-docker-compose-converter')
-rw-r--r--src/tools/docker-run-to-docker-compose-converter/composerize.d.ts4
-rw-r--r--src/tools/docker-run-to-docker-compose-converter/docker-run-to-docker-compose-converter.vue39
-rw-r--r--src/tools/docker-run-to-docker-compose-converter/index.ts11
3 files changed, 54 insertions, 0 deletions
diff --git a/src/tools/docker-run-to-docker-compose-converter/composerize.d.ts b/src/tools/docker-run-to-docker-compose-converter/composerize.d.ts
new file mode 100644
index 0000000..aab47a2
--- /dev/null
+++ b/src/tools/docker-run-to-docker-compose-converter/composerize.d.ts
@@ -0,0 +1,4 @@
+declare module 'composerize' {
+ const composerize: (arg: string) => string;
+ export default composerize;
+}
diff --git a/src/tools/docker-run-to-docker-compose-converter/docker-run-to-docker-compose-converter.vue b/src/tools/docker-run-to-docker-compose-converter/docker-run-to-docker-compose-converter.vue
new file mode 100644
index 0000000..583bd58
--- /dev/null
+++ b/src/tools/docker-run-to-docker-compose-converter/docker-run-to-docker-compose-converter.vue
@@ -0,0 +1,39 @@
+<template>
+ <div>
+ <n-form-item label="Your docker run command:" :show-feedback="false">
+ <n-input
+ v-model:value="dockerRun"
+ style="font-family: monospace"
+ type="textarea"
+ placeholder="Your docker run command to convert..."
+ rows="3"
+ />
+ </n-form-item>
+
+ <n-divider />
+
+ <textarea-copyable :value="dockerCompose" language="yaml" />
+ <br />
+ <br />
+ <n-space justify="center">
+ <n-button :disabled="dockerCompose === ''" secondary @click="download"> Download docker-compose.yml </n-button>
+ </n-space>
+ </div>
+</template>
+
+<script setup lang="ts">
+import { computed, ref } from 'vue';
+import { withDefaultOnError } from '@/utils/defaults';
+import { useDownloadFileFromBase64 } from '@/composable/downloadBase64';
+import { textToBase64 } from '@/utils/base64';
+import TextareaCopyable from '@/components/TextareaCopyable.vue';
+
+import composerize from 'composerize';
+
+const dockerRun = ref(
+ 'docker run -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro --restart always --log-opt max-size=1g nginx',
+);
+const dockerCompose = computed(() => withDefaultOnError(() => composerize(dockerRun.value), ''));
+const dockerComposeBase64 = computed(() => 'data:application/yaml;base64,' + textToBase64(dockerCompose.value));
+const { download } = useDownloadFileFromBase64({ source: dockerComposeBase64, filename: 'docker-compose.yml' });
+</script>
diff --git a/src/tools/docker-run-to-docker-compose-converter/index.ts b/src/tools/docker-run-to-docker-compose-converter/index.ts
new file mode 100644
index 0000000..d9c1437
--- /dev/null
+++ b/src/tools/docker-run-to-docker-compose-converter/index.ts
@@ -0,0 +1,11 @@
+import { BrandDocker } from '@vicons/tabler';
+import { defineTool } from '../tool';
+
+export const tool = defineTool({
+ name: 'Docker run to Docker compose converter',
+ path: '/docker-run-to-docker-compose-converter',
+ description: 'Turns docker run commands into docker-compose files!',
+ keywords: ['docker', 'run', 'compose', 'yaml', 'yml', 'convert', 'deamon'],
+ component: () => import('./docker-run-to-docker-compose-converter.vue'),
+ icon: BrandDocker,
+});