UNPKG

2.46 kBJavaScriptView Raw
1/**
2 * Define commands for docker mysql
3 * @function adockerMysql
4 * @param {string} name - Container name
5 * @param {Object} options - Optional settings
6 * @returns {Object}
7 */
8'use strict'
9
10const {
11 logs, remove, run,
12 start, stop, inspect
13} = require('adocker/commands')
14const co = require('co')
15const path = require('path')
16const { mkdirpAsync } = require('asfs')
17
18const handleError = (err) => {
19 console.error(err)
20 process.exit(1)
21}
22
23/** @lends adockerMysql */
24function adockerMysql (name, options = {}) {
25 let {
26 image = 'mysql:latest',
27 rootPassword = 'root',
28 varDir = 'var/mysql',
29 publish = false,
30 network = 'default',
31 onError = handleError,
32 cwd = process.cwd()
33 } = options
34
35 varDir = path.resolve(varDir)
36 let host = network === 'default' ? '$MYSQL_PORT_3306_TCP_ADDR' : name
37 let bundle = {
38 /**
39 * Run mysql container
40 * @returns {Promise}
41 */
42 run: (...args) => mkdirpAsync(varDir)
43 .then(() => run({
44 name,
45 network,
46 publish,
47 env: `MYSQL_ROOT_PASSWORD=${rootPassword}`,
48 volume: `${varDir}:/var/lib/mysql`,
49 detach: true
50 }, image, ...args)),
51 /**
52 * Running
53 * @returns {Promise}
54 */
55 isRunning: () => inspect(name).then(([ info ]) => !!info),
56 /**
57 * Show logs of mysql container
58 * @returns {Promise}
59 */
60 logs: logs.bind(null, name),
61 /**
62 * Start mysql container
63 * @returns {Promise}
64 */
65 start: start.bind(null, name),
66 /**
67 * Stop mysql container
68 * @returns {Promise}
69 */
70 stop: stop.bind(null, name),
71 /**
72 * Remove mysql container
73 * @param {Object} [options={}] - Optional settings
74 * @param {boolean} [options.force=false] - Force to remove
75 * @returns {Promise}
76 */
77 remove: remove.bind(null, name),
78 /**
79 * Open terminal of mysql container
80 * @returns {Promise}
81 */
82 terminal: run.bind(null, {
83 interactive: true,
84 tty: true,
85 network,
86 link: `${name}:mysql`,
87 rm: true
88 }, image, 'sh', '-c', `exec mysql -h"${host}" -P"3306" -uroot -p"${rootPassword}"`)
89 }
90 return Object.assign(bundle, {
91 cli () {
92 return Object.assign({},
93 ...Object.keys(bundle).map((name) => ({
94 [name]: (...args) => {
95 process.chdir(cwd)
96 return bundle[ name ](...args).catch(onError)
97 }
98 }))
99 )
100 }
101 })
102}
103
104module.exports = adockerMysql