\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{Andrew Matthews (aabs)} \pdfinfo{ /Title (docker-and-friends.pdf) /Creator (Cheatography) /Author (Andrew Matthews (aabs)) /Subject (Docker and friends Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{05B5F5} \definecolor{LightBackground}{HTML}{EFFAFE} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{Docker and friends Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{Andrew Matthews (aabs)} via \textcolor{DarkBackground}{\uline{cheatography.com/22451/cs/4601/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}Andrew Matthews (aabs) \\ \uline{cheatography.com/aabs} \\ \uline{\seqsplit{aabs}.wordpress.com} \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Published 15th July, 2015.\\ Updated 12th May, 2016.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{3} \begin{tabularx}{5.377cm}{x{1.29402 cm} x{3.68298 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Building Images}} \tn % Row 0 \SetRowColor{LightBackground} `docker build` & Build a new image from the source code at PATH\{\{nl\}\}`docker build -t myimg .` \tn % Row Count 3 (+ 3) % Row 1 \SetRowColor{white} \{\{ar\}\}`-q` & Suppress the output generated by containers \tn % Row Count 5 (+ 2) % Row 2 \SetRowColor{LightBackground} \{\{ar\}\}`-{}-rm` & Remove intermediate containers after a successful build \tn % Row Count 7 (+ 2) % Row 3 \SetRowColor{white} \{\{ar\}\}`-t` & Repository name (and optionally a tag) for the image \tn % Row Count 9 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{{\bf{Examples:}} \newline Simplest possible build instruction: \newline `docker build .` \newline Name image and tag as v1.5: \newline `docker build -t myorg/myimg:1.5 .`} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.74655 cm} x{4.23045 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Misc useful commands}} \tn % Row 0 \SetRowColor{LightBackground} \seqsplit{attach} & Attach to a running container \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} cp & Copy files/folders from a container's filesystem to the host path \tn % Row Count 3 (+ 2) % Row 2 \SetRowColor{LightBackground} \seqsplit{create} & Create a new container \tn % Row Count 4 (+ 1) % Row 3 \SetRowColor{white} exec & Run a command in a running container \tn % Row Count 6 (+ 2) % Row 4 \SetRowColor{LightBackground} \seqsplit{images} & List images \tn % Row Count 7 (+ 1) % Row 5 \SetRowColor{white} \seqsplit{export} & Stream the contents of a container as a tar archive \tn % Row Count 9 (+ 2) % Row 6 \SetRowColor{LightBackground} \seqsplit{import} & Create a new filesystem image from the contents of a tarball \tn % Row Count 11 (+ 2) % Row 7 \SetRowColor{white} \seqsplit{inspect} & Return low-level information on a container or image \tn % Row Count 13 (+ 2) % Row 8 \SetRowColor{LightBackground} kill & Kill a running container \tn % Row Count 14 (+ 1) % Row 9 \SetRowColor{white} load & Load an image from a tar archive \tn % Row Count 15 (+ 1) % Row 10 \SetRowColor{LightBackground} logs & Fetch the logs of a container \tn % Row Count 16 (+ 1) % Row 11 \SetRowColor{white} port & Lookup the public-facing port that is NAT-ed to PRIVATE\_PORT \tn % Row Count 18 (+ 2) % Row 12 \SetRowColor{LightBackground} ps & List containers \tn % Row Count 19 (+ 1) % Row 13 \SetRowColor{white} pull & Pull an image or a repository from a Docker registry server \tn % Row Count 21 (+ 2) % Row 14 \SetRowColor{LightBackground} push & Push an image or a repository to a Docker registry server \tn % Row Count 23 (+ 2) % Row 15 \SetRowColor{white} rm & Remove one or more containers \tn % Row Count 24 (+ 1) % Row 16 \SetRowColor{LightBackground} rmi & Remove one or more images \tn % Row Count 25 (+ 1) % Row 17 \SetRowColor{white} save & Save an image to a tar archive \tn % Row Count 26 (+ 1) % Row 18 \SetRowColor{LightBackground} \seqsplit{search} & Search for an image on the Docker Hub \tn % Row Count 28 (+ 2) % Row 19 \SetRowColor{white} start & Start a stopped container \tn % Row Count 29 (+ 1) % Row 20 \SetRowColor{LightBackground} stop & Stop a running container \tn % Row Count 30 (+ 1) \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{5.377cm}{p{0.74655 cm} x{4.23045 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Misc useful commands (cont)}} \tn % Row 21 \SetRowColor{LightBackground} top & Lookup the running processes of a container \tn % Row Count 2 (+ 2) % Row 22 \SetRowColor{white} wait & Block until a container stops, then print its exit code \tn % Row Count 4 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Run `docker COMMAND -{}-help` for help on the command.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{1.29402 cm} x{3.68298 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Running Docker}} \tn % Row 0 \SetRowColor{LightBackground} `docker run` & starts a process with its own file system, its own networking, and its own isolated process tree\{\{nl\}\}`docker run -itP image` \tn % Row Count 5 (+ 5) % Row 1 \SetRowColor{white} \{\{ar\}\}`-{}-name` & name the container \{\{nl\}\} `docker run -{}-name=somename org` \tn % Row Count 8 (+ 3) % Row 2 \SetRowColor{LightBackground} \{\{ar\}\}`-t` & terminal interface \tn % Row Count 9 (+ 1) % Row 3 \SetRowColor{white} \{\{ar\}\}`-i` & interactive session \tn % Row Count 10 (+ 1) % Row 4 \SetRowColor{LightBackground} \{\{ar\}\}`-d` & daemon Mode \tn % Row Count 11 (+ 1) % Row 5 \SetRowColor{white} \{\{ar\}\}`-P` & publish all exposed ports \tn % Row Count 12 (+ 1) % Row 6 \SetRowColor{LightBackground} \{\{ar\}\}`-p` & expose specific port\{\{nl\}\}`-p \seqsplit{ip:hostport:containerport`} \tn % Row Count 14 (+ 2) % Row 7 \SetRowColor{white} \{\{ar\}\}`-{}-rm` & remove intermediate images \tn % Row Count 16 (+ 2) % Row 8 \SetRowColor{LightBackground} \{\{ar\}\}`-v` & bind mount a volume\{\{nl\}\}`-v /host:/container` \tn % Row Count 18 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{{\bf{Examples:}} \newline run an interactive session: \newline `sudo docker run -P -{}-name=somename image` \newline run container in background, on port 80: \newline `sudo docker run -{}-d -v /etc/appdata:/data -p 0.0.0.0:80:8080 -{}-rm nginx`} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} p{0.4977 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Docker Compose}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{} \tn % Row Count 0 (+ 0) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{TBC} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{2.04057 cm} x{2.93643 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Dockerfiles (for creating images)}} \tn % Row 0 \SetRowColor{LightBackground} `FROM` & set base image for this image\{\{nl\}\}`FROM \textless{}image\textgreater{}:\textless{}tag\textgreater{}` \tn % Row Count 3 (+ 3) % Row 1 \SetRowColor{white} `MAINTAINER` & The author of the image\{\{nl\}\}`MAINTAINER \textless{}name\textgreater{}` \tn % Row Count 6 (+ 3) % Row 2 \SetRowColor{LightBackground} `RUN` & execute commands in new layer\{\{nl\}\}`RUN \textless{}command\textgreater{}`\{\{nl\}\}`RUN {[}"executable", "param1", ...{]}` \tn % Row Count 10 (+ 4) % Row 3 \SetRowColor{white} `CMD` & provide default for an executing container\{\{nl\}\}`CMD {[}"executable","param1",...{]}` \tn % Row Count 14 (+ 4) % Row 4 \SetRowColor{LightBackground} `LABEL` & add metadata to image\{\{nl\}\}`LABEL \textless{}key\textgreater{}=\textless{}value\textgreater{} \textless{}key\textgreater{}=\textless{}value\textgreater{}` \tn % Row Count 17 (+ 3) % Row 5 \SetRowColor{white} `EXPOSE` & listen on the network ports\{\{nl\}\}`EXPOSE \textless{}port\textgreater{} {[}\textless{}port\textgreater{}...{]}` \tn % Row Count 20 (+ 3) % Row 6 \SetRowColor{LightBackground} `ENV` & set the environment variables\{\{nl\}\}`ENV \textless{}key\textgreater{} \textless{}value\textgreater{}`\{\{nl\}\}`ENV \textless{}key\textgreater{}=\textless{}value\textgreater{} \textless{}key\textgreater{}=\textless{}value\textgreater{}` \tn % Row Count 25 (+ 5) % Row 7 \SetRowColor{white} `ADD`~{\bf{/}}`COPY`\textasciicircum{}{\emph{??}}\textasciicircum{} & {\bf{copies}} new files from `\textless{}src\textgreater{}` and adds them to the container at `\textless{}dest\textgreater{}`.\{\{nl\}\}`ADD \textless{}src\textgreater{}... \textless{}dest\textgreater{}` \tn % Row Count 30 (+ 5) \end{tabularx} \par\addvspace{1.3em} \vfill \columnbreak \begin{tabularx}{5.377cm}{x{2.04057 cm} x{2.93643 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Dockerfiles (for creating images) (cont)}} \tn % Row 8 \SetRowColor{LightBackground} `ENTRYPOINT` & configure container to run as an executable\{\{nl\}\}`ENTRYPOINT {[}"exe", "arg"...{]}` \tn % Row Count 4 (+ 4) % Row 9 \SetRowColor{white} `VOLUME` & create externally mounted volumes\{\{nl\}\}`VOLUME {[}"/data"{]}` \tn % Row Count 7 (+ 3) % Row 10 \SetRowColor{LightBackground} `USER` & sets the user name or UID to use when running the image\{\{nl\}\}`USER\textless{}user\textgreater{}` \tn % Row Count 11 (+ 4) % Row 11 \SetRowColor{white} `WORKDIR` & sets working dir for any `RUN`, `CMD`, `ENTRYPOINT`, `COPY` and `ADD` instructions:\{\{nl\}\}`WORKDIR /path/to/workdir` \tn % Row Count 16 (+ 5) % Row 12 \SetRowColor{LightBackground} `ONBUILD` & adds a trigger instruction for execution when image is used as base of another build\{\{nl\}\}`ONBUILD {[}INSTRUCTION{]}` \tn % Row Count 21 (+ 5) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{5.377cm}}{Check out the \{\{link="https://goo.gl/yb8vjw"\}\}Manual Page\{\{/link\}\} for more detail.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}