<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://guides.hackclub.app/index.php?action=history&amp;feed=atom&amp;title=Docker</id>
	<title>Docker - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://guides.hackclub.app/index.php?action=history&amp;feed=atom&amp;title=Docker"/>
	<link rel="alternate" type="text/html" href="https://guides.hackclub.app/index.php?title=Docker&amp;action=history"/>
	<updated>2026-07-06T19:45:46Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://guides.hackclub.app/index.php?title=Docker&amp;diff=98&amp;oldid=prev</id>
		<title>Admin: new page about docker yay!!</title>
		<link rel="alternate" type="text/html" href="https://guides.hackclub.app/index.php?title=Docker&amp;diff=98&amp;oldid=prev"/>
		<updated>2026-07-01T18:03:32Z</updated>

		<summary type="html">&lt;p&gt;new page about docker yay!!&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Docker keeps projects contained and bundles all python/node versions, dependencies, and OS libraries into one image! This is best for web apps, projects with databases, etc. If you&amp;#039;re hosting a Discord/Slack bot or a simple script, you might want to consider using [[Using PM2|PM2]] or [[Systemd]] instead.&lt;br /&gt;
&lt;br /&gt;
=== 1. Installation ===&lt;br /&gt;
Run this command to update and install docker and its dependencies on your container.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Debian&amp;#039;&amp;#039;&amp;#039;&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
apt update&lt;br /&gt;
apt install ca-certificates curl gnupg -y&lt;br /&gt;
&lt;br /&gt;
install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian bookworm stable&amp;quot; | tee /etc/apt/sources.list.d/docker.list&lt;br /&gt;
&lt;br /&gt;
apt update&lt;br /&gt;
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y&lt;br /&gt;
docker run hello-world&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;#039;&amp;#039;&amp;#039;Ubuntu&amp;#039;&amp;#039;&amp;#039;&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
apt update&lt;br /&gt;
apt install ca-certificates curl gnupg -y&lt;br /&gt;
&lt;br /&gt;
install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu noble stable&amp;quot; | tee /etc/apt/sources.list.d/docker.list&lt;br /&gt;
&lt;br /&gt;
apt update&lt;br /&gt;
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y&lt;br /&gt;
docker run hello-world&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;If you see a &amp;quot;Hello from Docker!&amp;quot; message, you&amp;#039;re good.&lt;br /&gt;
&lt;br /&gt;
=== 2. Project Setup ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create a &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; . You can use a dockerfile, but the docker compose file is simpler for beginners and scales more easily! Below is a template.&lt;br /&gt;
 &amp;lt;code&amp;gt;services:&lt;br /&gt;
   web:&lt;br /&gt;
     image: &amp;lt;image&amp;gt;          # base image for your language, see table below&lt;br /&gt;
     container_name: myapp&lt;br /&gt;
     restart: unless-stopped&lt;br /&gt;
     working_dir: /app&lt;br /&gt;
     volumes:&lt;br /&gt;
       - .:/app&lt;br /&gt;
     command: sh -c &amp;quot;&amp;lt;install command&amp;gt; &amp;amp;&amp;amp; &amp;lt;run command&amp;gt;&amp;quot;&lt;br /&gt;
     env_file:&lt;br /&gt;
       - .env&amp;lt;/code&amp;gt;&lt;br /&gt;
Swap &amp;lt;code&amp;gt;&amp;lt;image&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;install command&amp;gt; &amp;amp;&amp;amp; &amp;lt;run command&amp;gt;&amp;lt;/code&amp;gt; for your language:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Language&lt;br /&gt;
!&amp;lt;code&amp;gt;image&amp;lt;/code&amp;gt;&lt;br /&gt;
!&amp;lt;code&amp;gt;command&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Python&lt;br /&gt;
|&amp;lt;code&amp;gt;python:3.12-slim&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;pip install -r requirements.txt &amp;amp;&amp;amp; python3 app.py&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Node.js&lt;br /&gt;
|&amp;lt;code&amp;gt;node:20-slim&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;npm install &amp;amp;&amp;amp; node index.js&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Bun&lt;br /&gt;
|&amp;lt;code&amp;gt;oven/bun:slim&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;bun install &amp;amp;&amp;amp; bun run index.ts&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Go&lt;br /&gt;
|&amp;lt;code&amp;gt;golang:1.22-alpine&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;go mod download &amp;amp;&amp;amp; go run main.go&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Rust&lt;br /&gt;
|&amp;lt;code&amp;gt;rust:slim&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;cargo build --release &amp;amp;&amp;amp; ./target/release/app&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
If your language isn&amp;#039;t listed, just search it up! Docker has hundreds of compatible images!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, setup your environment variables and secrets in the same directory as the &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt;, and add &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;.gitignore&amp;lt;/code&amp;gt; so you don&amp;#039;t accidentally leak them to GitHub.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, run your code!&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
docker compose up -d&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Check to make sure it&amp;#039;s running:&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
docker compose ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;When you edit your code, you can easily restart your docker container!&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
docker compose restart web&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. Helpful Commands ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Command&lt;br /&gt;
!What it does&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;docker compose ps&amp;lt;/code&amp;gt;&lt;br /&gt;
|List your project&amp;#039;s containers&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;docker compose logs -f &amp;lt;service&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Live-tail a service&amp;#039;s logs&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;docker compose restart &amp;lt;service&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Restart one service&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;docker compose down&amp;lt;/code&amp;gt;&lt;br /&gt;
|Stop everything&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;docker exec -it &amp;lt;name&amp;gt; bash&amp;lt;/code&amp;gt;&lt;br /&gt;
|Get a shell inside a running container&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;docker system prune -af&amp;lt;/code&amp;gt;&lt;br /&gt;
|Clean up unused images/cache&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>