Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
marcosnils committed Jan 20, 2017
0 parents commit c1b4760
Show file tree
Hide file tree
Showing 46 changed files with 16,947 additions and 0 deletions.
4 changes: 4 additions & 0 deletions .gitignore
@@ -0,0 +1,4 @@
.vscode/
_site/
.sass-cache/
.jekyll-metadata
Empty file added .gitmodules
Empty file.
1 change: 1 addition & 0 deletions CNAME
@@ -0,0 +1 @@
training.play-with-docker.com
37 changes: 37 additions & 0 deletions README.md
@@ -0,0 +1,37 @@
# Docker Tutorials and Labs

This repo contains [Docker](https://docker.com) labs and tutorials authored both by Docker, and by members of the community. We welcome contributions and want to grow the repo.

#### Docker tutorials:
* [Docker for beginners] (beginner/readme.md)
* [Docker Swarm Mode](swarm-mode/README.md)
* [Configuring developer tools and programming languages](developer-tools/README.md)
* Java
* [Live Debugging Java with Docker](developer-tools/java-debugging)
* [Docker for Java Developers](developer-tools/java/)
* Node.js
* [Live Debugging a Node.js application in Docker](developer-tools/nodejs-debugging)
* [Dockerizing a Node.js application](developer-tools/nodejs/porting/)
* [Docker for ASP.NET and Windows containers](windows/readme.md)
* [Building a 12 Factor app with Docker](12factor/README.md)
* [Docker Security](security/README.md)
* [Docker Networking](networking/)


#### Community tutorials
* [Docker Tutorials from the Community](https://github.com/docker/community/tree/master/Docker-Meetup-Content) - links to a different repository
* [Advanced Docker orchestration workshop] (https://github.com/docker/labs/tree/master/Docker-Orchestration) - links to a different repository

For more information on Docker, see the Official [Docker documentation](https://docs.docker.com).

#### Contributing

We want to see this repo grow, so if you have a tutorial to submit, or contributions to existing tutorials, please see this guide:

[Guide to submitting your own tutorial](contribute.md)

# Running trainings site

Clone the repo and run the following docker container: `docker run --rm --label=jekyll --volume=$(pwd):/srv/jekyll -it -p 4000:4000 jekyll/jekyll`

Browser the site by visiting http://localhost:4000
54 changes: 54 additions & 0 deletions _config.yml
@@ -0,0 +1,54 @@
# Welcome to Jekyll!
#
# This config file is meant for settings that affect your whole blog, values
# which you are expected to set up once and rarely need to edit after that.
# For technical reasons, this file is *NOT* reloaded automatically when you use
# 'jekyll serve'. If you change this file, please restart the server process.

# Site settings
title: PlayWithDocker class-room
email:
description: > # this means to ignore newlines until "baseurl:"
Play with docker class-room environment
baseurl: # the subpath of your site, e.g. /blog
url: "http://marcosnils.github.io" # the base hostname & protocol for your site

#sidebar
default-image: docker-logo.png # If there is no featured image in a post then this image will be showed. Also on all pages this image will be showed. Use a 500x250 image.

#footer
built-by: PWD Team
copyright:
name: PWD
link: 'http://play-with-docker.com'

# Build settings
markdown: kramdown
permalink: /:title/
paginate: 6
paginate_path: /page:num/

# Tracker
analytics: UA-83979019-1


#social
facebook: https://www.facebook.com/docker.run
twitter: https://twitter.com/@docker
github: https://www.github.com/docker/labs

#facebook like box
fb-app-id: 549480635219583
fb-page-url: https://www.facebook.com/docker.run/
fb-page-title: Docker

# Sass style
sass:
style: compressed

# Ruby Gems
gems: [jekyll-paginate]

11 changes: 11 additions & 0 deletions _includes/analytics.html
@@ -0,0 +1,11 @@
<!-- Google Analytics Tracking code -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');

ga('create', '{{site.analytics}}', 'auto');
ga('send', 'pageview');

</script>
22 changes: 22 additions & 0 deletions _includes/footer.html
@@ -0,0 +1,22 @@

<footer class="container">

<div class="row mt20">
{% if site.copyright.name %}
<div class="col-md-4 text-center">All rights reserved by <a target="_blank" href="{{site.copyright.link}}">{{site.copyright.name}}</a></div>
{% endif %}

<div class="col-md-4 text-center" >
{% if site.built-by %}
<a target="_blank" href="https://www.docker.com"><img src="https://img.shields.io/docker/automated/jrottenberg/ffmpeg.svg" alt="{{site.built-by}}"></a>
{% endif %}
</div>
<div class="col-md-4 text-center">
<a target="_blank" href="{{site.facebook}}"><li class="social facebook"><img src="{{site.baseurl}}/images/facebook.svg" alt="{{site.facebook}}"></li></a>
<a target="_blank" href="{{site.twitter}}"><li class="social twitter"><img src="{{site.baseurl}}/images/twitter.svg" alt="{{site.twitter}}"></li></a>
<a target="_blank" href="{{site.github}}"><li class="social github"><img src="{{site.baseurl}}/images/github.svg" alt="{{site.github}}"></li></a>
</div>

</div>

</footer>
21 changes: 21 additions & 0 deletions _includes/head.html
@@ -0,0 +1,21 @@
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">

{% comment %}
{% seo %}
{% endcomment %}

<link rel="stylesheet" href="{{site.baseurl}}/css/bootstrap.min.css">
<link rel="stylesheet" href="{{site.baseurl}}/css/xterm.css">
<style>
{% capture include_to_scssify %}
{% include main.scss %}
{% endcapture %}
{{ include_to_scssify | scssify }}
</style>

<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet">
<link rel="alternate" type="application/rss+xml" title="{{ site.title }}" href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url }}">
</head>
24 changes: 24 additions & 0 deletions _includes/header.html
@@ -0,0 +1,24 @@
<header class="site-header">
<nav class="navbar navbar-default navbar-inverse">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="{{site.baseurl}}/">{{site.title}}</a>
</div>

<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse " id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-right">
<li><a href="{{site.baseurl}}/tags/">Index</a></li>
<li><a href="{{site.baseurl}}/about/">About</a></li>
</ul>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav>
</header>
46 changes: 46 additions & 0 deletions _includes/main.scss
@@ -0,0 +1,46 @@
// Our variables
$base-font-family: Georgia, "Times New Roman", Times, serif;
$base-font-size: 16px;
$base-font-weight: 400;
$small-font-size: $base-font-size * 0.875;
$base-line-height: 1.5;

$spacing-unit: 30px;

$text-color: #111;
$background-color: #fdfdfd;
$brand-color: #2a7ae2;

$grey-color: #828282;
$grey-color-light: lighten($grey-color, 40%);
$grey-color-dark: darken($grey-color, 25%);

// Width of the content area
$content-width: 800px;

$on-palm: 600px;
$on-laptop: 800px;



// Use media queries like this:
// @include media-query($on-palm) {
// .wrapper {
// padding-right: $spacing-unit / 2;
// padding-left: $spacing-unit / 2;
// }
// }
@mixin media-query($device) {
@media screen and (max-width: $device) {
@content;
}
}



// Import partials from `sass_dir` (defaults to `_sass`)
@import
"layout",
"component/tag",
"custom"
;
29 changes: 29 additions & 0 deletions _includes/sidebar.html
@@ -0,0 +1,29 @@
<div class="col-md-offset-1 col-md-3">
<div class="post-img">
{% if page.img %}
<img width="600" src="{{site.baseurl}}/images/{{page.img}}" alt="{{page.title}}">
{% else %}
<img width="600" src="{{site.baseurl}}/images/{{site.default-image}}" alt="Docker">
{% endif %}
</div>


<div class="mt10 recent">
<h3>Recent articles</h3>
<ul>
{% for post in site.posts limit:3 %}

<li>
<p><a href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a><small>&nbsp;&nbsp;{{ post.date | date_to_string }}</small></p>
</li>

{% endfor %}
</ul>
</div>

<div class="mt10">
<a class="twitter-timeline" href="https://twitter.com/hashtag/learndocker" data-widget-id="821484361048621058">#learndocker Tweets</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
</div>

</div>
10 changes: 10 additions & 0 deletions _layouts/compress.html
@@ -0,0 +1,10 @@
---
# Jekyll layout that compresses HTML
# v3.0.1
# http://jch.penibelst.de/
# © 2014–2015 Anatol Broder
# MIT License
---

{% capture _LINE_FEED %}
{% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd p rt rp optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}</{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "<!-- -->" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "<pre" %}{% assign _content = "" %}{% for _pre_before in _pre_befores %}{% assign _pres = _pre_before | split: "</pre>" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% assign _lastchar = _pres.last | split: "" | last %}{% assign _outerloop = forloop %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if forloop.last and _lastchar == _LINE_FEED %}{% unless _outerloop.last %}{{ _LINE_FEED }}{% endunless %}{% continue %}{% endif %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "</pre>" %}<pre{{ _pres.first }}</pre>{% endif %}{% unless _pre_before contains "</pre>" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " <e;<e; </e>;</e>;</e> ;</e>" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %} <table id="compress_html_profile_{{ site.time | date: "%Y%m%d" }}" class="compress_html_profile"> <thead> <tr> <td>Step <td>Bytes <tbody> <tr> <td>raw <td>{{ content | size }}{% if _profile_endings %} <tr> <td>endings <td>{{ _profile_endings }}{% endif %}{% if _profile_startings %} <tr> <td>startings <td>{{ _profile_startings }}{% endif %}{% if _profile_comments %} <tr> <td>comments <td>{{ _profile_comments }}{% endif %}{% if _profile_collapse %} <tr> <td>collapse <td>{{ _profile_collapse }}{% endif %}{% if _profile_clippings %} <tr> <td>clippings <td>{{ _profile_clippings }}{% endif %} </table>{% endif %}{% endif %}
50 changes: 50 additions & 0 deletions _layouts/default.html
@@ -0,0 +1,50 @@
<!-- Remove the comments to compress html
---
layout: compress
---
-->
<!DOCTYPE html>
<html>

{% include head.html %}

<body>

{% include header.html %}

{{ content }}

{% include footer.html %}

<script async>
(function() {
var font = document.createElement('link');
font.type = 'text/css';
font.rel = 'stylesheet';
font.href = '//fonts.googleapis.com/css?family=Raleway:400,700';
var s = document.getElementsByTagName('link')[0];
s.parentNode.insertBefore(font, s);
})();
</script>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
<script src="https://rawgit.com/RickStrahl/jquery-resizable/master/dist/jquery-resizable.min.js"></script>
<script src="https://cdn.socket.io/socket.io-1.3.7.js"></script>
<script src="{{site.baseurl}}/js/xterm.js"></script>
<script src="{{site.baseurl}}/js/fit.js"></script>
<script src="{{site.baseurl}}/js/sdk.js"></script>
<script src="{{site.baseurl}}/js/bootstrap.min.js"></script>
<script>
pwd.newSession(['.term']);
$(".panel-left").resizable({
handleSelector: ".splitter",
resizeHeight: false,
onDragEnd: pwd.resize.bind(pwd)
});
</script>
{% if site.analytics %}{% include analytics.html %}{% endif %}
</body>

</html>
19 changes: 19 additions & 0 deletions _layouts/page.html
@@ -0,0 +1,19 @@
---
layout: default
---
<div class="row">
<div class="col-md-8">
<article class="post">

<header class="post-header">
<h1 class="post-title">{{ page.title }}</h1>
</header>

<div class="post-content">
{{ content }}
</div>

</article>
</div>
{% include sidebar.html %}
</div>
51 changes: 51 additions & 0 deletions _layouts/post.html
@@ -0,0 +1,51 @@
---
layout: default
---
<div class="panel-container">

<div class="panel-left">
<article class="post" itemscope itemtype="http://schema.org/BlogPosting">

<header class="post-header">
<h1 class="post-title" itemprop="name headline">{{ page.title }}</h1>
<p class="post-meta"><time datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">{{ page.date | date: "%b %-d, %Y" }}</time>{% if page.author %} • <span itemprop="author" itemscope itemtype="http://schema.org/Person"><span itemprop="name">{{ page.author }}</span></span>{% endif %}</p>

</header>

<div class="post-content" itemprop="articleBody">
{{ content }}
</div>

</article>

<div class="row">
<ul class="pager">
{% if page.next.url %}
<li><a class="next" href="{{page.next.url | prepend: site.baseurl}}">&laquo; {{page.next.title}}</a></li>
{% endif %}
{% if page.previous.url %}
<li><a class="previous" href="{{page.previous.url | prepend: site.baseurl}}">{{page.previous.title}} &raquo;</a></li>
{% endif %}
</ul>
</div>

</div>

<div class="splitter">
</div>

<div class="term panel-right">
</div>
</div>

<script>
(function() {
var font3 = document.createElement('link');
font3.type = 'text/css';
font3.rel = 'stylesheet';
font3.href = '{{site.baseurl}}/css/syntax-highlighting.css';
var q = document.getElementsByTagName('link')[0];
q.parentNode.insertBefore(font3, q);
})();
</script>

0 comments on commit c1b4760

Please sign in to comment.