mirror of
https://github.com/veggiemonk/awesome-docker.git
synced 2024-12-22 22:19:30 -05:00
commit
e2f4dd75aa
2
.gitignore
vendored
2
.gitignore
vendored
@ -6,7 +6,7 @@ node_modules
|
|||||||
.cache
|
.cache
|
||||||
dist
|
dist
|
||||||
package-lock.json
|
package-lock.json
|
||||||
website/index.merged.html
|
|
||||||
website/index.html
|
website/index.html
|
||||||
|
website/table.html
|
||||||
|
|
||||||
**/.DS_Store
|
**/.DS_Store
|
||||||
|
211
LICENSE
211
LICENSE
@ -1,30 +1,201 @@
|
|||||||
[![CC0](https://i.creativecommons.org/p/zero/1.0/88x31.png)](https://creativecommons.org/publicdomain/zero/1.0/)
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
Statement of Purpose
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work").
|
1. Definitions.
|
||||||
|
|
||||||
Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others.
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights.
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following:
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work;
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
moral rights retained by the original author(s) and/or performer(s);
|
exercising permissions granted by this License.
|
||||||
publicity and privacy rights pertaining to a person's image or likeness depicted in a Work;
|
|
||||||
rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below;
|
|
||||||
rights protecting the extraction, dissemination, use and reuse of data in a Work;
|
|
||||||
database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and
|
|
||||||
other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof.
|
|
||||||
|
|
||||||
2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose.
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose.
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
4. Limitations and Disclaimers.
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document.
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law.
|
form, that is based on (or derived from) the Work and for which the
|
||||||
Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work.
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work.
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
43
build.js
43
build.js
@ -2,7 +2,7 @@ const fs = require('fs');
|
|||||||
const showdown = require('showdown');
|
const showdown = require('showdown');
|
||||||
const cheerio = require('cheerio');
|
const cheerio = require('cheerio');
|
||||||
const Parcel = require('parcel-bundler');
|
const Parcel = require('parcel-bundler');
|
||||||
const camelCase = require('camelcase');
|
const sm = require('sitemap');
|
||||||
|
|
||||||
process.env.NODE_ENV = 'production';
|
process.env.NODE_ENV = 'production';
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ const includeReadme = ({
|
|||||||
md = readme,
|
md = readme,
|
||||||
templateHTML = template,
|
templateHTML = template,
|
||||||
dest = merged,
|
dest = merged,
|
||||||
}) => {
|
} = {}) => {
|
||||||
const converter = new showdown.Converter({
|
const converter = new showdown.Converter({
|
||||||
omitExtraWLInCodeBlocks: true,
|
omitExtraWLInCodeBlocks: true,
|
||||||
simplifiedAutoLink: true,
|
simplifiedAutoLink: true,
|
||||||
@ -48,19 +48,6 @@ const includeReadme = ({
|
|||||||
console.log('Merging files...');
|
console.log('Merging files...');
|
||||||
const $ = cheerio.load(indexTemplate);
|
const $ = cheerio.load(indexTemplate);
|
||||||
$('#md').append(converter.makeHtml(markdown));
|
$('#md').append(converter.makeHtml(markdown));
|
||||||
$('a').each((i, elem) => {
|
|
||||||
$(elem).attr(
|
|
||||||
'id',
|
|
||||||
camelCase(
|
|
||||||
$(elem)
|
|
||||||
.attr('href')
|
|
||||||
.replace(/\/|\.|:|#/g, ''),
|
|
||||||
{
|
|
||||||
pascalCase: true,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
console.log('Writing index.html');
|
console.log('Writing index.html');
|
||||||
fs.writeFileSync(dest, $.html(), 'utf8');
|
fs.writeFileSync(dest, $.html(), 'utf8');
|
||||||
console.log('DONE 👍');
|
console.log('DONE 👍');
|
||||||
@ -77,12 +64,34 @@ const bundle = (dest = destination) => {
|
|||||||
})
|
})
|
||||||
.bundle()
|
.bundle()
|
||||||
.then(() => {
|
.then(() => {
|
||||||
fs.copyFileSync('website/sitemap.xml', 'dist/sitemap.xml');
|
// Creates a sitemap object given the input configuration with URLs
|
||||||
|
const sitemap = sm.createSitemap({
|
||||||
|
hostname: 'https://awesome-docker.netlify.com/',
|
||||||
|
cacheTime: 6000000, // 600 sec (10 min) cache purge period
|
||||||
|
urls: [
|
||||||
|
{
|
||||||
|
url: '/',
|
||||||
|
changefreq: 'daily',
|
||||||
|
priority: 0.8,
|
||||||
|
lastmodrealtime: true,
|
||||||
|
lastmodfile: 'dist/index.html',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: '/table.html',
|
||||||
|
changefreq: 'weekly',
|
||||||
|
priority: 0.8,
|
||||||
|
lastmodrealtime: true,
|
||||||
|
lastmodfile: 'dist/table.html',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
fs.writeFileSync('dist/sitemap.xml', sitemap.toString());
|
||||||
|
// fs.copyFileSync('website/sitemap.xml', 'dist/sitemap.xml');
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const main = () => {
|
const main = () => {
|
||||||
includeReadme({});
|
includeReadme();
|
||||||
bundle();
|
bundle();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
120
buildMetadata.js
Normal file
120
buildMetadata.js
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
const fs = require('fs');
|
||||||
|
const { promisify } = require('util');
|
||||||
|
const fetch = require('node-fetch');
|
||||||
|
const dayjs = require('dayjs');
|
||||||
|
|
||||||
|
require('draftlog').into(console);
|
||||||
|
|
||||||
|
process.on('unhandledRejection', error => {
|
||||||
|
console.log('unhandledRejection', error.message);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!process.env.TOKEN) {
|
||||||
|
throw new Error('no github token found');
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- ENV VAR ---
|
||||||
|
const BATCH_SIZE = parseInt(process.env.BATCH_SIZE, 10) || 10;
|
||||||
|
const DELAY = parseInt(process.env.DELAY, 10) || 3000;
|
||||||
|
// --- FILENAME ---
|
||||||
|
const README = 'README.md';
|
||||||
|
const GITHUB_METADATA_FILE = `data/${dayjs().format(
|
||||||
|
'YYYY-MM-DDTHH.mm.ss',
|
||||||
|
)}-fetched_repo_data.json`;
|
||||||
|
const LATEST_FILENAME = 'data/latest';
|
||||||
|
const GITHUB_REPOS = 'data/list_repos.json';
|
||||||
|
// --- HTTP ---
|
||||||
|
const API = 'https://api.github.com/';
|
||||||
|
const options = {
|
||||||
|
method: 'GET',
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'awesome-docker script listing',
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
Authorization: `token ${process.env.TOKEN}`,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const removeHost = x => x.slice('https://github.com/'.length, x.length);
|
||||||
|
const readFile = promisify(fs.readFile);
|
||||||
|
const writeFile = promisify(fs.writeFile);
|
||||||
|
const printError = err => err && console.error('❌ ERROR', err);
|
||||||
|
const barLine = console.draft('Starting batch...');
|
||||||
|
|
||||||
|
const delay = ms =>
|
||||||
|
new Promise(resolve => {
|
||||||
|
setTimeout(() => resolve(), ms);
|
||||||
|
});
|
||||||
|
|
||||||
|
const get = (path, opt) =>
|
||||||
|
fetch(`${API}repos/${path}`, {
|
||||||
|
...options,
|
||||||
|
...opt,
|
||||||
|
})
|
||||||
|
.catch(printError)
|
||||||
|
.then(response => {
|
||||||
|
if (response.ok) return response.json();
|
||||||
|
throw new Error('Network response was not ok.');
|
||||||
|
})
|
||||||
|
.catch(printError);
|
||||||
|
|
||||||
|
const fetchAll = batch => Promise.all(batch.map(async path => get(path)));
|
||||||
|
|
||||||
|
const extractAllRepos = markdown => {
|
||||||
|
const re = /https:\/\/github\.com\/([a-zA-Z0-9-._]+)\/([a-zA-Z0-9-._]+)/g;
|
||||||
|
const md = markdown.match(re);
|
||||||
|
return [...new Set(md)];
|
||||||
|
};
|
||||||
|
|
||||||
|
const ProgressBar = (i, batchSize, total) => {
|
||||||
|
const progress = Math.round((i / total) * 100);
|
||||||
|
const units = Math.round(progress / 2);
|
||||||
|
return barLine(
|
||||||
|
`[${'='.repeat(units)}${' '.repeat(50 - units)}] ${progress}% - # ${i}`,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
async function batchFetchRepoMetadata(githubRepos) {
|
||||||
|
const repos = githubRepos.map(removeHost);
|
||||||
|
|
||||||
|
const metadata = [];
|
||||||
|
/* eslint-disable no-await-in-loop */
|
||||||
|
for (let i = 0; i < repos.length; i += BATCH_SIZE) {
|
||||||
|
const batch = repos.slice(i, i + BATCH_SIZE);
|
||||||
|
if (process.env.DEBUG) console.log({ batch });
|
||||||
|
const res = await fetchAll(batch);
|
||||||
|
metadata.push(...res);
|
||||||
|
ProgressBar(i, BATCH_SIZE, repos.length);
|
||||||
|
// poor man's rate limiting so github don't ban us
|
||||||
|
await delay(DELAY);
|
||||||
|
}
|
||||||
|
ProgressBar(repos.length, BATCH_SIZE, repos.length);
|
||||||
|
return metadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
try {
|
||||||
|
const markdown = await readFile(README, { encoding: 'utf8' });
|
||||||
|
const githubRepos = extractAllRepos(markdown);
|
||||||
|
await writeFile(
|
||||||
|
GITHUB_REPOS,
|
||||||
|
JSON.stringify(githubRepos, null, 2),
|
||||||
|
printError,
|
||||||
|
);
|
||||||
|
|
||||||
|
const metadata = await batchFetchRepoMetadata(githubRepos);
|
||||||
|
|
||||||
|
await writeFile(
|
||||||
|
GITHUB_METADATA_FILE,
|
||||||
|
JSON.stringify(metadata, null, 2),
|
||||||
|
printError,
|
||||||
|
);
|
||||||
|
console.log('✅ metadata saved');
|
||||||
|
|
||||||
|
// save the latest
|
||||||
|
fs.writeFile(LATEST_FILENAME, GITHUB_METADATA_FILE, printError);
|
||||||
|
} catch (err) {
|
||||||
|
printError(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
main();
|
122
buildTable.js
Normal file
122
buildTable.js
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
const fs = require('fs');
|
||||||
|
const cheerio = require('cheerio');
|
||||||
|
const dayjs = require('dayjs');
|
||||||
|
|
||||||
|
const getLatestFilename = fs.readFileSync('data/latest', 'utf-8');
|
||||||
|
console.log(getLatestFilename);
|
||||||
|
const metaData = require(`./${getLatestFilename}`); // eslint-disable-line import/no-dynamic-require
|
||||||
|
|
||||||
|
process.env.NODE_ENV = 'production';
|
||||||
|
|
||||||
|
process.on('unhandledRejection', error => {
|
||||||
|
console.log('unhandledRejection', error.message);
|
||||||
|
});
|
||||||
|
|
||||||
|
const templateHTML = 'website/table.tmpl.html';
|
||||||
|
const destination = 'website/table.html';
|
||||||
|
|
||||||
|
const valueNames = [
|
||||||
|
'name',
|
||||||
|
'description',
|
||||||
|
'homepage',
|
||||||
|
'star',
|
||||||
|
'updated',
|
||||||
|
'language',
|
||||||
|
'license',
|
||||||
|
'author',
|
||||||
|
];
|
||||||
|
|
||||||
|
const getLastUpdate = updated => {
|
||||||
|
const updt = Number(dayjs(updated).diff(dayjs(), 'days'));
|
||||||
|
if (updt < 0) {
|
||||||
|
if (Math.abs(updt) === 1) return `1 day ago`;
|
||||||
|
return `${Math.abs(updt)} days ago`;
|
||||||
|
} else if (updt === 0) return 'today';
|
||||||
|
return updated;
|
||||||
|
};
|
||||||
|
|
||||||
|
const mapHomePage = h => {
|
||||||
|
if (h === 'manageiq.org') return 'https://manageiq.org';
|
||||||
|
else if (h === 'dev-sec.io') return 'https://dev-sec.io';
|
||||||
|
return h;
|
||||||
|
};
|
||||||
|
|
||||||
|
const mapLicense = l => {
|
||||||
|
if (l === 'GNU Lesser General Public License v3.0') return 'GNU LGPL v3.0';
|
||||||
|
else if (l === 'GNU General Public License v2.0') return 'GNU GPL v2.0';
|
||||||
|
else if (l === 'GNU General Public License v3.0') return 'GNU GPL v3.0';
|
||||||
|
else if (l === 'BSD 3-Clause "New" or "Revised" License')
|
||||||
|
return 'BSD 3-Clause';
|
||||||
|
else if (l === 'BSD 2-Clause "Simplified" License') return 'BSD 2-Clause';
|
||||||
|
return l;
|
||||||
|
};
|
||||||
|
|
||||||
|
const formatEntry = (
|
||||||
|
{
|
||||||
|
name,
|
||||||
|
html_url: repoURL,
|
||||||
|
description,
|
||||||
|
homepage,
|
||||||
|
stargazers_count: stargazers,
|
||||||
|
pushed_at: updated,
|
||||||
|
language,
|
||||||
|
license,
|
||||||
|
owner,
|
||||||
|
},
|
||||||
|
i,
|
||||||
|
) =>
|
||||||
|
[
|
||||||
|
`<li data-id="${i}">`,
|
||||||
|
`<a href="${repoURL}" class="link ${valueNames[0]}">${name}</a>`,
|
||||||
|
`<p class="${valueNames[1]}">${description || '-'}</p>`,
|
||||||
|
`<p class="${
|
||||||
|
valueNames[4]
|
||||||
|
} timestamp" data-timestamp="${updated}">Last code update: ${getLastUpdate(
|
||||||
|
updated,
|
||||||
|
)}</p>`,
|
||||||
|
(homepage &&
|
||||||
|
`<a href="${mapHomePage(homepage)}" class="link ${
|
||||||
|
valueNames[2]
|
||||||
|
}">website</a>`) ||
|
||||||
|
'<p></p>',
|
||||||
|
`<p class="${
|
||||||
|
valueNames[3]
|
||||||
|
} timestamp" data-timestamp="${stargazers}">⭐️${stargazers}</p>`,
|
||||||
|
(language && `<p class="${valueNames[5]}">💻${language}</p>`) || '<p></p>',
|
||||||
|
(license &&
|
||||||
|
license.url !== null &&
|
||||||
|
`<a href="${license.url}" class="link ${valueNames[6]}">${mapLicense(
|
||||||
|
license.name,
|
||||||
|
)}</a>`) ||
|
||||||
|
'<p></p>',
|
||||||
|
owner &&
|
||||||
|
`<p>Made by </p><a href="${owner.html_url}" class="link ${
|
||||||
|
valueNames[7]
|
||||||
|
}">${owner.login}</a>`,
|
||||||
|
'</li>',
|
||||||
|
].join('');
|
||||||
|
|
||||||
|
function main() {
|
||||||
|
const indexTemplate = fs.readFileSync(templateHTML, 'utf8');
|
||||||
|
const $ = cheerio.load(indexTemplate);
|
||||||
|
const btn = valueNames.map(
|
||||||
|
v => `<button class="sort" data-sort="${v}">${v} </button>`,
|
||||||
|
);
|
||||||
|
$('#md').append(
|
||||||
|
[
|
||||||
|
`<div class="container">`,
|
||||||
|
`<div class="searchbar" ><input class="search" placeholder="Search" /></div>`,
|
||||||
|
`<div class="sortbtn" ><p>Sort by</p>${btn.join('')}</div>`,
|
||||||
|
`</div>`,
|
||||||
|
'<ul class="list">',
|
||||||
|
metaData.map(formatEntry).join(''),
|
||||||
|
'</ul>',
|
||||||
|
].join(''),
|
||||||
|
);
|
||||||
|
|
||||||
|
console.log('Writing table.html');
|
||||||
|
fs.writeFileSync(destination, $.html(), 'utf8');
|
||||||
|
console.log('DONE 👍');
|
||||||
|
}
|
||||||
|
|
||||||
|
main();
|
@ -1,61 +0,0 @@
|
|||||||
const fs = require('fs');
|
|
||||||
const dayjs = require('dayjs');
|
|
||||||
|
|
||||||
process.on('unhandledRejection', error => {
|
|
||||||
console.log('unhandledRejection', error.message);
|
|
||||||
});
|
|
||||||
|
|
||||||
function getLastUpdate(updated) {
|
|
||||||
const updt = Number(dayjs(updated).diff(dayjs(), 'days'));
|
|
||||||
if (updt < 0) {
|
|
||||||
if (Math.abs(updt) === 1) return `1 day ago`;
|
|
||||||
return `${Math.abs(updt)} days ago`;
|
|
||||||
} else if (updt === 0) return 'today';
|
|
||||||
return updated;
|
|
||||||
}
|
|
||||||
|
|
||||||
function createLine(data) {
|
|
||||||
const {
|
|
||||||
name,
|
|
||||||
html_url: repoURL,
|
|
||||||
description,
|
|
||||||
homepage,
|
|
||||||
stargazers_count: stargazers,
|
|
||||||
updated_at: updated,
|
|
||||||
language,
|
|
||||||
license,
|
|
||||||
owner,
|
|
||||||
} = data;
|
|
||||||
if (!name) return '|ERROR |';
|
|
||||||
|
|
||||||
const lineData = [
|
|
||||||
`[${name}](${repoURL})`,
|
|
||||||
description || '-',
|
|
||||||
homepage || '-',
|
|
||||||
stargazers,
|
|
||||||
getLastUpdate(updated),
|
|
||||||
language,
|
|
||||||
license && `[${license.name}](${license.url})`,
|
|
||||||
owner && `[${owner.login}](${owner.html_url})`,
|
|
||||||
];
|
|
||||||
return `|${lineData.join('|')}|`;
|
|
||||||
}
|
|
||||||
|
|
||||||
function main() {
|
|
||||||
const raw = fs.readFileSync('data/fetched_repo_data.json', 'utf-8');
|
|
||||||
const data = JSON.parse(raw);
|
|
||||||
const header = `
|
|
||||||
| Name | Description | Homepage | Star | Updated | Language | License | Author |
|
|
||||||
| ----------- | ----------- | -------- | ---- | ------- | -------- | :---: | ------:|`;
|
|
||||||
const table = [header]
|
|
||||||
.concat(
|
|
||||||
data
|
|
||||||
.sort((a, b) => Number(b.stargazers_count) - Number(a.stargazers_count))
|
|
||||||
.map(createLine),
|
|
||||||
)
|
|
||||||
.join('\n');
|
|
||||||
|
|
||||||
fs.writeFileSync('data/table.md', table);
|
|
||||||
}
|
|
||||||
|
|
||||||
main();
|
|
35022
data/2018-06-06T17.54.30-fetched_repo_data.json
Normal file
35022
data/2018-06-06T17.54.30-fetched_repo_data.json
Normal file
File diff suppressed because it is too large
Load Diff
35051
data/2018-06-09T18.32.12-fetched_repo_data.json
Normal file
35051
data/2018-06-09T18.32.12-fetched_repo_data.json
Normal file
File diff suppressed because it is too large
Load Diff
35051
data/2018-06-25T13.24.43-fetched_repo_data.json
Normal file
35051
data/2018-06-25T13.24.43-fetched_repo_data.json
Normal file
File diff suppressed because it is too large
Load Diff
1
data/latest
Normal file
1
data/latest
Normal file
@ -0,0 +1 @@
|
|||||||
|
data/2018-06-25T13.24.43-fetched_repo_data.json
|
@ -39,7 +39,7 @@
|
|||||||
"https://github.com/axibase/atsd-use-cases",
|
"https://github.com/axibase/atsd-use-cases",
|
||||||
"https://github.com/google/cadvisor",
|
"https://github.com/google/cadvisor",
|
||||||
"https://github.com/deltaskelta/docker-alertd",
|
"https://github.com/deltaskelta/docker-alertd",
|
||||||
"https://github.com/vfarcic/docker-flow-monitor",
|
"https://github.com/docker-flow/docker-flow-monitor",
|
||||||
"https://github.com/dockerana/dockerana",
|
"https://github.com/dockerana/dockerana",
|
||||||
"https://github.com/nicolargo/glances",
|
"https://github.com/nicolargo/glances",
|
||||||
"https://github.com/vegasbrianc/docker-monitoring",
|
"https://github.com/vegasbrianc/docker-monitoring",
|
||||||
@ -96,6 +96,7 @@
|
|||||||
"https://github.com/coreos/clair",
|
"https://github.com/coreos/clair",
|
||||||
"https://github.com/eliasgranderubio/dagda",
|
"https://github.com/eliasgranderubio/dagda",
|
||||||
"https://github.com/docker/docker-bench-security",
|
"https://github.com/docker/docker-bench-security",
|
||||||
|
"https://github.com/google/docker-explorer",
|
||||||
"https://github.com/theupdateframework/notary",
|
"https://github.com/theupdateframework/notary",
|
||||||
"https://github.com/OpenSCAP/openscap",
|
"https://github.com/OpenSCAP/openscap",
|
||||||
"https://github.com/draios/falco",
|
"https://github.com/draios/falco",
|
||||||
@ -163,6 +164,7 @@
|
|||||||
"https://github.com/ncopa/su-exec",
|
"https://github.com/ncopa/su-exec",
|
||||||
"https://github.com/aptible/supercronic",
|
"https://github.com/aptible/supercronic",
|
||||||
"https://github.com/vorakl/TrivialRC",
|
"https://github.com/vorakl/TrivialRC",
|
||||||
|
"https://github.com/projectatomic/buildah",
|
||||||
"https://github.com/GoogleContainerTools/container-diff",
|
"https://github.com/GoogleContainerTools/container-diff",
|
||||||
"https://github.com/mutable/container-factory",
|
"https://github.com/mutable/container-factory",
|
||||||
"https://github.com/mdlavin/copy-docker-image",
|
"https://github.com/mdlavin/copy-docker-image",
|
||||||
@ -188,7 +190,6 @@
|
|||||||
"https://github.com/komljen/dockerfile-examples",
|
"https://github.com/komljen/dockerfile-examples",
|
||||||
"https://github.com/kstaken/dockerfile-examples",
|
"https://github.com/kstaken/dockerfile-examples",
|
||||||
"https://github.com/ondrejmo/Dockerfiles",
|
"https://github.com/ondrejmo/Dockerfiles",
|
||||||
"https://github.com/pandrew/dockerfiles",
|
|
||||||
"https://github.com/vimagick/dockerfiles",
|
"https://github.com/vimagick/dockerfiles",
|
||||||
"https://github.com/projectatomic/dockerfile_lint",
|
"https://github.com/projectatomic/dockerfile_lint",
|
||||||
"https://github.com/replicatedhq/dockerfilelint",
|
"https://github.com/replicatedhq/dockerfilelint",
|
||||||
@ -287,7 +288,7 @@
|
|||||||
"https://github.com/dimonomid/docker-quick-ref",
|
"https://github.com/dimonomid/docker-quick-ref",
|
||||||
"https://github.com/dokku/dokku",
|
"https://github.com/dokku/dokku",
|
||||||
"https://github.com/kiyoto/docker-fluentd",
|
"https://github.com/kiyoto/docker-fluentd",
|
||||||
"https://github.com/chef/inspec",
|
"https://github.com/inspec/inspec",
|
||||||
"https://github.com/jessfraz/dockerfiles",
|
"https://github.com/jessfraz/dockerfiles",
|
||||||
"https://github.com/jessfraz/dotfiles",
|
"https://github.com/jessfraz/dotfiles",
|
||||||
"https://github.com/jwilder/nginx-proxy",
|
"https://github.com/jwilder/nginx-proxy",
|
||||||
|
298
data/table.md
298
data/table.md
@ -1,298 +0,0 @@
|
|||||||
|
|
||||||
| Name | Description | Homepage | Star | Updated | Language | License | Author |
|
|
||||||
| ----------- | ----------- | -------- | ---- | ------- | -------- | :---: | ------:|
|
|
||||||
|[awesome](https://github.com/sindresorhus/awesome)|:sunglasses: Curated list of awesome lists|-|85773|today|||[sindresorhus](https://github.com/sindresorhus)|
|
|
||||||
|[moby](https://github.com/moby/moby)|Moby Project - a collaborative project for the container ecosystem to assemble container-based systems|https://mobyproject.org/|49051|today|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[moby](https://github.com/moby)|
|
|
||||||
|[kubernetes](https://github.com/kubernetes/kubernetes)|Production-Grade Container Scheduling and Management|http://kubernetes.io|36893|today|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[kubernetes](https://github.com/kubernetes)|
|
|
||||||
|[awesome-selfhosted](https://github.com/Kickball/awesome-selfhosted)|This is a list of Free Software network services and web applications which can be hosted locally. Selfhosting is the process of locally hosting and managing applications instead of renting from SaaS providers.|https://reddit.com/r/selfhosted|23602|today|JavaScript|[Other](null)|[Kickball](https://github.com/Kickball)|
|
|
||||||
|[etcd](https://github.com/coreos/etcd)|Distributed reliable key-value store for the most critical data of a distributed system|https://coreos.com/etcd/docs/latest|18523|today|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[coreos](https://github.com/coreos)|
|
|
||||||
|[dokku](https://github.com/dokku/dokku)|A docker-powered PaaS that helps you build and manage the lifecycle of applications|http://dokku.viewdocs.io/dokku/|15637|today|Shell|[MIT License](https://api.github.com/licenses/mit)|[dokku](https://github.com/dokku)|
|
|
||||||
|[traefik](https://github.com/containous/traefik)|Træfik, a modern reverse proxy|https://traefik.io|15443|today|Go|[MIT License](https://api.github.com/licenses/mit)|[containous](https://github.com/containous)|
|
|
||||||
|[drone](https://github.com/drone/drone)|Drone is a Continuous Delivery platform built on Docker, written in Go|https://drone.io|14391|today|Go|[Other](null)|[drone](https://github.com/drone)|
|
|
||||||
|[docker-cheat-sheet](https://github.com/wsargent/docker-cheat-sheet)|Docker Cheat Sheet|-|13419|today|||[wsargent](https://github.com/wsargent)|
|
|
||||||
|[compose](https://github.com/docker/compose)|Define and run multi-container applications with Docker|https://docs.docker.com/compose/|12849|today|Python|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[docker](https://github.com/docker)|
|
|
||||||
|[awesome-docker](https://github.com/veggiemonk/awesome-docker)|:whale: A curated list of Docker resources and projects|https://awesome-docker.netlify.com/|11336|today||[Other](null)|[veggiemonk](https://github.com/veggiemonk)|
|
|
||||||
|[faas](https://github.com/openfaas/faas)|OpenFaaS - Serverless Functions Made Simple for Docker & Kubernetes|https://blog.alexellis.io/introducing-functions-as-a-service/|10237|today|Go|[MIT License](https://api.github.com/licenses/mit)|[openfaas](https://github.com/openfaas)|
|
|
||||||
|[glances](https://github.com/nicolargo/glances)|Glances an Eye on your system. A top/htop alternative.|http://nicolargo.github.io/glances/|9967|today|Python|[GNU Lesser General Public License v3.0](https://api.github.com/licenses/lgpl-3.0)|[nicolargo](https://github.com/nicolargo)|
|
|
||||||
|[rancher](https://github.com/rancher/rancher)|Complete container management platform|http://rancher.com|8607|today|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[rancher](https://github.com/rancher)|
|
|
||||||
|[istio](https://github.com/istio/istio)|An open platform to connect, manage, and secure microservices.|https://istio.io|8288|today|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[istio](https://github.com/istio)|
|
|
||||||
|[nginx-proxy](https://github.com/jwilder/nginx-proxy)|Automated nginx proxy for Docker containers using docker-gen|-|8151|today|Python|[MIT License](https://api.github.com/licenses/mit)|[jwilder](https://github.com/jwilder)|
|
|
||||||
|[portainer](https://github.com/portainer/portainer)|Simple management UI for Docker|http://portainer.io|8049|today|HTML|[zlib License](https://api.github.com/licenses/zlib)|[portainer](https://github.com/portainer)|
|
|
||||||
|[cadvisor](https://github.com/google/cadvisor)|Analyzes resource usage and performance characteristics of running containers.|-|7430|today|Go|[Other](null)|[google](https://github.com/google)|
|
|
||||||
|[boot2docker](https://github.com/boot2docker/boot2docker)|Lightweight Linux for Docker|-|7420|today|Shell|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[boot2docker](https://github.com/boot2docker)|
|
|
||||||
|[ToolsOfTheTrade](https://github.com/cjbarber/ToolsOfTheTrade)|Tools of The Trade, from Hacker News.|-|7191|2 days ago|||[cjbarber](https://github.com/cjbarber)|
|
|
||||||
|[ctop](https://github.com/bcicen/ctop)|Top-like interface for container metrics|https://ctop.sh|7004|today|Go|[MIT License](https://api.github.com/licenses/mit)|[bcicen](https://github.com/bcicen)|
|
|
||||||
|[awesome-sysadmin](https://github.com/n1trux/awesome-sysadmin)|A curated list of amazingly awesome open source sysadmin resources.|-|6696|today||[Other](null)|[n1trux](https://github.com/n1trux)|
|
|
||||||
|[flynn](https://github.com/flynn/flynn)|A next generation open source platform as a service (PaaS)|https://flynn.io|6694|today|Go|[BSD 3-Clause "New" or "Revised" License](https://api.github.com/licenses/bsd-3-clause)|[flynn](https://github.com/flynn)|
|
|
||||||
|[dockerfiles](https://github.com/jessfraz/dockerfiles)|Various Dockerfiles I use on the desktop and on servers.|https://blog.jessfraz.com/post/docker-containers-on-the-desktop/|6229|1 day ago|Shell|[MIT License](https://api.github.com/licenses/mit)|[jessfraz](https://github.com/jessfraz)|
|
|
||||||
|[dockerfiles](https://github.com/jessfraz/dockerfiles)|Various Dockerfiles I use on the desktop and on servers.|https://blog.jessfraz.com/post/docker-containers-on-the-desktop/|6229|1 day ago|Shell|[MIT License](https://api.github.com/licenses/mit)|[jessfraz](https://github.com/jessfraz)|
|
|
||||||
|[nvidia-docker](https://github.com/NVIDIA/nvidia-docker)|Build and run Docker containers leveraging NVIDIA GPUs|-|5806|today|Makefile|[Other](null)|[NVIDIA](https://github.com/NVIDIA)|
|
|
||||||
|[swarm](https://github.com/docker/swarm)|Swarm: a Docker-native clustering system|-|5124|today|Go|[Other](null)|[docker](https://github.com/docker)|
|
|
||||||
|[weave](https://github.com/weaveworks/weave)|Simple, resilient multi-host Docker networking and more.|https://www.weave.works|5101|today|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[weaveworks](https://github.com/weaveworks)|
|
|
||||||
|[bocker](https://github.com/p8952/bocker)|Docker implemented in around 100 lines of bash|https://www.p8952.info/|4981|today|Shell|[GNU General Public License v3.0](https://api.github.com/licenses/gpl-3.0)|[p8952](https://github.com/p8952)|
|
|
||||||
|[dockercraft](https://github.com/docker/dockercraft)|Docker + Minecraft = Dockercraft|-|4861|today|Lua|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[docker](https://github.com/docker)|
|
|
||||||
|[fabio](https://github.com/fabiolb/fabio)|Consul Load-Balancing made simple|https://fabiolb.net|4773|today|Go|[MIT License](https://api.github.com/licenses/mit)|[fabiolb](https://github.com/fabiolb)|
|
|
||||||
|[machine](https://github.com/docker/machine)|Machine management for a container-centric world|https://docs.docker.com/machine/|4672|today|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[docker](https://github.com/docker)|
|
|
||||||
|[docker-alpine](https://github.com/gliderlabs/docker-alpine)|Alpine Linux Docker image. Win at minimalism!|http://gliderlabs.viewdocs.io/docker-alpine|4466|today|Shell|[BSD 2-Clause "Simplified" License](https://api.github.com/licenses/bsd-2-clause)|[gliderlabs](https://github.com/gliderlabs)|
|
|
||||||
|[docker-gc](https://github.com/spotify/docker-gc)|Docker garbage collection of containers and images|-|4222|today|Shell|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[spotify](https://github.com/spotify)|
|
|
||||||
|[distribution](https://github.com/docker/distribution)|The Docker toolset to pack, ship, store, and deliver content|-|3932|1 day ago|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[docker](https://github.com/docker)|
|
|
||||||
|[mesos](https://github.com/apache/mesos)|Mirror of Apache Mesos|-|3717|today|C++|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[apache](https://github.com/apache)|
|
|
||||||
|[docker-bench-security](https://github.com/docker/docker-bench-security)|The Docker Bench for Security is a script that checks for dozens of common best-practices around deploying Docker containers in production.|-|3711|today|Shell|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[docker](https://github.com/docker)|
|
|
||||||
|[marathon](https://github.com/mesosphere/marathon)|Deploy and manage containers (including Docker) on top of Apache Mesos at scale.|https://mesosphere.github.io/marathon/|3667|today|Scala|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[mesosphere](https://github.com/mesosphere)|
|
|
||||||
|[clair](https://github.com/coreos/clair)|Vulnerability Static Analysis for Containers|-|3647|today|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[coreos](https://github.com/coreos)|
|
|
||||||
|[registrator](https://github.com/gliderlabs/registrator)|Service registry bridge for Docker with pluggable adapters|http://gliderlabs.com/registrator|3630|today|Go|[MIT License](https://api.github.com/licenses/mit)|[gliderlabs](https://github.com/gliderlabs)|
|
|
||||||
|[nomad](https://github.com/hashicorp/nomad)|Nomad is a flexible, enterprise-grade cluster scheduler designed to easily integrate into existing workflows. Nomad can run a diverse workload of micro-service, batch, containerized and non-containerized applications. Nomad is easy to operate and scale and integrates seamlessly with Consul and Vault.|https://www.nomadproject.io/|3554|today|Go|[Mozilla Public License 2.0](https://api.github.com/licenses/mpl-2.0)|[hashicorp](https://github.com/hashicorp)|
|
|
||||||
|[captainduckduck](https://github.com/githubsaturn/captainduckduck)|Automated Scalable Ready Webserver Package (automated Docker+nginx) - Heroku on Steroids|https://CaptainDuckDuck.com|3253|today|JavaScript|[MIT License](https://api.github.com/licenses/mit)|[githubsaturn](https://github.com/githubsaturn)|
|
|
||||||
|[logspout](https://github.com/gliderlabs/logspout)|Log routing for Docker container logs|-|3233|today|Go|[MIT License](https://api.github.com/licenses/mit)|[gliderlabs](https://github.com/gliderlabs)|
|
|
||||||
|[incubator-openwhisk](https://github.com/apache/incubator-openwhisk)|Apache OpenWhisk is a serverless event-based programming service and an Apache Incubator project.|http://openwhisk.org|3199|today|Scala|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[apache](https://github.com/apache)|
|
|
||||||
|[flannel](https://github.com/coreos/flannel)|flannel is a network fabric for containers, designed for Kubernetes|-|3100|today|Go|[Other](null)|[coreos](https://github.com/coreos)|
|
|
||||||
|[mantl](https://github.com/mantl/mantl)|Mantl is a modern platform for rapidly deploying globally distributed services|http://mantl.io|3028|today|Python|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[mantl](https://github.com/mantl)|
|
|
||||||
|[docker-letsencrypt-nginx-proxy-companion](https://github.com/JrCs/docker-letsencrypt-nginx-proxy-companion)|LetsEncrypt companion container for nginx-proxy|-|2941|today|Shell|[MIT License](https://api.github.com/licenses/mit)|[JrCs](https://github.com/JrCs)|
|
|
||||||
|[docker-gen](https://github.com/jwilder/docker-gen)|Generate files from docker container meta-data|-|2833|today|Go|[MIT License](https://api.github.com/licenses/mit)|[jwilder](https://github.com/jwilder)|
|
|
||||||
|[tsuru](https://github.com/tsuru/tsuru)|Open source, extensible and Docker-based Platform as a Service (PaaS).|https://tsuru.io|2779|today|Go|[BSD 3-Clause "New" or "Revised" License](https://api.github.com/licenses/bsd-3-clause)|[tsuru](https://github.com/tsuru)|
|
|
||||||
|[official-images](https://github.com/docker-library/official-images)|Primary source of truth for the Docker "Official Images" program|https://hub.docker.com/explore/|2766|today|Shell|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[docker-library](https://github.com/docker-library)|
|
|
||||||
|[docker-jumpstart](https://github.com/odewahn/docker-jumpstart)|A quick introduction to Docker|http://odewahn.github.io/docker-jumpstart|2748|8 days ago|CSS|[Other](null)|[odewahn](https://github.com/odewahn)|
|
|
||||||
|[OctoLinker](https://github.com/OctoLinker/OctoLinker)|OctoLinker – Available on Chrome, Firefox and Opera|https://octolinker.github.io|2727|today|JavaScript|[MIT License](https://api.github.com/licenses/mit)|[OctoLinker](https://github.com/OctoLinker)|
|
|
||||||
|[awesome-kubernetes](https://github.com/ramitsurana/awesome-kubernetes)|A curated list for awesome kubernetes sources :ship::tada:|https://ramitsurana.github.io/awesome-kubernetes|2696|today|Makefile|[Other](null)|[ramitsurana](https://github.com/ramitsurana)|
|
|
||||||
|[landscape](https://github.com/cncf/landscape)|Static Cloud Native Landscapes and Interactive Landscape that filters and sorts hundreds of cloud native projects and products, and shows details including GitHub stars, funding or market cap, first and last commits, contributor counts, headquarters location, and recent tweets.|https://landscape.cncf.io|2660|today|JavaScript|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[cncf](https://github.com/cncf)|
|
|
||||||
|[DockerCheatSheet](https://github.com/eon01/DockerCheatSheet)|🐋 Docker Cheat Sheet 🐋|http://PainlessDocker.com|2445|today|||[eon01](https://github.com/eon01)|
|
|
||||||
|[empire](https://github.com/remind101/empire)|A PaaS built on top of Amazon EC2 Container Service (ECS)|-|2409|today|Go|[BSD 2-Clause "Simplified" License](https://api.github.com/licenses/bsd-2-clause)|[remind101](https://github.com/remind101)|
|
|
||||||
|[dlite](https://github.com/nlf/dlite)|The simplest way to use Docker on OS X|-|2403|2 days ago|Go|[MIT License](https://api.github.com/licenses/mit)|[nlf](https://github.com/nlf)|
|
|
||||||
|[goss](https://github.com/aelsabbahy/goss)|Quick and Easy server testing/validation|https://goss.rocks|2288|today|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[aelsabbahy](https://github.com/aelsabbahy)|
|
|
||||||
|[docker-lambda](https://github.com/lambci/docker-lambda)|Docker images and test runners that replicate the live AWS Lambda environment|-|2243|1 day ago|JavaScript|[MIT License](https://api.github.com/licenses/mit)|[lambci](https://github.com/lambci)|
|
|
||||||
|[docker-swarm-visualizer](https://github.com/dockersamples/docker-swarm-visualizer)|A visualizer for Docker Swarm Mode using the Docker Remote API, Node.JS, and D3|-|2209|today|JavaScript|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[dockersamples](https://github.com/dockersamples)|
|
|
||||||
|[functions](https://github.com/iron-io/functions)|IronFunctions - the serverless microservices platform by|https://iron.io|2195|today|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[iron-io](https://github.com/iron-io)|
|
|
||||||
|[gosu](https://github.com/tianon/gosu)|Simple Go-based setuid+setgid+setgroups+exec|-|2190|today|Go|[GNU General Public License v3.0](https://api.github.com/licenses/gpl-3.0)|[tianon](https://github.com/tianon)|
|
|
||||||
|[now-cli](https://github.com/zeit/now-cli)|The command-line interface for Now|https://zeit.co/now|2092|today|JavaScript|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[zeit](https://github.com/zeit)|
|
|
||||||
|[watchtower](https://github.com/v2tec/watchtower)|Automatically update running Docker containers|-|2048|today|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[v2tec](https://github.com/v2tec)|
|
|
||||||
|[nsenter](https://github.com/jpetazzo/nsenter)|-|-|1960|today|Shell|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[jpetazzo](https://github.com/jpetazzo)|
|
|
||||||
|[helios](https://github.com/spotify/helios)|Docker container orchestration platform|-|1924|3 days ago|Java|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[spotify](https://github.com/spotify)|
|
|
||||||
|[dockerize](https://github.com/jwilder/dockerize)|Utility to simplify running applications in docker containers|-|1869|today|Go||[jwilder](https://github.com/jwilder)|
|
|
||||||
|[Portus](https://github.com/SUSE/Portus)|Authorization service and frontend for Docker registry (v2)|http://port.us.org/|1855|today|Ruby|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[SUSE](https://github.com/SUSE)|
|
|
||||||
|[gitkube](https://github.com/hasura/gitkube)|Gitkube: Build and deploy docker images to Kubernetes using git push.|https://gitkube.sh|1824|today|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[hasura](https://github.com/hasura)|
|
|
||||||
|[dockerode](https://github.com/apocas/dockerode)|Docker + Node = Dockerode (Node.js module for Docker's Remote API)|-|1801|today|JavaScript|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[apocas](https://github.com/apocas)|
|
|
||||||
|[dinghy](https://github.com/codekitchen/dinghy)|faster, friendlier Docker on OS X|-|1782|2 days ago|Ruby|[MIT License](https://api.github.com/licenses/mit)|[codekitchen](https://github.com/codekitchen)|
|
|
||||||
|[docker-sync](https://github.com/EugenMayer/docker-sync)|Run your application at full speed while syncing your code for development, finally empowering you to utilize docker for development under OSX/Windows/*Linux|-|1782|today|Ruby|[GNU General Public License v3.0](https://api.github.com/licenses/gpl-3.0)|[EugenMayer](https://github.com/EugenMayer)|
|
|
||||||
|[seagull](https://github.com/tobegit3hub/seagull)|Friendly Web UI to manage and monitor docker|-|1736|today|JavaScript|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[tobegit3hub](https://github.com/tobegit3hub)|
|
|
||||||
|[centurion](https://github.com/newrelic/centurion)|A mass deployment tool for Docker fleets|-|1707|today|Ruby|[MIT License](https://api.github.com/licenses/mit)|[newrelic](https://github.com/newrelic)|
|
|
||||||
|[container-diff](https://github.com/GoogleContainerTools/container-diff)|container-diff: Diff your Docker containers|-|1705|today|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[GoogleContainerTools](https://github.com/GoogleContainerTools)|
|
|
||||||
|[dotfiles](https://github.com/jessfraz/dotfiles)|My dotfiles. Buyer beware ;)|-|1704|today|Shell|[MIT License](https://api.github.com/licenses/mit)|[jessfraz](https://github.com/jessfraz)|
|
|
||||||
|[rack](https://github.com/convox/rack)|Open-source PaaS. Built entirely on AWS cloud services for maximum privacy and minimum upkeep.|https://convox.com|1672|1 day ago|Go|[Other](null)|[convox](https://github.com/convox)|
|
|
||||||
|[kaniko](https://github.com/GoogleContainerTools/kaniko)|Build Container Images In Kubernetes|-|1547|today|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[GoogleContainerTools](https://github.com/GoogleContainerTools)|
|
|
||||||
|[img](https://github.com/genuinetools/img)|Standalone, daemon-less, unprivileged Dockerfile and OCI compatible container image builder.|https://blog.jessfraz.com/post/building-container-images-securely-on-kubernetes/|1503|today|Go|[MIT License](https://api.github.com/licenses/mit)|[genuinetools](https://github.com/genuinetools)|
|
|
||||||
|[panamax-ui](https://github.com/CenturyLinkLabs/panamax-ui)|The Web GUI for Panamax|http://panamax.io|1455|2 days ago|JavaScript|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[CenturyLinkLabs](https://github.com/CenturyLinkLabs)|
|
|
||||||
|[docker-slim](https://github.com/docker-slim/docker-slim)|DockerSlim (docker-slim): Don't change anything in your Docker container image and minify it by up to 30x making it secure too! (free and open source)|http://dockersl.im|1444|today|Go|[Other](null)|[docker-slim](https://github.com/docker-slim)|
|
|
||||||
|[docker-osx-dev](https://github.com/brikis98/docker-osx-dev)|A productive development environment with Docker on OS X|http://www.ybrikman.com/writing/2015/05/19/docker-osx-dev/|1440|2 days ago|Shell|[MIT License](https://api.github.com/licenses/mit)|[brikis98](https://github.com/brikis98)|
|
|
||||||
|[vagga](https://github.com/tailhook/vagga)|Vagga is a containerization tool without daemons|http://vagga.readthedocs.org|1404|1 day ago|Rust|[MIT License](https://api.github.com/licenses/mit)|[tailhook](https://github.com/tailhook)|
|
|
||||||
|[notary](https://github.com/theupdateframework/notary)|Notary is a project that allows anyone to have trust over arbitrary collections of data|-|1380|today|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[theupdateframework](https://github.com/theupdateframework)|
|
|
||||||
|[kontena](https://github.com/kontena/kontena)|The developer friendly container and micro services platform. Works on any cloud, easy to setup, simple to use.|https://www.kontena.io/platform|1352|today|Ruby|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[kontena](https://github.com/kontena)|
|
|
||||||
|[go-dockerclient](https://github.com/fsouza/go-dockerclient)|Go client for the Docker remote API.|https://godoc.org/github.com/fsouza/go-dockerclient|1289|1 day ago|Go|[Other](null)|[fsouza](https://github.com/fsouza)|
|
|
||||||
|[rocker](https://github.com/grammarly/rocker)|Rocker breaks the limits of Dockerfile.|-|1272|today|Go|[Other](null)|[grammarly](https://github.com/grammarly)|
|
|
||||||
|[nanobox](https://github.com/nanobox-io/nanobox)|The ideal platform for developers|https://nanobox.io|1230|1 day ago|Go|[Other](null)|[nanobox-io](https://github.com/nanobox-io)|
|
|
||||||
|[inspec](https://github.com/inspec/inspec)|InSpec: Auditing and Testing Framework|http://inspec.io|1224|today|Ruby|[Other](null)|[inspec](https://github.com/inspec)|
|
|
||||||
|[rexray](https://github.com/rexray/rexray)|REX-Ray is a container storage orchestration engine enabling persistence for cloud native workloads|http://rexray.io|1203|today|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[rexray](https://github.com/rexray)|
|
|
||||||
|[workflow](https://github.com/deis/workflow)|The open source PaaS for Kubernetes.|https://deis.com/workflow/|1135|5 days ago|CSS|[MIT License](https://api.github.com/licenses/mit)|[deis](https://github.com/deis)|
|
|
||||||
|[docker-consul](https://github.com/gliderlabs/docker-consul)|Dockerized Consul|-|1021|2 days ago|Shell|[MIT License](https://api.github.com/licenses/mit)|[gliderlabs](https://github.com/gliderlabs)|
|
|
||||||
|[dockly](https://github.com/lirantal/dockly)|Immersive terminal interface for managing docker containers and services|-|1003|today|JavaScript|[MIT License](https://api.github.com/licenses/mit)|[lirantal](https://github.com/lirantal)|
|
|
||||||
|[convoy](https://github.com/rancher/convoy)|A Docker volume plugin, managing persistent container volumes.|-|986|1 day ago|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[rancher](https://github.com/rancher)|
|
|
||||||
|[hadolint](https://github.com/hadolint/hadolint)|Dockerfile linter, validate inline bash, written in Haskell|-|964|today|Haskell|[GNU General Public License v3.0](https://api.github.com/licenses/gpl-3.0)|[hadolint](https://github.com/hadolint)|
|
|
||||||
|[docker-clean](https://github.com/ZZROTDesign/docker-clean)|A script that cleans docker containers, images, volumes, and networks. |-|957|6 days ago|Shell|[MIT License](https://api.github.com/licenses/mit)|[ZZROTDesign](https://github.com/ZZROTDesign)|
|
|
||||||
|[dry](https://github.com/moncho/dry)|dry - A Docker manager for the terminal @|http://moncho.github.io/dry/|950|today|Go|[MIT License](https://api.github.com/licenses/mit)|[moncho](https://github.com/moncho)|
|
|
||||||
|[pumba](https://github.com/alexei-led/pumba)|Chaos testing and network emulation tool for Docker.|https://goo.gl/SUKo6T|900|today|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[alexei-led](https://github.com/alexei-led)|
|
|
||||||
|[dockerfiles](https://github.com/vimagick/dockerfiles)|:whale: A collection of delicious docker recipes|https://hub.docker.com/u/vimagick/|895|today|JavaScript||[vimagick](https://github.com/vimagick)|
|
|
||||||
|[docker-maven-plugin](https://github.com/fabric8io/docker-maven-plugin)|Maven plugin for running and creating Docker images|https://dmp.fabric8.io|862|today|Java|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[fabric8io](https://github.com/fabric8io)|
|
|
||||||
|[azk](https://github.com/azukiapp/azk)|azk is a lightweight open source development environment orchestration tool. Instantly & safely run any environment on your local machine.|http://azk.io|854|1 day ago|JavaScript|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[azukiapp](https://github.com/azukiapp)|
|
|
||||||
|[habitus](https://github.com/cloud66/habitus)|A Build Flow Tool for Docker|http://www.habitus.io|823|today|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[cloud66](https://github.com/cloud66)|
|
|
||||||
|[falco](https://github.com/draios/falco)|Sysdig Falco: Behavioral Activity Monitoring With Container Support|-|803|1 day ago|C++|[Other](null)|[draios](https://github.com/draios)|
|
|
||||||
|[docker-registry-ui](https://github.com/squidnyan/docker-registry-ui)|A web frontend/UI for easy private/local Docker Registry integration|-|773|2 days ago|Groovy|[GNU General Public License v3.0](https://api.github.com/licenses/gpl-3.0)|[squidnyan](https://github.com/squidnyan)|
|
|
||||||
|[lando](https://github.com/lando/lando)|You look absolutely beautiful!|https://docs.devwithlando.io|766|today|JavaScript|[GNU General Public License v3.0](https://api.github.com/licenses/gpl-3.0)|[lando](https://github.com/lando)|
|
|
||||||
|[docker-mon](https://github.com/icecrime/docker-mon)|Console-based Docker monitoring|-|748|10 days ago|JavaScript|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[icecrime](https://github.com/icecrime)|
|
|
||||||
|[dockerfile-maven](https://github.com/spotify/dockerfile-maven)|A set of Maven tools for dealing with Dockerfiles|-|746|today|Java|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[spotify](https://github.com/spotify)|
|
|
||||||
|[docker-machine-nfs](https://github.com/adlogix/docker-machine-nfs)|Activates NFS on docker-machine|-|725|9 days ago|Shell|[MIT License](https://api.github.com/licenses/mit)|[adlogix](https://github.com/adlogix)|
|
|
||||||
|[zabbix-docker-monitoring](https://github.com/monitoringartist/zabbix-docker-monitoring)|:whale: Docker/Kubernetes/Mesos/Marathon/Chronos/LXC/LXD/Swarm container monitoring - Docker image, Zabbix template and C module|https://hub.docker.com/r/monitoringartist/zabbix-agent-xxl-limited/|715|1 day ago|C|[GNU General Public License v2.0](https://api.github.com/licenses/gpl-2.0)|[monitoringartist](https://github.com/monitoringartist)|
|
|
||||||
|[crane](https://github.com/Dataman-Cloud/crane)|Yet another control plane based on docker built-in swarmkit|https://www.shurenyun.com/product-crane.html|715|2 days ago|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[Dataman-Cloud](https://github.com/Dataman-Cloud)|
|
|
||||||
|[calicoctl](https://github.com/projectcalico/calicoctl)|Calico CLI tool|http://www.projectcalico.org|705|today|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[projectcalico](https://github.com/projectcalico)|
|
|
||||||
|[container-structure-test](https://github.com/GoogleContainerTools/container-structure-test)|validate the structure of your container images|-|703|today|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[GoogleContainerTools](https://github.com/GoogleContainerTools)|
|
|
||||||
|[sen](https://github.com/TomasTomecek/sen)|Terminal User Interface for docker engine|-|693|2 days ago|Python|[MIT License](https://api.github.com/licenses/mit)|[TomasTomecek](https://github.com/TomasTomecek)|
|
|
||||||
|[subuser](https://github.com/subuser-security/subuser)|Run programs on linux with selectively restricted permissions.|http://subuser.org|691|6 days ago|Python|[GNU Lesser General Public License v3.0](https://api.github.com/licenses/lgpl-3.0)|[subuser-security](https://github.com/subuser-security)|
|
|
||||||
|[awesome-ciandcd](https://github.com/ciandcd/awesome-ciandcd)|continuous integration and continuous delivery|http://www.ciandcd.com|682|today||[GNU General Public License v2.0](https://api.github.com/licenses/gpl-2.0)|[ciandcd](https://github.com/ciandcd)|
|
|
||||||
|[dockerfile-examples](https://github.com/kstaken/dockerfile-examples)|Some example dockerfiles for use with Docker|-|663|1 day ago|Shell||[kstaken](https://github.com/kstaken)|
|
|
||||||
|[docker-volume-netshare](https://github.com/ContainX/docker-volume-netshare)|Docker NFS, AWS EFS, Ceph & Samba/CIFS Volume Plugin|http://netshare.containx.io|660|2 days ago|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[ContainX](https://github.com/ContainX)|
|
|
||||||
|[manageiq](https://github.com/ManageIQ/manageiq)|ManageIQ Open-Source Management Platform|manageiq.org|658|today|Ruby|[Other](null)|[ManageIQ](https://github.com/ManageIQ)|
|
|
||||||
|[captain](https://github.com/harbur/captain)|Captain - Convert your Git workflow to Docker :whale: containers|-|639|3 days ago|Go|[MIT License](https://api.github.com/licenses/mit)|[harbur](https://github.com/harbur)|
|
|
||||||
|[maestro](https://github.com/toscanini/maestro)|Container orchestration for Docker environments|-|615|today|Python|[MIT License](https://api.github.com/licenses/mit)|[toscanini](https://github.com/toscanini)|
|
|
||||||
|[docket](https://github.com/netvarun/docket)|Docket - Custom docker registry that allows for lightning fast deploys through bittorrent|-|615|8 days ago|Go|[MIT License](https://api.github.com/licenses/mit)|[netvarun](https://github.com/netvarun)|
|
|
||||||
|[docker-flow-proxy](https://github.com/vfarcic/docker-flow-proxy)|Docker Flow Proxy|http://proxy.dockerflow.com/|612|4 days ago|||[vfarcic](https://github.com/vfarcic)|
|
|
||||||
|[armhf](https://github.com/umiddelb/armhf)|interesting stuff about arm devices (Utilite, SolidRun, Odroid)|-|600|4 days ago|Shell||[umiddelb](https://github.com/umiddelb)|
|
|
||||||
|[binci](https://github.com/binci/binci)|:whale: Containerize your development workflow.|-|581|2 days ago|JavaScript|[MIT License](https://api.github.com/licenses/mit)|[binci](https://github.com/binci)|
|
|
||||||
|[wharfee](https://github.com/j-bennet/wharfee)|A CLI with autocompletion and syntax highlighting for Docker commands.|-|567|2 days ago|Python|[BSD 3-Clause "New" or "Revised" License](https://api.github.com/licenses/bsd-3-clause)|[j-bennet](https://github.com/j-bennet)|
|
|
||||||
|[sbt-docker](https://github.com/marcuslonnberg/sbt-docker)|Create Docker images directly from sbt|-|562|4 days ago|Scala|[MIT License](https://api.github.com/licenses/mit)|[marcuslonnberg](https://github.com/marcuslonnberg)|
|
|
||||||
|[bane](https://github.com/genuinetools/bane)|Custom & better AppArmor profile generator for Docker containers.|-|561|today|Go|[MIT License](https://api.github.com/licenses/mit)|[genuinetools](https://github.com/genuinetools)|
|
|
||||||
|[awesome-linux-containers](https://github.com/Friz-zy/awesome-linux-containers)|A curated list of awesome Linux Containers frameworks, libraries and software|-|542|today||[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[Friz-zy](https://github.com/Friz-zy)|
|
|
||||||
|[grafeas](https://github.com/grafeas/grafeas)|Cloud artifact metadata CRUD API and resource specifications|-|540|3 days ago|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[grafeas](https://github.com/grafeas)|
|
|
||||||
|[cyclone](https://github.com/caicloud/cyclone)|A cloud native CI/CD platform built for container workflow|-|539|1 day ago|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[caicloud](https://github.com/caicloud)|
|
|
||||||
|[Docker.DotNet](https://github.com/Microsoft/Docker.DotNet)|:whale: .NET (C#) Client Library for Docker API|https://www.nuget.org/packages/Docker.DotNet/|538|4 days ago|C#|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[Microsoft](https://github.com/Microsoft)|
|
|
||||||
|[libcompose](https://github.com/docker/libcompose)|An experimental go library providing Compose-like functionality|https://godoc.org/github.com/docker/libcompose|515|today|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[docker](https://github.com/docker)|
|
|
||||||
|[docker-cleanup](https://github.com/meltwater/docker-cleanup)|Automatic Docker image, container and volume cleanup|-|507|4 days ago|Shell|[MIT License](https://api.github.com/licenses/mit)|[meltwater](https://github.com/meltwater)|
|
|
||||||
|[awesome_bot](https://github.com/dkhamsing/awesome_bot)|:white_check_mark: Validate links in awesome projects|-|486|6 days ago|Ruby|[MIT License](https://api.github.com/licenses/mit)|[dkhamsing](https://github.com/dkhamsing)|
|
|
||||||
|[Docker-Secure-Deployment-Guidelines](https://github.com/GDSSecurity/Docker-Secure-Deployment-Guidelines)|Deployment checklist for securely deploying Docker|-|485|9 days ago|||[GDSSecurity](https://github.com/GDSSecurity)|
|
|
||||||
|[dvm](https://github.com/howtowhale/dvm)|Docker Version Manager|https://howtowhale.github.io/dvm/|459|11 days ago|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[howtowhale](https://github.com/howtowhale)|
|
|
||||||
|[swarmpit](https://github.com/swarmpit/swarmpit)|Lightweight Docker Swarm management UI|http://swarmpit.io|456|1 day ago|Clojure|[Eclipse Public License 1.0](https://api.github.com/licenses/epl-1.0)|[swarmpit](https://github.com/swarmpit)|
|
|
||||||
|[reg](https://github.com/genuinetools/reg)|Docker registry v2 command line client.|-|444|2 days ago|Go|[MIT License](https://api.github.com/licenses/mit)|[genuinetools](https://github.com/genuinetools)|
|
|
||||||
|[clocker](https://github.com/brooklyncentral/clocker)|Apache Brooklyn cloud native infrastructure blueprints|-|427|5 days ago|Shell|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[brooklyncentral](https://github.com/brooklyncentral)|
|
|
||||||
|[longshoreman](https://github.com/longshoreman/longshoreman)|Automated deployment with Docker.|-|426|12 days ago|JavaScript||[longshoreman](https://github.com/longshoreman)|
|
|
||||||
|[rocker-compose](https://github.com/grammarly/rocker-compose)|Docker composition tool with idempotency features for deploying apps composed of multiple containers.|-|420|9 days ago|Go|[Other](null)|[grammarly](https://github.com/grammarly)|
|
|
||||||
|[image-spec](https://github.com/opencontainers/image-spec)|OCI Image Format|https://www.opencontainers.org/|420|4 days ago|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[opencontainers](https://github.com/opencontainers)|
|
|
||||||
|[dockstation](https://github.com/DockStation/dockstation)|DockStation is developer-centric application to managing projects based on Docker. Instead of lots of CLI commands you can monitor, configure, and manage services and containers using just a GUI.|https://dockstation.io/|414|1 day ago||[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[DockStation](https://github.com/DockStation)|
|
|
||||||
|[su-exec](https://github.com/ncopa/su-exec)|switch user and group id and exec|-|412|today|C|[MIT License](https://api.github.com/licenses/mit)|[ncopa](https://github.com/ncopa)|
|
|
||||||
|[supercronic](https://github.com/aptible/supercronic)|Cron for containers|-|405|3 days ago|Go|[MIT License](https://api.github.com/licenses/mit)|[aptible](https://github.com/aptible)|
|
|
||||||
|[dockerfile-examples](https://github.com/komljen/dockerfile-examples)|Dockerfile examples|-|402|13 days ago|Shell|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[komljen](https://github.com/komljen)|
|
|
||||||
|[atlantis](https://github.com/ooyala/atlantis)|Open Source PaaS Built on Docker|-|375|8 days ago|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[ooyala](https://github.com/ooyala)|
|
|
||||||
|[ctop](https://github.com/yadutaf/ctop)|A command line / text based Linux Containers monitoring tool that works just like you expect.|https://pypi.python.org/pypi/ctop|373|2 days ago|Python|[MIT License](https://api.github.com/licenses/mit)|[yadutaf](https://github.com/yadutaf)|
|
|
||||||
|[dagda](https://github.com/eliasgranderubio/dagda)|a tool to perform static analysis of known vulnerabilities, trojans, viruses, malware & other malicious threats in docker images/containers and to monitor the docker daemon and running docker containers for detecting anomalous activities|-|364|4 days ago|Python|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[eliasgranderubio](https://github.com/eliasgranderubio)|
|
|
||||||
|[docker-monitoring](https://github.com/vegasbrianc/docker-monitoring)|Docker-Monitoring based on Cadvisor, InfluxDB, and Grafana|-|364|7 days ago|||[vegasbrianc](https://github.com/vegasbrianc)|
|
|
||||||
|[docker-plugin](https://github.com/jenkinsci/docker-plugin)|Jenkins Cloud Plugin for Docker|https://wiki.jenkins-ci.org/display/JENKINS/Docker+Plugin|363|4 days ago|Java|[MIT License](https://api.github.com/licenses/mit)|[jenkinsci](https://github.com/jenkinsci)|
|
|
||||||
|[local-persist](https://github.com/CWSpear/local-persist)|Create named local volumes that persist in the location(s) you want|-|361|3 days ago|Go|[MIT License](https://api.github.com/licenses/mit)|[CWSpear](https://github.com/CWSpear)|
|
|
||||||
|[mu](https://github.com/stelligent/mu)|A full-stack DevOps on AWS framework|https://getmu.io|358|today|Go|[MIT License](https://api.github.com/licenses/mit)|[stelligent](https://github.com/stelligent)|
|
|
||||||
|[dray](https://github.com/CenturyLinkLabs/dray)|An engine for managing the execution of container-based workflows.|http://Dray.it|342|19 days ago|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[CenturyLinkLabs](https://github.com/CenturyLinkLabs)|
|
|
||||||
|[netshoot](https://github.com/nicolaka/netshoot)|a Docker + Kubernetes network trouble-shooting swiss-army container|-|338|today|Shell||[nicolaka](https://github.com/nicolaka)|
|
|
||||||
|[amicontained](https://github.com/genuinetools/amicontained)|Container introspection tool. Find out what container runtime is being used as well as features available.|-|328|2 days ago|Go|[MIT License](https://api.github.com/licenses/mit)|[genuinetools](https://github.com/genuinetools)|
|
|
||||||
|[atsd-use-cases](https://github.com/axibase/atsd-use-cases)|Axibase Time Series Database: Usage Examples and Research Articles|-|328|today|Shell|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[axibase](https://github.com/axibase)|
|
|
||||||
|[openscap](https://github.com/OpenSCAP/openscap)|NIST Certified SCAP 1.2 toolkit|https://www.open-scap.org/tools/openscap-base|317|today|XSLT|[GNU Lesser General Public License v2.1](https://api.github.com/licenses/lgpl-2.1)|[OpenSCAP](https://github.com/OpenSCAP)|
|
|
||||||
|[udocker](https://github.com/indigo-dc/udocker)|A basic user tool to execute simple docker containers in batch or interactive systems without root privileges|-|308|today|Python|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[indigo-dc](https://github.com/indigo-dc)|
|
|
||||||
|[docker-registry-web](https://github.com/mkuchin/docker-registry-web)|Web UI for private docker registry v2|https://hub.docker.com/r/hyper/docker-registry-web/|307|1 day ago|Groovy|[GNU General Public License v2.0](https://api.github.com/licenses/gpl-2.0)|[mkuchin](https://github.com/mkuchin)|
|
|
||||||
|[docker-it-scala](https://github.com/whisklabs/docker-it-scala)|Docker integration testing kit with Scala|-|299|5 days ago|Scala|[MIT License](https://api.github.com/licenses/mit)|[whisklabs](https://github.com/whisklabs)|
|
|
||||||
|[Dockerfiles](https://github.com/crosbymichael/Dockerfiles)|Collection of Dockerfiles |-|297|46 days ago|Python||[crosbymichael](https://github.com/crosbymichael)|
|
|
||||||
|[dexec](https://github.com/docker-exec/dexec)|:whale: Command line interface for running code in many languages via Docker.|https://docker-exec.github.io/|292|2 days ago|Go|[MIT License](https://api.github.com/licenses/mit)|[docker-exec](https://github.com/docker-exec)|
|
|
||||||
|[dockeron](https://github.com/dockeron/dockeron)|Electron + Vue.js for Docker|-|288|6 days ago|Vue|[MIT License](https://api.github.com/licenses/mit)|[dockeron](https://github.com/dockeron)|
|
|
||||||
|[anchore](https://github.com/anchore/anchore)|Legacy Anchore container analysis, inspection and control toolset. See https://github.com/anchore/anchore-engine for newer version that operates as a service with REST API instead of a cli tool.|-|288|4 days ago|Python|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[anchore](https://github.com/anchore)|
|
|
||||||
|[docker_monitoring_logging_alerting](https://github.com/uschtwill/docker_monitoring_logging_alerting)|Docker host and container monitoring, logging and alerting out of the box using cAdvisor, Prometheus, Grafana for monitoring, Elasticsearch, Kibana and Logstash for logging and elastalert and Alertmanager for alerting. |-|285|3 days ago|Roff|[MIT License](https://api.github.com/licenses/mit)|[uschtwill](https://github.com/uschtwill)|
|
|
||||||
|[dockerfilelint](https://github.com/replicatedhq/dockerfilelint)|An opinionated Dockerfile linter.|https://www.fromlatest.io|279|3 days ago|JavaScript||[replicatedhq](https://github.com/replicatedhq)|
|
|
||||||
|[gantryd](https://github.com/DevTable/gantryd)|Framework for easy management of docker-based components across machines|-|274|24 days ago|Python|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[DevTable](https://github.com/DevTable)|
|
|
||||||
|[dockramp](https://github.com/jlhawn/dockramp)|A Client Driven Docker Image Builder|-|264|5 days ago|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[jlhawn](https://github.com/jlhawn)|
|
|
||||||
|[scar](https://github.com/grycap/scar)|Serverless Container-aware ARchitectures (e.g. Docker in AWS Lambda)|https://grycap.github.io/scar|263|4 days ago|Python|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[grycap](https://github.com/grycap)|
|
|
||||||
|[docker.el](https://github.com/Silex/docker.el)|Manage docker from Emacs.|-|256|4 days ago|Emacs Lisp||[Silex](https://github.com/Silex)|
|
|
||||||
|[Docker-PowerShell](https://github.com/Microsoft/Docker-PowerShell)|PowerShell Module for Docker|-|256|9 days ago|C#|[MIT License](https://api.github.com/licenses/mit)|[Microsoft](https://github.com/Microsoft)|
|
|
||||||
|[dockerfile-mode](https://github.com/spotify/dockerfile-mode)|An emacs mode for handling Dockerfiles|-|254|1 day ago|Emacs Lisp|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[spotify](https://github.com/spotify)|
|
|
||||||
|[docker-ls](https://github.com/mayflower/docker-ls)|Tools for browsing and manipulating docker registries.|-|238|3 days ago|Go|[MIT License](https://api.github.com/licenses/mit)|[mayflower](https://github.com/mayflower)|
|
|
||||||
|[containership](https://github.com/containership/containership)|A simple container management platform|https://containership.io|220|21 days ago|JavaScript|[GNU General Public License v3.0](https://api.github.com/licenses/gpl-3.0)|[containership](https://github.com/containership)|
|
|
||||||
|[box](https://github.com/box-builder/box)|A Next-Generation Builder for Docker Images|https://box-builder.github.io/box/|220|2 days ago|Go|[Other](null)|[box-builder](https://github.com/box-builder)|
|
|
||||||
|[dockerfile_lint](https://github.com/projectatomic/dockerfile_lint)|-|-|218|today|JavaScript|[MIT License](https://api.github.com/licenses/mit)|[projectatomic](https://github.com/projectatomic)|
|
|
||||||
|[dockfmt](https://github.com/jessfraz/dockfmt)|Dockerfile format and parser. Like `gofmt` but for Dockerfiles.|-|209|today|Go|[MIT License](https://api.github.com/licenses/mit)|[jessfraz](https://github.com/jessfraz)|
|
|
||||||
|[derrick](https://github.com/alibaba/derrick)|🐳A tool to help you dockerizing application in seconds|https://alibaba.github.io/derrick/|206|today|Python|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[alibaba](https://github.com/alibaba)|
|
|
||||||
|[devstep](https://github.com/fgrehm/devstep)|Development environments powered by Docker and buildpacks|http://fgrehm.viewdocs.io/devstep|200|99 days ago|Shell|[MIT License](https://api.github.com/licenses/mit)|[fgrehm](https://github.com/fgrehm)|
|
|
||||||
|[dockly](https://github.com/swipely/dockly)|DSL and Gem for building ready-to-launch Docker images|-|199|5 days ago|Ruby|[MIT License](https://api.github.com/licenses/mit)|[swipely](https://github.com/swipely)|
|
|
||||||
|[logagent-js](https://github.com/sematext/logagent-js)|Extensible log shipper with input/output plugins, buffering, parsing, data masking, and small memory/CPU footprint|http://sematext.com/logsene|196|today|JavaScript|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[sematext](https://github.com/sematext)|
|
|
||||||
|[docker-grand-ambassador](https://github.com/cpuguy83/docker-grand-ambassador)|-|-|193|76 days ago|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[cpuguy83](https://github.com/cpuguy83)|
|
|
||||||
|[dockerana](https://github.com/dockerana/dockerana)|Docker Monitoring with support for Grafana and Graphite|http://dockerana.com|192|5 days ago|Perl||[dockerana](https://github.com/dockerana)|
|
|
||||||
|[docker-proxy](https://github.com/silarsis/docker-proxy)|Transparent proxy for docker containers, run in a docker container|-|189|24 days ago|Shell|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[silarsis](https://github.com/silarsis)|
|
|
||||||
|[cloud-slang](https://github.com/CloudSlang/cloud-slang)|CloudSlang Language, CLI and Builder|http://cloudslang.io|180|6 days ago|Java|[Other](null)|[CloudSlang](https://github.com/CloudSlang)|
|
|
||||||
|[zodiac](https://github.com/CenturyLinkLabs/zodiac)|A lightweight tool for easy deployment and rollback of dockerized applications.|-|177|3 days ago|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[CenturyLinkLabs](https://github.com/CenturyLinkLabs)|
|
|
||||||
|[docker-images](https://github.com/arun-gupta/docker-images)|Docker Images|-|175|3 days ago|Shell||[arun-gupta](https://github.com/arun-gupta)|
|
|
||||||
|[lstags](https://github.com/ivanilves/lstags)|Manipulate Docker images across different registries|-|173|7 days ago|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[ivanilves](https://github.com/ivanilves)|
|
|
||||||
|[skinnywhale](https://github.com/djosephsen/skinnywhale)|Skinnywhale helps you make smaller (as in megabytes) Docker containers|-|173|27 days ago|Shell|[MIT License](https://api.github.com/licenses/mit)|[djosephsen](https://github.com/djosephsen)|
|
|
||||||
|[swarm-ingress-router](https://github.com/tpbowden/swarm-ingress-router)|Route DNS names to Swarm services based on labels|-|172|47 days ago|Go|[MIT License](https://api.github.com/licenses/mit)|[tpbowden](https://github.com/tpbowden)|
|
|
||||||
|[Beluga](https://github.com/cortexmedia/Beluga)|Beluga a CLI to deploy docker containers on a single server or low amount of servers.|-|167|25 days ago|Shell||[cortexmedia](https://github.com/cortexmedia)|
|
|
||||||
|[docker-unison](https://github.com/leighmcculloch/docker-unison)|A docker data container using Unison for fast folder sync. An alternative to slow boot2docker volumes on OS X.|-|164|2 days ago|Shell|[GNU General Public License v3.0](https://api.github.com/licenses/gpl-3.0)|[leighmcculloch](https://github.com/leighmcculloch)|
|
|
||||||
|[haven-platform](https://github.com/codeabovelab/haven-platform)|Haven is an open source Docker container management system. It integrates container, application, cluster, image, and registry management in one single place. |-|161|17 days ago|Java|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[codeabovelab](https://github.com/codeabovelab)|
|
|
||||||
|[Docker](https://github.com/konstruktoid/Docker)|Docker playground|-|159|5 days ago|Shell||[konstruktoid](https://github.com/konstruktoid)|
|
|
||||||
|[percheron](https://github.com/ashmckenzie/percheron)|Organise your Docker containers with muscle and intelligence|-|158|48 days ago|Ruby|[MIT License](https://api.github.com/licenses/mit)|[ashmckenzie](https://github.com/ashmckenzie)|
|
|
||||||
|[muguet](https://github.com/mattallty/muguet)|DNS Server & Reverse proxy for Docker - Compatible with docker-compose, boot2docker and docker-machine|-|154|71 days ago|JavaScript|[MIT License](https://api.github.com/licenses/mit)|[mattallty](https://github.com/mattallty)|
|
|
||||||
|[dockerspec](https://github.com/zuazo/dockerspec)|A small Ruby Gem to run RSpec and Serverspec, Infrataster and Capybara tests against Dockerfiles or Docker images easily.|https://rubygems.org/gems/dockerspec|151|5 days ago|Ruby|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[zuazo](https://github.com/zuazo)|
|
|
||||||
|[fugu](https://github.com/mattes/fugu)|Swiss Army knife for Docker|-|140|92 days ago|Go|[MIT License](https://api.github.com/licenses/mit)|[mattes](https://github.com/mattes)|
|
|
||||||
|[chaperone](https://github.com/garywiz/chaperone)|Lightweight process-tree manager for Docker-like containers|-|137|8 days ago|Python|[Other](null)|[garywiz](https://github.com/garywiz)|
|
|
||||||
|[runlike](https://github.com/lavie/runlike)|Given an existing docker container, prints the command line necessary to run a copy of it.|-|136|today|Python|[Other](null)|[lavie](https://github.com/lavie)|
|
|
||||||
|[sematext-agent-docker](https://github.com/sematext/sematext-agent-docker)|Sematext Docker Agent - host + container metrics, logs & event collector|https://sematext.com/docker|135|today|JavaScript|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[sematext](https://github.com/sematext)|
|
|
||||||
|[swirl](https://github.com/cuigh/swirl)|A web UI for Docker, focused on swarm cluster.|-|135|2 days ago|Go|[MIT License](https://api.github.com/licenses/mit)|[cuigh](https://github.com/cuigh)|
|
|
||||||
|[docker-replay](https://github.com/bcicen/docker-replay)|Generate docker run commands from running containers|-|130|6 days ago|Python|[MIT License](https://api.github.com/licenses/mit)|[bcicen](https://github.com/bcicen)|
|
|
||||||
|[portainer](https://github.com/duedil-ltd/portainer)|Apache Mesos framework for building Docker images on a cluster of machines|-|127|81 days ago|Python|[MIT License](https://api.github.com/licenses/mit)|[duedil-ltd](https://github.com/duedil-ltd)|
|
|
||||||
|[composerize](https://github.com/magicmark/composerize)|🏃→🎼 docker run asdlksjfksdf > docker-composerize up|http://composerize.com|126|today|JavaScript||[magicmark](https://github.com/magicmark)|
|
|
||||||
|[sbt-docker-compose](https://github.com/Tapad/sbt-docker-compose)|Integrates Docker Compose functionality into sbt|-|125|14 days ago|Scala|[BSD 3-Clause "New" or "Revised" License](https://api.github.com/licenses/bsd-3-clause)|[Tapad](https://github.com/Tapad)|
|
|
||||||
|[docker-continuous-deployment](https://github.com/francescou/docker-continuous-deployment)|continuous deployment of a microservices application with Docker|-|122|10 days ago|HTML|[MIT License](https://api.github.com/licenses/mit)|[francescou](https://github.com/francescou)|
|
|
||||||
|[logjam](https://github.com/gocardless/logjam)|a log shipping tool|-|121|2 days ago|Go|[MIT License](https://api.github.com/licenses/mit)|[gocardless](https://github.com/gocardless)|
|
|
||||||
|[docker-quick-ref](https://github.com/dimonomid/docker-quick-ref)|Docker: Printable Quick Reference|-|119|7 days ago|Makefile||[dimonomid](https://github.com/dimonomid)|
|
|
||||||
|[ahab](https://github.com/instacart/ahab)|Docker event handling with Python|-|117|2 days ago|Python|[ISC License](https://api.github.com/licenses/isc)|[instacart](https://github.com/instacart)|
|
|
||||||
|[sherdock](https://github.com/rancher/sherdock)|Docker Image Manager|-|111|151 days ago|JavaScript||[rancher](https://github.com/rancher)|
|
|
||||||
|[cis-docker-benchmark](https://github.com/dev-sec/cis-docker-benchmark)|CIS Docker Benchmark - InSpec Profile|dev-sec.io|109|2 days ago|Ruby|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[dev-sec](https://github.com/dev-sec)|
|
|
||||||
|[dockit](https://github.com/humblec/dockit)|Do docker actions and Deploy gluster containers!|-|103|6 days ago|Python|[GNU General Public License v2.0](https://api.github.com/licenses/gpl-2.0)|[humblec](https://github.com/humblec)|
|
|
||||||
|[europa](https://github.com/puppetlabs/europa)|Puppet Container Registry|https://puppet.com/products/puppet-container-registry|100|33 days ago|Java|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[puppetlabs](https://github.com/puppetlabs)|
|
|
||||||
|[conduit](https://github.com/ehazlett/conduit)|Deployment system for Docker|-|98|6 days ago|Go||[ehazlett](https://github.com/ehazlett)|
|
|
||||||
|[gocd-docker](https://github.com/gocd/gocd-docker)|Deprecated. See: https://github.com/gocd/docker-gocd-server|https://hub.docker.com/r/gocd/gocd-server/|98|89 days ago||[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[gocd](https://github.com/gocd)|
|
|
||||||
|[whales](https://github.com/Gueils/whales)|:whale: Tool to automatically dockerize your application. |http://www.whales.mx|96|16 days ago|Ruby|[MIT License](https://api.github.com/licenses/mit)|[Gueils](https://github.com/Gueils)|
|
|
||||||
|[vagrant-docker-example](https://github.com/bubenkoff/vagrant-docker-example)|Example of basic vagrant docker provider usage |-|94|5 days ago||[MIT License](https://api.github.com/licenses/mit)|[bubenkoff](https://github.com/bubenkoff)|
|
|
||||||
|[docker-flow-swarm-listener](https://github.com/vfarcic/docker-flow-swarm-listener)|Docker Flow Swarm Listener|http://swarmlistener.dockerflow.com/|91|4 days ago|||[vfarcic](https://github.com/vfarcic)|
|
|
||||||
|[dockersql](https://github.com/crosbymichael/dockersql)|Query your docker via SQL|-|85|6 days ago|Go|[MIT License](https://api.github.com/licenses/mit)|[crosbymichael](https://github.com/crosbymichael)|
|
|
||||||
|[lifeboat](https://github.com/jplhomer/lifeboat)|Docker Compose UI: Lifeboat is an easy way to launch projects with a graphical interface|https://uselifeboat.com/|81|today|JavaScript||[jplhomer](https://github.com/jplhomer)|
|
|
||||||
|[forward2docker](https://github.com/bsideup/forward2docker)|Utility to auto forward a port from localhost into ports on Docker containers running in a boot2docker or Docker Machine VM|-|77|16 days ago|Go||[bsideup](https://github.com/bsideup)|
|
|
||||||
|[crowdr](https://github.com/polonskiy/crowdr)|Crowdr is a tool for managing multiple Docker containers|-|75|220 days ago|Shell|[MIT License](https://api.github.com/licenses/mit)|[polonskiy](https://github.com/polonskiy)|
|
|
||||||
|[amp](https://github.com/appcelerator/amp)|** THIS PROJECT IS STOPPED ** An open source CaaS for Docker, batteries included.|http://appcelerator.io|74|25 days ago|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[appcelerator](https://github.com/appcelerator)|
|
|
||||||
|[rapid](https://github.com/ozlerhakan/rapid)|:whale: A lightweight Docker Developer Interface for Docker Remote API|-|72|2 days ago|Java|[MIT License](https://api.github.com/licenses/mit)|[ozlerhakan](https://github.com/ozlerhakan)|
|
|
||||||
|[gradle-docker-plugin](https://github.com/gesellix/gradle-docker-plugin)|Gradle Docker plugin|-|71|44 days ago|Groovy|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[gesellix](https://github.com/gesellix)|
|
|
||||||
|[blockbridge-docker-volume](https://github.com/blockbridge/blockbridge-docker-volume)|Blockbridge volume plugin for Docker|-|71|8 days ago|Ruby|[BSD 3-Clause "New" or "Revised" License](https://api.github.com/licenses/bsd-3-clause)|[blockbridge](https://github.com/blockbridge)|
|
|
||||||
|[dlayer](https://github.com/wercker/dlayer)|Stats collector for Docker layers|-|70|2 days ago|Go||[wercker](https://github.com/wercker)|
|
|
||||||
|[bocker](https://github.com/icy/bocker)|Write Dockerfile completely in Bash. Extensible and simple.|https://github.com/icy/bocker|68|2 days ago|Shell||[icy](https://github.com/icy)|
|
|
||||||
|[athena](https://github.com/athena-oss/athena)|An automation platform with a plugin architecture that allows you to easily create and share services.|https://athena-oss.github.io/athena/|67|6 days ago|Shell|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[athena-oss](https://github.com/athena-oss)|
|
|
||||||
|[docker-make](https://github.com/CtripCloud/docker-make)|build,tag,and push a bunch of related docker images via a single command|-|66|13 days ago|Python|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[CtripCloud](https://github.com/CtripCloud)|
|
|
||||||
|[learn-docker](https://github.com/dwyl/learn-docker)|:ship: Learn how to use docker.io containers to consistently deploy your apps on any infrastructure.|-|66|22 days ago|Nginx||[dwyl](https://github.com/dwyl)|
|
|
||||||
|[docker-alertd](https://github.com/deltaskelta/docker-alertd)|Monitor docker stats and send alerts|-|66|34 days ago|Go|[MIT License](https://api.github.com/licenses/mit)|[deltaskelta](https://github.com/deltaskelta)|
|
|
||||||
|[docker-fluentd](https://github.com/kiyoto/docker-fluentd)|Docker container to collect other docker container logs with Fluentd|-|65|39 days ago|||[kiyoto](https://github.com/kiyoto)|
|
|
||||||
|[docker-for-all](https://github.com/machzqcq/docker-for-all)|Docker applied in development, devops, testing, product management etc.|-|63|34 days ago|Ruby|[MIT License](https://api.github.com/licenses/mit)|[machzqcq](https://github.com/machzqcq)|
|
|
||||||
|[docker-client](https://github.com/gesellix/docker-client)|A Docker client for Java written in Kotlin and Groovy|https://www.gesellix.net|55|18 days ago|Groovy|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[gesellix](https://github.com/gesellix)|
|
|
||||||
|[container-factory](https://github.com/mutable/container-factory)|container-factory produces Docker images from tarballs of application source code|http://www.containerfactory.io|54|82 days ago|Go|[ISC License](https://api.github.com/licenses/isc)|[mutable](https://github.com/mutable)|
|
|
||||||
|[DoMonit](https://github.com/eon01/DoMonit)|A Deadly Simple Docker Monitoring Wrapper For Docker API|https://medium.com/@eon01/monitoring-docker-with-python-domonit-34440b8c6830|53|13 days ago|Python|[MIT License](https://api.github.com/licenses/mit)|[eon01](https://github.com/eon01)|
|
|
||||||
|[is-docker](https://github.com/sindresorhus/is-docker)|Check if the process is running inside a Docker container|-|52|18 days ago|JavaScript|[MIT License](https://api.github.com/licenses/mit)|[sindresorhus](https://github.com/sindresorhus)|
|
|
||||||
|[proxy](https://github.com/factorish/proxy)|lightweight nginx based load balancer self using service discovery provided by registrator.|-|49|27 days ago|HTML|[Other](null)|[factorish](https://github.com/factorish)|
|
|
||||||
|[stacker-cli](https://github.com/stacker/stacker-cli)|Docker Compose Templates|-|48|52 days ago|JavaScript|[MIT License](https://api.github.com/licenses/mit)|[stacker](https://github.com/stacker)|
|
|
||||||
|[captain](https://github.com/jenssegers/captain)|⚓️ Easily start and stop docker compose projects|-|48|2 days ago|Go||[jenssegers](https://github.com/jenssegers)|
|
|
||||||
|[docker-registry-browser](https://github.com/klausmeyer/docker-registry-browser)|🐳 Web Interface for the Docker Registry HTTP API V2 written in Ruby on Rails.|https://hub.docker.com/r/klausmeyer/docker-registry-browser/|47|2 days ago|Ruby|[MIT License](https://api.github.com/licenses/mit)|[klausmeyer](https://github.com/klausmeyer)|
|
|
||||||
|[draw-compose](https://github.com/Alexis-benoist/draw-compose)|Render Docker compose files.|-|47|2 days ago|Python|[MIT License](https://api.github.com/licenses/mit)|[Alexis-benoist](https://github.com/Alexis-benoist)|
|
|
||||||
|[deploy](https://github.com/ttiny/deploy)|Git and Docker deployment tool.|-|45|26 days ago|JavaScript||[ttiny](https://github.com/ttiny)|
|
|
||||||
|[chaperone-docker](https://github.com/garywiz/chaperone-docker)|Docker base images which use the chaperone lightweight process manager.|-|45|2 days ago|JavaScript|[Other](null)|[garywiz](https://github.com/garywiz)|
|
|
||||||
|[autodock](https://github.com/prologic/autodock)|autodock is a Daemon for Docker Automation that helps to build automated Docker based infrastructure by integrating with Docker events|https://github.com/prologic/autodock|44|8 days ago|Go|[Other](null)|[prologic](https://github.com/prologic)|
|
|
||||||
|[platform](https://github.com/dockunit/platform)|Dockunit platform website.|https://dockunit.io|43|35 days ago|JavaScript||[dockunit](https://github.com/dockunit)|
|
|
||||||
|[swarmci](https://github.com/ghostsquad/swarmci)|Swarm CI - Docker Swarm-based CI system or enhancement to existing systems.|-|42|3 days ago|Python|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[ghostsquad](https://github.com/ghostsquad)|
|
|
||||||
|[docker-compose](https://github.com/awesome-startup/docker-compose)|Docker Compose Sample|-|42|108 days ago|JavaScript||[awesome-startup](https://github.com/awesome-startup)|
|
|
||||||
|[h2o-proxy](https://github.com/zchee/h2o-proxy)|Automated H2O reverse proxy for Docker containers. An alternative jwilder/nginx-proxy.|https://registry.hub.docker.com/u/zchee/h2o-proxy/|37|78 days ago||[MIT License](https://api.github.com/licenses/mit)|[zchee](https://github.com/zchee)|
|
|
||||||
|[elsy](https://github.com/cisco/elsy)|An opinionated, multi-language, build tool based on Docker and Docker Compose|-|37|4 days ago|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[cisco](https://github.com/cisco)|
|
|
||||||
|[docker-flow-monitor](https://github.com/docker-flow/docker-flow-monitor)|-|-|36|1 day ago|Go|[MIT License](https://api.github.com/licenses/mit)|[docker-flow](https://github.com/docker-flow)|
|
|
||||||
|[docker-zabbix](https://github.com/gomex/docker-zabbix)|Add and monitor running docker containers in Zabbix Server|-|34|11 days ago|Python|[GNU General Public License v3.0](https://api.github.com/licenses/gpl-3.0)|[gomex](https://github.com/gomex)|
|
|
||||||
|[docker-vm](https://github.com/shyiko/docker-vm)|A simple and transparent alternative to boot2docker (backed by Vagrant)|-|33|299 days ago|Shell||[shyiko](https://github.com/shyiko)|
|
|
||||||
|[dockerfiles](https://github.com/pandrew/dockerfiles)|-|-|33|37 days ago|Ruby||[pandrew](https://github.com/pandrew)|
|
|
||||||
|[proco](https://github.com/shiwaforce/proco)|Proco will help you to organise and manage Docker, Docker-Compose, Kubernetes projects of any complexity using simple YAML config files to shorten the route from finding your project to initialising it in your local environment.|https://pocok.io|33|2 days ago|Python|[MIT License](https://api.github.com/licenses/mit)|[shiwaforce](https://github.com/shiwaforce)|
|
|
||||||
|[docker-compose-graphviz](https://github.com/abesto/docker-compose-graphviz)|Turn a docker-compose.yml files into Graphviz .dot files|-|31|5 days ago|Go||[abesto](https://github.com/abesto)|
|
|
||||||
|[whale-linter](https://github.com/jeromepin/whale-linter)|A simple non professional Dockerfile linter|-|30|1 day ago|Python|[MIT License](https://api.github.com/licenses/mit)|[jeromepin](https://github.com/jeromepin)|
|
|
||||||
|[minio](https://github.com/jelastic-jps/minio)|Minio Cluster - S3 Compatible Object Storage|-|30|5 days ago|JavaScript||[jelastic-jps](https://github.com/jelastic-jps)|
|
|
||||||
|[tsaotun](https://github.com/qazbnm456/tsaotun)|Tsaotun - Python based Assistance for Docker|-|30|2 days ago|Python|[Other](null)|[qazbnm456](https://github.com/qazbnm456)|
|
|
||||||
|[powerline-docker](https://github.com/adrianmo/powerline-docker)|A Powerline segment for showing the status of your Docker containers|-|30|52 days ago|Python|[MIT License](https://api.github.com/licenses/mit)|[adrianmo](https://github.com/adrianmo)|
|
|
||||||
|[compose_plantuml](https://github.com/funkwerk/compose_plantuml)|Generate Plantuml graphs from docker-compose files|-|29|68 days ago|Python|[MIT License](https://api.github.com/licenses/mit)|[funkwerk](https://github.com/funkwerk)|
|
|
||||||
|[docker-garby](https://github.com/konstruktoid/docker-garby)|Just another Docker maintenance script, managing garbage collection of Docker containers and images.|-|28|150 days ago|Shell|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[konstruktoid](https://github.com/konstruktoid)|
|
|
||||||
|[scuba](https://github.com/JonathonReinhart/scuba)|Simple Container-Utilizing Build Apparatus|-|27|69 days ago|Python|[MIT License](https://api.github.com/licenses/mit)|[JonathonReinhart](https://github.com/JonathonReinhart)|
|
|
||||||
|[plash](https://github.com/ihucos/plash)|A container build and runtime system|http://plash.io/|22|today|Python|[MIT License](https://api.github.com/licenses/mit)|[ihucos](https://github.com/ihucos)|
|
|
||||||
|[Dockerfiles](https://github.com/ondrejmo/Dockerfiles)|These are Dockerfiles I've created for programs without official docker image.|-|22|today|Shell||[ondrejmo](https://github.com/ondrejmo)|
|
|
||||||
|[docker-companion](https://github.com/mudler/docker-companion)|squash and unpack Docker images, in Golang|-|22|2 days ago|Go|[GNU General Public License v3.0](https://api.github.com/licenses/gpl-3.0)|[mudler](https://github.com/mudler)|
|
|
||||||
|[TrivialRC](https://github.com/vorakl/TrivialRC)|A minimalistic RC system and process manager for containers and applications|http://trivialrc.vorakl.name/|22|196 days ago|Shell|[MIT License](https://api.github.com/licenses/mit)|[vorakl](https://github.com/vorakl)|
|
|
||||||
|[skipper](https://github.com/Stratoscale/skipper)|Easily dockerize your Git repository|-|21|21 days ago|Python|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[Stratoscale](https://github.com/Stratoscale)|
|
|
||||||
|[construi](https://github.com/lstephen/construi)|Use Docker to define your build environment.|-|19|103 days ago|Python|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[lstephen](https://github.com/lstephen)|
|
|
||||||
|[clusterdock](https://github.com/clusterdock/clusterdock)|clusterdock is a framework for creating Docker-based container clusters|http://clusterdock.rtfd.io|18|6 days ago|Python|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[clusterdock](https://github.com/clusterdock)|
|
|
||||||
|[Docker-Arch](https://github.com/Ph3nol/Docker-Arch)|Generate Web/CLI projects Dockerized development environments, from 1 simple YAML file.|https://ph3nol.github.io/Docker-Arch/|18|4 days ago|PHP|[MIT License](https://api.github.com/licenses/mit)|[Ph3nol](https://github.com/Ph3nol)|
|
|
||||||
|[blimp](https://github.com/tubesandlube/blimp)|Mechanism to easily move a container from one Docker host to another|http://tubesandlube.github.io/blimp|17|227 days ago|Perl||[tubesandlube](https://github.com/tubesandlube)|
|
|
||||||
|[funker-example-voting-app](https://github.com/bfirsh/funker-example-voting-app)|An example app using Funker|-|16|5 days ago|JavaScript|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[bfirsh](https://github.com/bfirsh)|
|
|
||||||
|[capitan](https://github.com/byrnedo/capitan)|Capitan is a tool for managing multiple Docker containers|-|16|349 days ago|Go|[MIT License](https://api.github.com/licenses/mit)|[byrnedo](https://github.com/byrnedo)|
|
|
||||||
|[docker-do](https://github.com/benzaita/docker-do)|hassle-free `docker run`|-|15|386 days ago|Shell||[benzaita](https://github.com/benzaita)|
|
|
||||||
|[cleanreg](https://github.com/hcguersoy/cleanreg)|A small tool to clean up Docker Registries (v2).|-|15|15 days ago|Shell|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[hcguersoy](https://github.com/hcguersoy)|
|
|
||||||
|[swarm-router](https://github.com/flavioaiello/swarm-router)|A «zero config» service name based router for docker swarm mode with a fresh and more secure approach|https://hub.docker.com/r/flavioaiello/swarm-router/|15|23 days ago|Go|[MIT License](https://api.github.com/licenses/mit)|[flavioaiello](https://github.com/flavioaiello)|
|
|
||||||
|[dockerding-on-rails](https://github.com/Electrofenster/dockerding-on-rails)|Simple Web-Interface for Docker with a lot of features|-|13|234 days ago|Ruby|[MIT License](https://api.github.com/licenses/mit)|[Electrofenster](https://github.com/Electrofenster)|
|
|
||||||
|[turbo](https://github.com/ramitsurana/turbo)|Simple and Powerfull Utility for Docker|http://ramitsurana.github.io/turbo|12|136 days ago|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[ramitsurana](https://github.com/ramitsurana)|
|
|
||||||
|[rescoyl](https://github.com/noteed/rescoyl)|Private Docker registry|-|10|116 days ago|Haskell|[Other](null)|[noteed](https://github.com/noteed)|
|
|
||||||
|[docker-missing-tools](https://github.com/nandoquintana/docker-missing-tools)|Docker missing tools|-|10|27 days ago|Shell||[nandoquintana](https://github.com/nandoquintana)|
|
|
||||||
|[caduc](https://github.com/tjamet/caduc)|Event based Continuous Docker Cleaner|-|9|3 days ago|Python|[GNU General Public License v3.0](https://api.github.com/licenses/gpl-3.0)|[tjamet](https://github.com/tjamet)|
|
|
||||||
|[copy-docker-image](https://github.com/mdlavin/copy-docker-image)|Copy a Docker image between registries without a full Docker installation|-|9|102 days ago|Go||[mdlavin](https://github.com/mdlavin)|
|
|
||||||
|[supdock](https://github.com/segersniels/supdock)|What's Up, Dock(er)?|-|8|12 days ago|JavaScript||[segersniels](https://github.com/segersniels)|
|
|
||||||
|[depcon](https://github.com/gondor/depcon)|Docker blue-green/deployment/management supporting Mesos/Marathon and Compose. THIS IS A FORK - SEE ORIGINAL REPO|http://depcon.containx.io|7|243 days ago|Go|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[gondor](https://github.com/gondor)|
|
|
||||||
|[alpine-cvecheck](https://github.com/tomwillfixit/alpine-cvecheck)|Code used to CVE check Alpine based images|-|6|124 days ago|Shell||[tomwillfixit](https://github.com/tomwillfixit)|
|
|
||||||
|[multidocker](https://github.com/marty90/multidocker)|Creates a system where users are forced to login in dedicated independent docker containers.|-|6|6 days ago|Shell|[Apache License 2.0](https://api.github.com/licenses/apache-2.0)|[marty90](https://github.com/marty90)|
|
|
||||||
|[EnvCLI](https://github.com/PhilippHeuer/EnvCLI)|Replace your local installation of Node, Go, ... with project-specific docker containers. If you have a new machine you just have to install docker and envcli to get started.|-|5|2 days ago|Go|[MIT License](https://api.github.com/licenses/mit)|[PhilippHeuer](https://github.com/PhilippHeuer)|
|
|
||||||
|[dcw](https://github.com/pbertera/dcw)|Docker Compose Wrapper (a poor man's PAAS management tool)|-|5|237 days ago|Shell||[pbertera](https://github.com/pbertera)|
|
|
||||||
|[cargos-buildroot](https://github.com/RedCoolBeans/cargos-buildroot)|-|https://cargos.io/|4|5 days ago|Makefile|[GNU General Public License v2.0](https://api.github.com/licenses/gpl-2.0)|[RedCoolBeans](https://github.com/RedCoolBeans)|
|
|
||||||
|[DockerSurfer](https://github.com/Simone-Erba/DockerSurfer)|A tool for browse and analyze Docker Registries|http://dockersurfer.com/|2|64 days ago|JavaScript||[Simone-Erba](https://github.com/Simone-Erba)|
|
|
||||||
|[dext-docker-registry-plugin](https://github.com/vutran/dext-docker-registry-plugin)|:whale: Dext plugin to search the Docker Registry for Docker images.|-|1|563 days ago|JavaScript|[MIT License](https://api.github.com/licenses/mit)|[vutran](https://github.com/vutran)|
|
|
@ -1,5 +1,7 @@
|
|||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
const { promisify } = require('util');
|
||||||
const fetch = require('node-fetch');
|
const fetch = require('node-fetch');
|
||||||
|
const dayjs = require('dayjs');
|
||||||
|
|
||||||
require('draftlog').into(console);
|
require('draftlog').into(console);
|
||||||
|
|
||||||
@ -10,9 +12,17 @@ process.on('unhandledRejection', error => {
|
|||||||
if (!process.env.TOKEN) {
|
if (!process.env.TOKEN) {
|
||||||
throw new Error('no github token found');
|
throw new Error('no github token found');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --- ENV VAR ---
|
||||||
const BATCH_SIZE = parseInt(process.env.BATCH_SIZE, 10) || 10;
|
const BATCH_SIZE = parseInt(process.env.BATCH_SIZE, 10) || 10;
|
||||||
const DELAY = parseInt(process.env.DELAY, 10) || 3000;
|
const DELAY = parseInt(process.env.DELAY, 10) || 3000;
|
||||||
const readme = 'README.md';
|
// --- FILENAME ---
|
||||||
|
const README = 'README.md';
|
||||||
|
const GITHUB_METADATA_FILE = `data/${dayjs().format(
|
||||||
|
'YYYY-MM-DDTHH.mm.ss',
|
||||||
|
)}-fetched_repo_data.json`;
|
||||||
|
const GITHUB_REPOS = 'data/list_repos.json';
|
||||||
|
// --- HTTP ---
|
||||||
const API = 'https://api.github.com/';
|
const API = 'https://api.github.com/';
|
||||||
const options = {
|
const options = {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
@ -23,6 +33,7 @@ const options = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// --- UTILS ---
|
||||||
function get(path, opt) {
|
function get(path, opt) {
|
||||||
return fetch(`${API}repos/${path}`, {
|
return fetch(`${API}repos/${path}`, {
|
||||||
...options,
|
...options,
|
||||||
@ -35,56 +46,65 @@ function get(path, opt) {
|
|||||||
})
|
})
|
||||||
.catch(err => console.error(err));
|
.catch(err => console.error(err));
|
||||||
}
|
}
|
||||||
|
const delay = ms =>
|
||||||
function delay(ms) {
|
new Promise(resolve => {
|
||||||
return new Promise(resolve => {
|
|
||||||
setTimeout(() => resolve(), ms);
|
setTimeout(() => resolve(), ms);
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
function extractAllRepos(markdown) {
|
const extractAllRepos = markdown => {
|
||||||
const re = /https:\/\/github\.com\/([a-zA-Z0-9-._]+)\/([a-zA-Z0-9-._]+)/g;
|
const re = /https:\/\/github\.com\/([a-zA-Z0-9-._]+)\/([a-zA-Z0-9-._]+)/g;
|
||||||
const md = markdown.match(re);
|
const md = markdown.match(re);
|
||||||
return [...new Set(md)];
|
return [...new Set(md)];
|
||||||
}
|
};
|
||||||
|
|
||||||
const barLine = console.draft('Starting batch...');
|
const barLine = console.draft('Starting batch...');
|
||||||
|
|
||||||
function ProgressBar(i, batchSize, total) {
|
const ProgressBar = (i, batchSize, total) => {
|
||||||
const progress = Math.round(i / total * 100);
|
const progress = Math.round((i / total) * 100);
|
||||||
const units = Math.round(progress / 2);
|
const units = Math.round(progress / 2);
|
||||||
return barLine(
|
return barLine(
|
||||||
`[${'='.repeat(units)}${' '.repeat(50 - units)}] ${progress}% - # ${i}`,
|
`[${'='.repeat(units)}${' '.repeat(50 - units)}] ${progress}% - # ${i}`,
|
||||||
);
|
);
|
||||||
}
|
};
|
||||||
|
|
||||||
|
const removeHost = x => x.slice('https://github.com/'.length, x.length);
|
||||||
|
|
||||||
|
const readFile = promisify(fs.readFile);
|
||||||
|
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
const markdown = fs.readFileSync(readme, 'utf-8');
|
try {
|
||||||
const githubRepos = extractAllRepos(markdown);
|
const markdown = await readFile(README, { encoding: 'utf8' });
|
||||||
const repos = githubRepos.map(x =>
|
const githubRepos = extractAllRepos(markdown);
|
||||||
x.slice('https://github.com/'.length, x.length),
|
fs.writeFile(
|
||||||
);
|
GITHUB_REPOS,
|
||||||
fs.writeFileSync(
|
JSON.stringify(githubRepos, null, 2),
|
||||||
'data/list_repos.json',
|
err => err && console.error('FILE ERROR', err),
|
||||||
JSON.stringify(githubRepos, null, 2),
|
);
|
||||||
);
|
|
||||||
let data = [];
|
|
||||||
|
|
||||||
/* eslint-disable no-await-in-loop */
|
const repos = githubRepos.map(removeHost);
|
||||||
for (let i = 0; i < repos.length; i += BATCH_SIZE) {
|
|
||||||
const batch = repos.slice(i, i + BATCH_SIZE);
|
const metadata = [];
|
||||||
const res = await Promise.all(batch.map(async path => get(path)));
|
/* eslint-disable no-await-in-loop */
|
||||||
data = data.concat(res);
|
for (let i = 0; i < repos.length; i += BATCH_SIZE) {
|
||||||
if (process.env.DEBUG) console.log({ batch });
|
const batch = repos.slice(i, i + BATCH_SIZE);
|
||||||
ProgressBar(i, BATCH_SIZE, repos.length);
|
if (process.env.DEBUG) console.log({ batch });
|
||||||
await delay(DELAY);
|
const res = await Promise.all(batch.map(async path => get(path)));
|
||||||
|
metadata.push(...res);
|
||||||
|
ProgressBar(i, BATCH_SIZE, repos.length);
|
||||||
|
await delay(DELAY);
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.writeFile(
|
||||||
|
GITHUB_METADATA_FILE,
|
||||||
|
JSON.stringify(metadata, null, 2),
|
||||||
|
err => err && console.error(err),
|
||||||
|
);
|
||||||
|
ProgressBar(repos.length, BATCH_SIZE, repos.length);
|
||||||
|
} catch (err) {
|
||||||
|
console.error('ERROR:', err);
|
||||||
}
|
}
|
||||||
ProgressBar(repos.length, BATCH_SIZE, repos.length);
|
|
||||||
if (process.env.DEBUG) console.log({ data });
|
|
||||||
fs.writeFileSync(
|
|
||||||
'data/fetched_repo_data.json',
|
|
||||||
JSON.stringify(data, null, 2),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
main();
|
main();
|
||||||
|
23
package.json
23
package.json
@ -1,36 +1,33 @@
|
|||||||
{
|
{
|
||||||
"name": "awesome-docker-website",
|
"name": "awesome-docker-website",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "> A curated list of Docker resources and projects Inspired by [@sindresorhus](https://github.com/sindresorhus)' [awesome][sindresorhus] and improved by these **[amazing contributors](https://github.com/veggiemonk/awesome-docker/graphs/contributors)**.",
|
"description": "A curated list of Docker resources and projects Inspired by @sindresorhus and improved by amazing contributors",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "rimraf ./dist/ && node build.js",
|
"build": "node buildTable.js && rimraf ./dist/ && node build.js"
|
||||||
"convert": "showdown makehtml -i README.md -o README.html --omitExtraWLInCodeBlocks --simplifiedAutoLink --excludeTrailingPunctuationFromURLs --literalMidWordUnderscores --strikethrough --tables --tablesHeaderId --ghCodeBlocks --tasklists --disableForced4SpacesIndentedSublists --simpleLineBreaks --requireSpaceBeforeHeadingText --ghCompatibleHeaderId --ghMentions --backslashEscapesHTMLTags --emoji --splitAdjacentBlockquotes",
|
|
||||||
"package": "parcel build index.html --public-url /awesome-docker",
|
|
||||||
"fetchdata": "node fetchRepos.js",
|
|
||||||
"table": "node convertRepos.js",
|
|
||||||
"update-repos": "node fetchRepos.js && node convertRepos.js"
|
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "git+https://github.com/veggiemonk/awesome-docker.git"
|
"url": "git+https://github.com/veggiemonk/awesome-docker.git"
|
||||||
},
|
},
|
||||||
"author": "Julien Bisconti <julien.bisconti at gmail dot com>",
|
"author": "Julien Bisconti <julien.bisconti at gmail dot com>",
|
||||||
"license": "MIT",
|
"license": "Apache-2.0",
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/veggiemonk/awesome-docker/issues"
|
"url": "https://github.com/veggiemonk/awesome-docker/issues"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/veggiemonk/awesome-docker#readme",
|
"homepage": "https://github.com/veggiemonk/awesome-docker#readme",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"camelcase": "^5.0.0",
|
|
||||||
"cheerio": "^1.0.0-rc.2",
|
"cheerio": "^1.0.0-rc.2",
|
||||||
"critical": "^1.3.2",
|
"critical": "^1.3.3",
|
||||||
"dayjs": "^1.6.4",
|
"dayjs": "^1.6.6",
|
||||||
"draftlog": "^1.0.12",
|
"draftlog": "^1.0.12",
|
||||||
|
"jsdom": "^11.11.0",
|
||||||
|
"list.js": "^1.5.0",
|
||||||
"node-fetch": "^2.1.2",
|
"node-fetch": "^2.1.2",
|
||||||
"parcel-bundler": "^1.8.1",
|
"parcel-bundler": "^1.8.1",
|
||||||
"rimraf": "^2.6.2",
|
"rimraf": "^2.6.2",
|
||||||
"showdown": "^1.8.6"
|
"showdown": "^1.8.6",
|
||||||
|
"sitemap": "^1.13.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"babel-eslint": "^8.2.3",
|
"babel-eslint": "^8.2.3",
|
||||||
@ -40,6 +37,6 @@
|
|||||||
"eslint-plugin-import": "^2.12.0",
|
"eslint-plugin-import": "^2.12.0",
|
||||||
"eslint-plugin-jsx-a11y": "^6.0.3",
|
"eslint-plugin-jsx-a11y": "^6.0.3",
|
||||||
"eslint-plugin-prettier": "^2.6.0",
|
"eslint-plugin-prettier": "^2.6.0",
|
||||||
"prettier": "^1.13.0"
|
"prettier": "^1.13.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,19 @@
|
|||||||
|
const List = require('list.js');
|
||||||
|
|
||||||
const main = () => {
|
const main = () => {
|
||||||
console.log('hi!');
|
const userList = new List('md', {
|
||||||
|
valueNames: [
|
||||||
|
'name',
|
||||||
|
'description',
|
||||||
|
'homepage',
|
||||||
|
'star',
|
||||||
|
{ name: 'updated', attr: 'data-timestamp' },
|
||||||
|
'language',
|
||||||
|
'license',
|
||||||
|
'author',
|
||||||
|
],
|
||||||
|
});
|
||||||
|
console.log(`There are ${userList.size()} projects`);
|
||||||
};
|
};
|
||||||
|
|
||||||
main();
|
main();
|
||||||
|
@ -195,6 +195,7 @@
|
|||||||
<h1 class="project-name">Awesome-docker</h1>
|
<h1 class="project-name">Awesome-docker</h1>
|
||||||
<h2 class="project-tagline">A curated list of Docker resources and projects</h2>
|
<h2 class="project-tagline">A curated list of Docker resources and projects</h2>
|
||||||
<a href="https://github.com/veggiemonk/awesome-docker" class="btn">View on GitHub</a>
|
<a href="https://github.com/veggiemonk/awesome-docker" class="btn">View on GitHub</a>
|
||||||
|
<a href="table.html" class="btn">View Beta</a>
|
||||||
<br>
|
<br>
|
||||||
<!-- Place this tag where you want the button to render. -->
|
<!-- Place this tag where you want the button to render. -->
|
||||||
<a class="github-button" href="https://github.com/veggiemonk/awesome-docker" data-icon="octicon-star" data-size="large" data-count-href="/veggiemonk/awesome-docker/stargazers"
|
<a class="github-button" href="https://github.com/veggiemonk/awesome-docker" data-icon="octicon-star" data-size="large" data-count-href="/veggiemonk/awesome-docker/stargazers"
|
||||||
|
321
website/style.css
vendored
321
website/style.css
vendored
@ -1,321 +0,0 @@
|
|||||||
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
|
|
||||||
/** 1. Set default font family to sans-serif. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */
|
|
||||||
html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ }
|
|
||||||
|
|
||||||
/** Remove default margin. */
|
|
||||||
body { margin: 0; }
|
|
||||||
|
|
||||||
/* HTML5 display definitions ========================================================================== */
|
|
||||||
/** Correct `block` display not defined for any HTML5 element in IE 8/9. Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox. Correct `block` display not defined for `main` in IE 11. */
|
|
||||||
article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block; }
|
|
||||||
|
|
||||||
/** 1. Correct `inline-block` display not defined in IE 8/9. 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. */
|
|
||||||
audio, canvas, progress, video { display: inline-block; /* 1 */ vertical-align: baseline; /* 2 */ }
|
|
||||||
|
|
||||||
/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */
|
|
||||||
audio:not([controls]) { display: none; height: 0; }
|
|
||||||
|
|
||||||
/** Address `[hidden]` styling not present in IE 8/9/10. Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. */
|
|
||||||
[hidden], template { display: none; }
|
|
||||||
|
|
||||||
/* Links ========================================================================== */
|
|
||||||
/** Remove the gray background color from active links in IE 10. */
|
|
||||||
a { background-color: transparent; }
|
|
||||||
|
|
||||||
/** Improve readability when focused and also mouse hovered in all browsers. */
|
|
||||||
a:active, a:hover { outline: 0; }
|
|
||||||
|
|
||||||
/* Text-level semantics ========================================================================== */
|
|
||||||
/** Address styling not present in IE 8/9/10/11, Safari, and Chrome. */
|
|
||||||
abbr[title] { border-bottom: 1px dotted; }
|
|
||||||
|
|
||||||
/** Address style set to `bolder` in Firefox 4+, Safari, and Chrome. */
|
|
||||||
b, strong { font-weight: bold; }
|
|
||||||
|
|
||||||
/** Address styling not present in Safari and Chrome. */
|
|
||||||
dfn { font-style: italic; }
|
|
||||||
|
|
||||||
/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari, and Chrome. */
|
|
||||||
h1 { font-size: 2em; margin: 0.67em 0; }
|
|
||||||
|
|
||||||
/** Address styling not present in IE 8/9. */
|
|
||||||
mark { background: #ff0; color: #000; }
|
|
||||||
|
|
||||||
/** Address inconsistent and variable font size in all browsers. */
|
|
||||||
small { font-size: 80%; }
|
|
||||||
|
|
||||||
/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */
|
|
||||||
sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
|
|
||||||
|
|
||||||
sup { top: -0.5em; }
|
|
||||||
|
|
||||||
sub { bottom: -0.25em; }
|
|
||||||
|
|
||||||
/* Embedded content ========================================================================== */
|
|
||||||
/** Remove border when inside `a` element in IE 8/9/10. */
|
|
||||||
img { border: 0; }
|
|
||||||
|
|
||||||
img.emojione { height: 20px; }
|
|
||||||
|
|
||||||
/** Correct overflow not hidden in IE 9/10/11. */
|
|
||||||
svg:not(:root) { overflow: hidden; }
|
|
||||||
|
|
||||||
/* Grouping content ========================================================================== */
|
|
||||||
/** Address margin not present in IE 8/9 and Safari. */
|
|
||||||
figure { margin: 1em 40px; }
|
|
||||||
|
|
||||||
/** Address differences between Firefox and other browsers. */
|
|
||||||
hr { box-sizing: content-box; height: 0; }
|
|
||||||
|
|
||||||
/** Contain overflow in all browsers. */
|
|
||||||
pre { overflow: auto; }
|
|
||||||
|
|
||||||
/** Address odd `em`-unit font size rendering in all browsers. */
|
|
||||||
code, kbd, pre, samp { font-family: monospace, monospace; font-size: 1em; }
|
|
||||||
|
|
||||||
/* Forms ========================================================================== */
|
|
||||||
/** Known limitation: by default, Chrome and Safari on OS X allow very limited styling of `select`, unless a `border` property is set. */
|
|
||||||
/** 1. Correct color not being inherited. Known issue: affects color of disabled elements. 2. Correct font properties not being inherited. 3. Address margins set differently in Firefox 4+, Safari, and Chrome. */
|
|
||||||
button, input, optgroup, select, textarea { color: inherit; /* 1 */ font: inherit; /* 2 */ margin: 0; /* 3 */ }
|
|
||||||
|
|
||||||
/** Address `overflow` set to `hidden` in IE 8/9/10/11. */
|
|
||||||
button { overflow: visible; }
|
|
||||||
|
|
||||||
/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. Correct `select` style inheritance in Firefox. */
|
|
||||||
button, select { text-transform: none; }
|
|
||||||
|
|
||||||
/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */
|
|
||||||
button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ }
|
|
||||||
|
|
||||||
/** Re-set default cursor for disabled elements. */
|
|
||||||
button[disabled], html input[disabled] { cursor: default; }
|
|
||||||
|
|
||||||
/** Remove inner padding and border in Firefox 4+. */
|
|
||||||
button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
|
|
||||||
|
|
||||||
/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */
|
|
||||||
input { line-height: normal; }
|
|
||||||
|
|
||||||
/** It's recommended that you don't attempt to style these elements. Firefox's implementation doesn't respect box-sizing, padding, or width. 1. Address box sizing set to `content-box` in IE 8/9/10. 2. Remove excess padding in IE 8/9/10. */
|
|
||||||
input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ }
|
|
||||||
|
|
||||||
/** Fix the cursor style for Chrome's increment/decrement buttons. For certain `font-size` values of the `input`, it causes the cursor style of the decrement button to change from `default` to `text`. */
|
|
||||||
input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button { height: auto; }
|
|
||||||
|
|
||||||
/** 1. Address `appearance` set to `searchfield` in Safari and Chrome. 2. Address `box-sizing` set to `border-box` in Safari and Chrome (include `-moz` to future-proof). */
|
|
||||||
input[type="search"] { -webkit-appearance: textfield; /* 1 */ /* 2 */ box-sizing: content-box; }
|
|
||||||
|
|
||||||
/** Remove inner padding and search cancel button in Safari and Chrome on OS X. Safari (but not Chrome) clips the cancel button when the search input has padding (and `textfield` appearance). */
|
|
||||||
input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
|
|
||||||
|
|
||||||
/** Define consistent border, margin, and padding. */
|
|
||||||
fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; }
|
|
||||||
|
|
||||||
/** 1. Correct `color` not being inherited in IE 8/9/10/11. 2. Remove padding so people aren't caught out if they zero out fieldsets. */
|
|
||||||
legend { border: 0; /* 1 */ padding: 0; /* 2 */ }
|
|
||||||
|
|
||||||
/** Remove default vertical scrollbar in IE 8/9/10/11. */
|
|
||||||
textarea { overflow: auto; }
|
|
||||||
|
|
||||||
/** Don't inherit the `font-weight` (applied by a rule above). NOTE: the default cannot safely be changed in Chrome and Safari on OS X. */
|
|
||||||
optgroup { font-weight: bold; }
|
|
||||||
|
|
||||||
/* Tables ========================================================================== */
|
|
||||||
/** Remove most spacing between table cells. */
|
|
||||||
table { border-collapse: collapse; border-spacing: 0; }
|
|
||||||
|
|
||||||
td, th { padding: 0; }
|
|
||||||
|
|
||||||
.highlight table td { padding: 5px; }
|
|
||||||
|
|
||||||
.highlight table pre { margin: 0; }
|
|
||||||
|
|
||||||
.highlight .cm { color: #999988; font-style: italic; }
|
|
||||||
|
|
||||||
.highlight .cp { color: #999999; font-weight: bold; }
|
|
||||||
|
|
||||||
.highlight .c1 { color: #999988; font-style: italic; }
|
|
||||||
|
|
||||||
.highlight .cs { color: #999999; font-weight: bold; font-style: italic; }
|
|
||||||
|
|
||||||
.highlight .c, .highlight .cd { color: #999988; font-style: italic; }
|
|
||||||
|
|
||||||
.highlight .err { color: #a61717; background-color: #e3d2d2; }
|
|
||||||
|
|
||||||
.highlight .gd { color: #000000; background-color: #ffdddd; }
|
|
||||||
|
|
||||||
.highlight .ge { color: #000000; font-style: italic; }
|
|
||||||
|
|
||||||
.highlight .gr { color: #aa0000; }
|
|
||||||
|
|
||||||
.highlight .gh { color: #999999; }
|
|
||||||
|
|
||||||
.highlight .gi { color: #000000; background-color: #ddffdd; }
|
|
||||||
|
|
||||||
.highlight .go { color: #888888; }
|
|
||||||
|
|
||||||
.highlight .gp { color: #555555; }
|
|
||||||
|
|
||||||
.highlight .gs { font-weight: bold; }
|
|
||||||
|
|
||||||
.highlight .gu { color: #aaaaaa; }
|
|
||||||
|
|
||||||
.highlight .gt { color: #aa0000; }
|
|
||||||
|
|
||||||
.highlight .kc { color: #000000; font-weight: bold; }
|
|
||||||
|
|
||||||
.highlight .kd { color: #000000; font-weight: bold; }
|
|
||||||
|
|
||||||
.highlight .kn { color: #000000; font-weight: bold; }
|
|
||||||
|
|
||||||
.highlight .kp { color: #000000; font-weight: bold; }
|
|
||||||
|
|
||||||
.highlight .kr { color: #000000; font-weight: bold; }
|
|
||||||
|
|
||||||
.highlight .kt { color: #445588; font-weight: bold; }
|
|
||||||
|
|
||||||
.highlight .k, .highlight .kv { color: #000000; font-weight: bold; }
|
|
||||||
|
|
||||||
.highlight .mf { color: #009999; }
|
|
||||||
|
|
||||||
.highlight .mh { color: #009999; }
|
|
||||||
|
|
||||||
.highlight .il { color: #009999; }
|
|
||||||
|
|
||||||
.highlight .mi { color: #009999; }
|
|
||||||
|
|
||||||
.highlight .mo { color: #009999; }
|
|
||||||
|
|
||||||
.highlight .m, .highlight .mb, .highlight .mx { color: #009999; }
|
|
||||||
|
|
||||||
.highlight .sb { color: #d14; }
|
|
||||||
|
|
||||||
.highlight .sc { color: #d14; }
|
|
||||||
|
|
||||||
.highlight .sd { color: #d14; }
|
|
||||||
|
|
||||||
.highlight .s2 { color: #d14; }
|
|
||||||
|
|
||||||
.highlight .se { color: #d14; }
|
|
||||||
|
|
||||||
.highlight .sh { color: #d14; }
|
|
||||||
|
|
||||||
.highlight .si { color: #d14; }
|
|
||||||
|
|
||||||
.highlight .sx { color: #d14; }
|
|
||||||
|
|
||||||
.highlight .sr { color: #009926; }
|
|
||||||
|
|
||||||
.highlight .s1 { color: #d14; }
|
|
||||||
|
|
||||||
.highlight .ss { color: #990073; }
|
|
||||||
|
|
||||||
.highlight .s { color: #d14; }
|
|
||||||
|
|
||||||
.highlight .na { color: #008080; }
|
|
||||||
|
|
||||||
.highlight .bp { color: #999999; }
|
|
||||||
|
|
||||||
.highlight .nb { color: #0086B3; }
|
|
||||||
|
|
||||||
.highlight .nc { color: #445588; font-weight: bold; }
|
|
||||||
|
|
||||||
.highlight .no { color: #008080; }
|
|
||||||
|
|
||||||
.highlight .nd { color: #3c5d5d; font-weight: bold; }
|
|
||||||
|
|
||||||
.highlight .ni { color: #800080; }
|
|
||||||
|
|
||||||
.highlight .ne { color: #990000; font-weight: bold; }
|
|
||||||
|
|
||||||
.highlight .nf { color: #990000; font-weight: bold; }
|
|
||||||
|
|
||||||
.highlight .nl { color: #990000; font-weight: bold; }
|
|
||||||
|
|
||||||
.highlight .nn { color: #555555; }
|
|
||||||
|
|
||||||
.highlight .nt { color: #000080; }
|
|
||||||
|
|
||||||
.highlight .vc { color: #008080; }
|
|
||||||
|
|
||||||
.highlight .vg { color: #008080; }
|
|
||||||
|
|
||||||
.highlight .vi { color: #008080; }
|
|
||||||
|
|
||||||
.highlight .nv { color: #008080; }
|
|
||||||
|
|
||||||
.highlight .ow { color: #000000; font-weight: bold; }
|
|
||||||
|
|
||||||
.highlight .o { color: #000000; font-weight: bold; }
|
|
||||||
|
|
||||||
.highlight .w { color: #bbbbbb; }
|
|
||||||
|
|
||||||
.highlight { background-color: #f8f8f8; }
|
|
||||||
|
|
||||||
* { box-sizing: border-box; }
|
|
||||||
|
|
||||||
body { padding: 0; margin: 0; font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.5; color: #606c71; }
|
|
||||||
|
|
||||||
a { color: #1e6bb8; text-decoration: none; }
|
|
||||||
a:hover { text-decoration: underline; }
|
|
||||||
|
|
||||||
.btn { display: inline-block; margin-bottom: 1rem; color: rgba(255, 255, 255, 0.7); background-color: rgba(255, 255, 255, 0.08); border-color: rgba(255, 255, 255, 0.2); border-style: solid; border-width: 1px; border-radius: 0.3rem; transition: color 0.2s, background-color 0.2s, border-color 0.2s; }
|
|
||||||
.btn:hover { color: rgba(255, 255, 255, 0.8); text-decoration: none; background-color: rgba(255, 255, 255, 0.2); border-color: rgba(255, 255, 255, 0.3); }
|
|
||||||
.btn + .btn { margin-left: 1rem; }
|
|
||||||
@media screen and (min-width: 64em) { .btn { padding: 0.75rem 1rem; } }
|
|
||||||
@media screen and (min-width: 42em) and (max-width: 64em) { .btn { padding: 0.6rem 0.9rem; font-size: 0.9rem; } }
|
|
||||||
@media screen and (max-width: 42em) { .btn { display: block; width: 100%; padding: 0.75rem; font-size: 0.9rem; }
|
|
||||||
.btn + .btn { margin-top: 1rem; margin-left: 0; } }
|
|
||||||
|
|
||||||
.page-header { color: #fff; text-align: center; background-color: #159957; background-image: linear-gradient(120deg, #155799, #159957); }
|
|
||||||
@media screen and (min-width: 64em) { .page-header { padding: 5rem 6rem; } }
|
|
||||||
@media screen and (min-width: 42em) and (max-width: 64em) { .page-header { padding: 3rem 4rem; } }
|
|
||||||
@media screen and (max-width: 42em) { .page-header { padding: 2rem 1rem; } }
|
|
||||||
|
|
||||||
.project-name { margin-top: 0; margin-bottom: 0.1rem; }
|
|
||||||
@media screen and (min-width: 64em) { .project-name { font-size: 3.25rem; } }
|
|
||||||
@media screen and (min-width: 42em) and (max-width: 64em) { .project-name { font-size: 2.25rem; } }
|
|
||||||
@media screen and (max-width: 42em) { .project-name { font-size: 1.75rem; } }
|
|
||||||
|
|
||||||
.project-tagline { margin-bottom: 2rem; font-weight: normal; opacity: 0.7; }
|
|
||||||
@media screen and (min-width: 64em) { .project-tagline { font-size: 1.25rem; } }
|
|
||||||
@media screen and (min-width: 42em) and (max-width: 64em) { .project-tagline { font-size: 1.15rem; } }
|
|
||||||
@media screen and (max-width: 42em) { .project-tagline { font-size: 1rem; } }
|
|
||||||
|
|
||||||
.main-content { word-wrap: break-word; }
|
|
||||||
.main-content :first-child { margin-top: 0; }
|
|
||||||
@media screen and (min-width: 64em) { .main-content { max-width: 64rem; padding: 2rem 6rem; margin: 0 auto; font-size: 1.1rem; } }
|
|
||||||
@media screen and (min-width: 42em) and (max-width: 64em) { .main-content { padding: 2rem 4rem; font-size: 1.1rem; } }
|
|
||||||
@media screen and (max-width: 42em) { .main-content { padding: 2rem 1rem; font-size: 1rem; } }
|
|
||||||
.main-content img { max-width: 100%; }
|
|
||||||
.main-content h1, .main-content h2, .main-content h3, .main-content h4, .main-content h5, .main-content h6 { margin-top: 2rem; margin-bottom: 1rem; font-weight: normal; color: #159957; }
|
|
||||||
.main-content p { margin-bottom: 1em; }
|
|
||||||
.main-content code { padding: 2px 4px; font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 0.9rem; color: #567482; background-color: #f3f6fa; border-radius: 0.3rem; }
|
|
||||||
.main-content pre { padding: 0.8rem; margin-top: 0; margin-bottom: 1rem; font: 1rem Consolas, "Liberation Mono", Menlo, Courier, monospace; color: #567482; word-wrap: normal; background-color: #f3f6fa; border: solid 1px #dce6f0; border-radius: 0.3rem; }
|
|
||||||
.main-content pre > code { padding: 0; margin: 0; font-size: 0.9rem; color: #567482; word-break: normal; white-space: pre; background: transparent; border: 0; }
|
|
||||||
.main-content .highlight { margin-bottom: 1rem; }
|
|
||||||
.main-content .highlight pre { margin-bottom: 0; word-break: normal; }
|
|
||||||
.main-content .highlight pre, .main-content pre { padding: 0.8rem; overflow: auto; font-size: 0.9rem; line-height: 1.45; border-radius: 0.3rem; -webkit-overflow-scrolling: touch; }
|
|
||||||
.main-content pre code, .main-content pre tt { display: inline; max-width: initial; padding: 0; margin: 0; overflow: initial; line-height: inherit; word-wrap: normal; background-color: transparent; border: 0; }
|
|
||||||
.main-content pre code:before, .main-content pre code:after, .main-content pre tt:before, .main-content pre tt:after { content: normal; }
|
|
||||||
.main-content ul, .main-content ol { margin-top: 0; }
|
|
||||||
.main-content blockquote { padding: 0 1rem; margin-left: 0; color: #819198; border-left: 0.3rem solid #dce6f0; }
|
|
||||||
.main-content blockquote > :first-child { margin-top: 0; }
|
|
||||||
.main-content blockquote > :last-child { margin-bottom: 0; }
|
|
||||||
.main-content table { display: block; width: 100%; overflow: auto; word-break: normal; word-break: keep-all; -webkit-overflow-scrolling: touch; }
|
|
||||||
.main-content table th { font-weight: bold; }
|
|
||||||
.main-content table th, .main-content table td { padding: 0.5rem 1rem; border: 1px solid #e9ebec; }
|
|
||||||
.main-content dl { padding: 0; }
|
|
||||||
.main-content dl dt { padding: 0; margin-top: 1rem; font-size: 1rem; font-weight: bold; }
|
|
||||||
.main-content dl dd { padding: 0; margin-bottom: 1rem; }
|
|
||||||
.main-content hr { height: 2px; padding: 0; margin: 1rem 0; background-color: #eff0f1; border: 0; }
|
|
||||||
|
|
||||||
.site-footer { padding-top: 2rem; margin-top: 2rem; border-top: solid 1px #eff0f1; }
|
|
||||||
@media screen and (min-width: 64em) { .site-footer { font-size: 1rem; } }
|
|
||||||
@media screen and (min-width: 42em) and (max-width: 64em) { .site-footer { font-size: 1rem; } }
|
|
||||||
@media screen and (max-width: 42em) { .site-footer { font-size: 0.9rem; } }
|
|
||||||
|
|
||||||
.site-footer-owner { display: block; font-weight: bold; }
|
|
||||||
|
|
||||||
.site-footer-credits { color: #819198; }
|
|
||||||
|
|
338
website/table.tmpl.html
Normal file
338
website/table.tmpl.html
Normal file
@ -0,0 +1,338 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="no-js" lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||||
|
<meta http-equiv="Cache-control" content="public">
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Awesome-docker</title>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<meta name="theme-color" content="#5DBCD2">
|
||||||
|
<meta name="description" content="A curated list of Docker resources and projects.">
|
||||||
|
<meta name="keywords" content="free and open-source open source projects for docker moby kubernetes linux awesome awesome-list container tools dockerfile list moby docker-container docker-image docker-environment docker-deployment docker-swarm docker-api docker-monitoring docker-machine docker-security docker-registry">
|
||||||
|
<meta name="google-site-verification" content="_yiugvz0gCtfsBLyLl1LnkALXb6D4ofiwCyV1XOlYBM" />
|
||||||
|
<link rel="icon" type="image/png" href="favicon.png">
|
||||||
|
<style>
|
||||||
|
:root {
|
||||||
|
--main-list-header: #5dbcd2;
|
||||||
|
--main-list-footer: #5dbcd2;
|
||||||
|
}
|
||||||
|
* {
|
||||||
|
box-sizing: border-box
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
font-family: sans-serif;
|
||||||
|
-ms-text-size-adjust: 100%;
|
||||||
|
-webkit-text-size-adjust: 100%
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
font-family: Open Sans, Helvetica Neue, Helvetica, Arial, sans-serif;
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: #606c71
|
||||||
|
}
|
||||||
|
|
||||||
|
section {
|
||||||
|
display: block
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
background-color: transparent;
|
||||||
|
color: #5DBCD2;
|
||||||
|
text-decoration: none
|
||||||
|
}
|
||||||
|
|
||||||
|
strong {
|
||||||
|
font-weight: 700
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 2em;
|
||||||
|
margin: .67em 0
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
border: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
color: hsla(0, 0%, 100%, .7);
|
||||||
|
background-color: hsla(0, 0%, 100%, .08);
|
||||||
|
border: 1px solid hsla(0, 0%, 100%, .2);
|
||||||
|
border-radius: .3rem
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-header {
|
||||||
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
background-color: #5DBCD2;
|
||||||
|
background-image: linear-gradient(120deg, #155799, #5DBCD2)
|
||||||
|
}
|
||||||
|
|
||||||
|
.project-name {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: .1rem
|
||||||
|
}
|
||||||
|
|
||||||
|
.project-tagline {
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
font-weight: 400;
|
||||||
|
opacity: .7
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
.container {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr;
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************/
|
||||||
|
|
||||||
|
.searchbar {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
.searchbar > .search {
|
||||||
|
border-radius: .25rem;
|
||||||
|
padding: .5rem 1rem .5rem 1rem;
|
||||||
|
margin: 1rem 0 1rem 0;
|
||||||
|
width: 18rem;
|
||||||
|
font-size: 2.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************/
|
||||||
|
|
||||||
|
.sortbtn {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(4, 6.5rem);
|
||||||
|
justify-content: right;
|
||||||
|
padding-right: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sortbtn :first-child {
|
||||||
|
grid-row: span 4;
|
||||||
|
align-self: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sort {
|
||||||
|
border-radius: 6px;
|
||||||
|
border: 1px solid white;
|
||||||
|
color: #fff;
|
||||||
|
text-decoration: none;
|
||||||
|
background-color: var(--main-list-header);
|
||||||
|
height: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sort:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
background-color: #1b8aba;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sort:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sort:after {
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
border-left: 5px solid transparent;
|
||||||
|
border-right: 5px solid transparent;
|
||||||
|
border-bottom: 5px solid transparent;
|
||||||
|
content: "";
|
||||||
|
position: relative;
|
||||||
|
top: -10px;
|
||||||
|
right: -5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sort.asc:after {
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
border-left: 5px solid transparent;
|
||||||
|
border-right: 5px solid transparent;
|
||||||
|
border-top: 5px solid #fff;
|
||||||
|
content: "";
|
||||||
|
position: relative;
|
||||||
|
top: 13px;
|
||||||
|
right: -5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sort.desc:after {
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
border-left: 5px solid transparent;
|
||||||
|
border-right: 5px solid transparent;
|
||||||
|
border-bottom: 5px solid #fff;
|
||||||
|
content: "";
|
||||||
|
position: relative;
|
||||||
|
top: -10px;
|
||||||
|
right: -5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************/
|
||||||
|
|
||||||
|
.list {
|
||||||
|
display: grid;
|
||||||
|
grid-gap: 1rem;
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
||||||
|
line-height: 1;
|
||||||
|
padding: 1rem;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list > li {
|
||||||
|
display: grid;
|
||||||
|
grid-template-rows: 2rem 1fr 2rem 2rem 2rem;
|
||||||
|
grid-template-columns: 1fr 1fr;
|
||||||
|
list-style: none;
|
||||||
|
box-shadow: 2px 2px 6px 0px rgba(0, 0, 0, 0.3);
|
||||||
|
border-radius: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
li > .description,
|
||||||
|
li > .name,
|
||||||
|
li > .updated {
|
||||||
|
grid-column: span 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list li > * {
|
||||||
|
text-align: center;
|
||||||
|
margin: 0;
|
||||||
|
padding-top: .25rem;
|
||||||
|
padding-bottom: .25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list li > :first-child {
|
||||||
|
color: white;
|
||||||
|
background-color: var(--main-list-header);
|
||||||
|
border-radius: 1rem 1rem 0 0;
|
||||||
|
}
|
||||||
|
.list li > .description {
|
||||||
|
border-bottom: 1px solid var(--main-list-header);
|
||||||
|
word-wrap: break-word;
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
.list li > .updated {
|
||||||
|
border-bottom: 1px solid var(--main-list-header);
|
||||||
|
}
|
||||||
|
|
||||||
|
.list > li > :nth-last-child(3),
|
||||||
|
.list > li > :nth-last-child(4) {
|
||||||
|
align-self: flex-end;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list > li > :last-child {
|
||||||
|
color: white;
|
||||||
|
background-color: var(--main-list-footer);
|
||||||
|
border-radius: 0 0 1rem 0;
|
||||||
|
padding: .5rem 0 .5rem 0;
|
||||||
|
}
|
||||||
|
.list > li > :nth-last-child(2) {
|
||||||
|
color: white;
|
||||||
|
background-color: var(--main-list-footer);
|
||||||
|
border-radius: 0 0 0 1rem;
|
||||||
|
padding: .5rem 0 .5rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************/
|
||||||
|
|
||||||
|
@media screen and (min-width:64em) {
|
||||||
|
.btn {
|
||||||
|
padding: .75rem 1rem
|
||||||
|
}
|
||||||
|
.page-header {
|
||||||
|
padding: 5rem 6rem
|
||||||
|
}
|
||||||
|
.project-name {
|
||||||
|
font-size: 3.25rem
|
||||||
|
}
|
||||||
|
.project-tagline {
|
||||||
|
font-size: 1.25rem
|
||||||
|
}
|
||||||
|
.main-content {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
margin: 0 8rem 0 8rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (min-width:42em) and (max-width:64em) {
|
||||||
|
.btn {
|
||||||
|
padding: .6rem .9rem;
|
||||||
|
font-size: .9rem
|
||||||
|
}
|
||||||
|
.page-header {
|
||||||
|
padding: 3rem 4rem
|
||||||
|
}
|
||||||
|
.project-name {
|
||||||
|
font-size: 2.25rem
|
||||||
|
}
|
||||||
|
.project-tagline {
|
||||||
|
font-size: 1.15rem
|
||||||
|
}
|
||||||
|
.main-content {
|
||||||
|
font-size: 1.1rem
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width:42em) {
|
||||||
|
.btn {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
padding: .75rem;
|
||||||
|
font-size: .9rem
|
||||||
|
}
|
||||||
|
.page-header {
|
||||||
|
padding: 2rem 1rem
|
||||||
|
}
|
||||||
|
.project-name {
|
||||||
|
font-size: 1.75rem
|
||||||
|
}
|
||||||
|
.project-tagline {
|
||||||
|
font-size: 1rem
|
||||||
|
}
|
||||||
|
.main-content {
|
||||||
|
font-size: 1rem
|
||||||
|
}
|
||||||
|
.container {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
.sortbtn {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, 6.5rem);
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<!-- <link rel="stylesheet" href="style.css"> -->
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<section class="page-header">
|
||||||
|
<h1 class="project-name">Awesome-docker</h1>
|
||||||
|
<h2 class="project-tagline">A curated list of Docker resources and projects</h2>
|
||||||
|
<a href="https://github.com/veggiemonk/awesome-docker" class="btn">View on GitHub</a>
|
||||||
|
<br>
|
||||||
|
<!-- Place this tag where you want the button to render. -->
|
||||||
|
<a class="github-button" href="https://github.com/veggiemonk/awesome-docker" data-icon="octicon-star" data-size="large" data-count-href="/veggiemonk/awesome-docker/stargazers"
|
||||||
|
data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star veggiemonk/awesome-docker on GitHub">Star</a>
|
||||||
|
</section>
|
||||||
|
<section id="md" class="main-content"></section>
|
||||||
|
<script src="index.js"></script>
|
||||||
|
<!--Place this tag in your head or just before your close body tag. -->
|
||||||
|
<script async defer src="https://buttons.github.io/buttons.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
Loading…
Reference in New Issue
Block a user