\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{Gaurav Pandey (gauravpandey44)} \pdfinfo{ /Title (docker-compose.pdf) /Creator (Cheatography) /Author (Gaurav Pandey (gauravpandey44)) /Subject (Docker Compose 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}{A38802} \definecolor{LightBackground}{HTML}{F9F7EF} \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 Compose Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{Gaurav Pandey (gauravpandey44)} via \textcolor{DarkBackground}{\uline{cheatography.com/69622/cs/20583/}}} \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}Gaurav Pandey (gauravpandey44) \\ \uline{cheatography.com/gauravpandey44} \\ \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Published 21st September, 2019.\\ Updated 23rd September, 2019.\\ 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*}{2} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Basics}} \tn \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{{\bf{Docker-Compose}}: is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application's services. Then, with a single command, you create and start all the services from your configuration.% Row Count 6 (+ 6) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{Need to good to yml file directory to successfully run the docker-compose commands. \newline docker-compose start wordpress\_db :it will only start 1 service \newline but docker-compose start : will start all the services \newline similar is the case with other commands.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{docker-compose start}} \tn \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{Starts an existing service container.% Row Count 1 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{2 cm} x{6 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{docker-compose stop}} \tn % Row 0 \SetRowColor{LightBackground} -t, -{}-timeout & specify a shutdown timeout in seconds.(default: 10) \tn % Row Count 2 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{8.4cm}}{Stops running containers without removing them. They can be started again with `docker-compose start`.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{docker-compose pause}} \tn \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{Pauses running containers of a service. They can be unpaused with docker-compose unpause% Row Count 2 (+ 2) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{docker-compose unpause}} \tn \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{Unpauses paused containers of a service.% Row Count 1 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{docker-compose restart}} \tn \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{Restarts all stopped and running services.% Row Count 1 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{3.28 cm} x{4.72 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{docker-compose ps}} \tn % Row 0 \SetRowColor{LightBackground} -q, -{}-quiet & Only display IDs \tn % Row Count 1 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{8.4cm}}{Shows list of containers for a service.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{3.2 cm} x{4.8 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{docker-compose logs}} \tn % Row 0 \SetRowColor{LightBackground} -f, -{}-follow & Follow log output. \tn % Row Count 1 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{8.4cm}}{Displays log output from services.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{docker-compose top}} \tn \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{View the processes running within each service container.% Row Count 2 (+ 2) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Network}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{\# creates a custom network called `frontend` \newline networks: \newline frontend:} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{p{0.8 cm} p{0.8 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{Dependencies}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{2}{x{8.4cm}}{} \tn % Row Count 0 (+ 0) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{8.4cm}}{\# makes the `db` service available as the hostname `database` \newline \# (implies depends\_on) \newline links: \newline - db:database \newline - redis \newline \# make sure `db` is alive before starting \newline depends\_on: \newline - db} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{docker-compose.yml}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{version: "3.7" \newline services: \newline wordpress\_db: \newline container\_name: "wordpress\_db" \newline image: "mysql:5.7" \newline volumes: \newline - \textasciitilde{}/dockers/wordpress/.data/wordpress\_db:/var/lib/mysql \newline environment: \newline MYSQL\_USER: gaurav \newline MYSQL\_PASSWORD: victory \newline MYSQL\_DATABASE: db \newline \seqsplit{MYSQL\_RANDOM\_ROOT\_PASSWORD:} '1' \newline networks: \newline - wordpress\_network \newline ports: \newline - 3307:3306 \newline wordpress\_web: \newline container\_name: "wordpress\_web" \newline image: "wordpress" \newline volumes: \newline - \textasciitilde{}/dockers/wordpress/.data/wordpress\_web:/var/www/html \newline environment: \newline WORDPRESS\_DB\_HOST: wordpress\_db \newline WORDPRESS\_DB\_USER: gaurav \newline WORDPRESS\_DB\_PASSWORD: victory \newline WORDPRESS\_DB\_NAME: db \newline networks: \newline - wordpress\_network \newline ports: \newline - 8080:80 \newline depends\_on: \newline - wordpress\_db \newline networks: \newline wordpress\_network:} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{docker-compose rm}} \tn \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{Removes stopped service containers.By default, anonymous volumes attached to containers are not removed. You can override this with -v. To list all volumes, use docker volume ls. \newline % Row Count 4 (+ 4) -f, -{}-force – Don't ask to confirm the removal \newline % Row Count 6 (+ 2) -s, -{}-stop – Stop the containers, if required, before removing \newline % Row Count 8 (+ 2) -v – Remove any anonymous volumes attached to containers% Row Count 10 (+ 2) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{docker-compose pull}} \tn \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{Pulls an image associated with a service defined in a docker-compose.yml file, but does not start containers based on those images.% Row Count 3 (+ 3) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{x{4 cm} x{4 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{8.4cm}}{\bf\textcolor{white}{docker compose up}} \tn % Row 0 \SetRowColor{LightBackground} docker-compose up & use docker-compose.yml \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} docker-compose -f \textless{}filename.yml\textgreater{} -f \textless{}filenamelocal.yml\textgreater{} up & use custom yml files \tn % Row Count 5 (+ 3) % Row 2 \SetRowColor{LightBackground} -d, -{}-detach & background detached mode \tn % Row Count 7 (+ 2) % Row 3 \SetRowColor{white} -{}-build & forcefully Build images before starting containers. \tn % Row Count 10 (+ 3) % Row 4 \SetRowColor{LightBackground} -{}-no-build & skips the image build process \tn % Row Count 12 (+ 2) % Row 5 \SetRowColor{white} -{}-force-recreate & Recreate containers even if their configuration and image haven't changed. \tn % Row Count 16 (+ 4) % Row 6 \SetRowColor{LightBackground} -{}-no-color & Produce monochrome output. \tn % Row Count 18 (+ 2) % Row 7 \SetRowColor{white} -{}-scale SERVICE=NUM & Scale SERVICE to NUM instances. Overrides the `scale` setting in the Compose file if present. \tn % Row Count 23 (+ 5) \hhline{>{\arrayrulecolor{DarkBackground}}--} \SetRowColor{LightBackground} \mymulticolumn{2}{x{8.4cm}}{docker-compose up is used to start a project. It tries to automate a series of operations including building a mirror, (re)creating a service, starting a service, and associating a service-related container. \newline It also builds the images if the images do not exist and starts the containers:} \tn \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{docker-compose down}} \tn \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{Stops containers and removes containers, networks, volumes, and images \newline % Row Count 2 (+ 2) By default, the only things removed are: \newline % Row Count 3 (+ 1) - Containers for services defined in the Compose file \newline % Row Count 5 (+ 2) - Networks defined in the `networks` section of the Compose file \newline % Row Count 7 (+ 2) - The default network, if one is used \newline % Row Count 8 (+ 1) created by `up`.Networks and volumes defined as `external` are never removed. \newline % Row Count 10 (+ 2) use -v to remove volumes also along with other things% Row Count 12 (+ 2) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{docker-compose version}} \tn \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{Prints the version of docker-compose.% Row Count 1 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{docker-compose push}} \tn \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{Pushes images for services to their respective registry/repository% Row Count 2 (+ 2) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{docker-compose run}} \tn \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{Runs a one-time command against a service. For example, the following command starts the web service and runs bash as its command : \newline % Row Count 3 (+ 3) docker-compose run wordpress\_db bash% Row Count 4 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{docker-compose config}} \tn \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{Validate and view the Compose file.% Row Count 1 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{docker-compose kill}} \tn \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{Forces running containers to stop by sending a SIGKILL signal.% Row Count 2 (+ 2) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{docker-compose bundle}} \tn \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{A Dockerfile can be built into an image, and containers can be created from that image. Similarly, a docker-compose.yml can be built into a distributed application bundle% Row Count 4 (+ 4) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{docker-compose build}} \tn \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{only builds the images, does not start the containers:% Row Count 2 (+ 2) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Building}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{web: \newline \# build from Dockerfile \newline build: . \newline \# build from custom Dockerfile \newline build: \newline context: ./dir \newline dockerfile: Dockerfile.dev \newline \# build from image \newline image: ubuntu \newline image: ubuntu:14.04 \newline image: tutum/influxdb \newline image: \seqsplit{example-registry:4000/postgresql} \newline image: a4bc65fd} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Ports}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{ports: \newline - "3000" \newline - "8000:80" \# guest:host \newline \# expose ports to linked services (not to host) \newline expose: {[}"3000"{]}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Commands}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{\# command to execute \newline command: bundle exec thin -p 3000 \newline command: {[}bundle, exec, thin, -p, 3000{]} \newline \# override the entrypoint \newline entrypoint: /app/start.sh \newline entrypoint: {[}php, -d, vendor/bin/phpunit{]}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Environment variables}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{\# environment vars \newline environment: \newline RACK\_ENV: development \newline environment: \newline - RACK\_ENV=development \newline \# environment vars from file \newline env\_file: .env \newline env\_file: {[}.env, .development.env{]}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}