<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.completenoobs.com/noobs/index.php?action=history&amp;feed=atom&amp;title=Docker_Image_Sharing_-_Export_Import</id>
	<title>Docker Image Sharing - Export Import - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.completenoobs.com/noobs/index.php?action=history&amp;feed=atom&amp;title=Docker_Image_Sharing_-_Export_Import"/>
	<link rel="alternate" type="text/html" href="https://www.completenoobs.com/noobs/index.php?title=Docker_Image_Sharing_-_Export_Import&amp;action=history"/>
	<updated>2026-04-30T03:38:49Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://www.completenoobs.com/noobs/index.php?title=Docker_Image_Sharing_-_Export_Import&amp;diff=653&amp;oldid=prev</id>
		<title>AwesomO: Created page with &quot;= Upload Your Docker Image to Docker Hub on Ubuntu 24.04 - Complete Beginner&#039;s Guide =  This tutorial will walk you through uploading your first Docker image to Docker Hub, making it available for anyone to download and run. We&#039;ll use the CompleteNoobs Wiki image as our example.  == What is Docker Hub? == Docker Hub is like GitHub but for Docker images. It&#039;s a cloud-based registry where you can: * Store your Docker images publicly (free) or privately (paid) * Share conta...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.completenoobs.com/noobs/index.php?title=Docker_Image_Sharing_-_Export_Import&amp;diff=653&amp;oldid=prev"/>
		<updated>2025-09-01T17:41:45Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;= Upload Your Docker Image to Docker Hub on Ubuntu 24.04 - Complete Beginner&amp;#039;s Guide =  This tutorial will walk you through uploading your first Docker image to Docker Hub, making it available for anyone to download and run. We&amp;#039;ll use the CompleteNoobs Wiki image as our example.  == What is Docker Hub? == Docker Hub is like GitHub but for Docker images. It&amp;#039;s a cloud-based registry where you can: * Store your Docker images publicly (free) or privately (paid) * Share conta...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Upload Your Docker Image to Docker Hub on Ubuntu 24.04 - Complete Beginner&amp;#039;s Guide =&lt;br /&gt;
&lt;br /&gt;
This tutorial will walk you through uploading your first Docker image to Docker Hub, making it available for anyone to download and run. We&amp;#039;ll use the CompleteNoobs Wiki image as our example.&lt;br /&gt;
&lt;br /&gt;
== What is Docker Hub? ==&lt;br /&gt;
Docker Hub is like GitHub but for Docker images. It&amp;#039;s a cloud-based registry where you can:&lt;br /&gt;
* Store your Docker images publicly (free) or privately (paid)&lt;br /&gt;
* Share containers with the community&lt;br /&gt;
* Download images others have created&lt;br /&gt;
* Automate builds from GitHub repositories&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
* Ubuntu 24.04 with Docker installed&lt;br /&gt;
* A working Docker image (we&amp;#039;ll use completenoobs/wiki:latest from the previous tutorial)&lt;br /&gt;
* Internet connection&lt;br /&gt;
* Email address for Docker Hub account&lt;br /&gt;
&lt;br /&gt;
== Step 1: Create Docker Hub Account ==&lt;br /&gt;
&lt;br /&gt;
=== 1.1: Sign Up ===&lt;br /&gt;
# Open your web browser&lt;br /&gt;
# Navigate to: https://hub.docker.com&lt;br /&gt;
# Click &amp;#039;&amp;#039;&amp;#039;Sign Up&amp;#039;&amp;#039;&amp;#039; button (top right)&lt;br /&gt;
# Fill in the registration form:&lt;br /&gt;
#* &amp;#039;&amp;#039;&amp;#039;Docker ID&amp;#039;&amp;#039;&amp;#039;: Choose a unique username (e.g., &amp;quot;yourname&amp;quot; or &amp;quot;completenoobs&amp;quot;)&lt;br /&gt;
#* &amp;#039;&amp;#039;&amp;#039;Email&amp;#039;&amp;#039;&amp;#039;: Your email address&lt;br /&gt;
#* &amp;#039;&amp;#039;&amp;#039;Password&amp;#039;&amp;#039;&amp;#039;: Strong password (mix of letters, numbers, symbols)&lt;br /&gt;
# Complete the CAPTCHA&lt;br /&gt;
# Click &amp;#039;&amp;#039;&amp;#039;Sign Up&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# Verify your email (check inbox for Docker confirmation email)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Important&amp;#039;&amp;#039;&amp;#039;: Your Docker ID becomes part of your image name (e.g., yourname/wiki:latest)&lt;br /&gt;
&lt;br /&gt;
=== 1.2: Sign In to Docker Hub ===&lt;br /&gt;
# Return to https://hub.docker.com&lt;br /&gt;
# Click &amp;#039;&amp;#039;&amp;#039;Sign In&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# Enter your Docker ID and password&lt;br /&gt;
# You&amp;#039;ll see your Docker Hub dashboard&lt;br /&gt;
&lt;br /&gt;
== Step 2: Create Repository on Docker Hub ==&lt;br /&gt;
&lt;br /&gt;
=== 2.1: Create New Repository ===&lt;br /&gt;
# On Docker Hub dashboard, click &amp;#039;&amp;#039;&amp;#039;Create Repository&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# Fill in repository details:&lt;br /&gt;
#* &amp;#039;&amp;#039;&amp;#039;Name&amp;#039;&amp;#039;&amp;#039;: &amp;lt;code&amp;gt;wiki&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;completenoobs-wiki&amp;lt;/code&amp;gt;)&lt;br /&gt;
#* &amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;: &amp;lt;code&amp;gt;CompleteNoobs Wiki - MediaWiki with pre-imported content from CompleteNoobs.com&amp;lt;/code&amp;gt;&lt;br /&gt;
#* &amp;#039;&amp;#039;&amp;#039;Visibility&amp;#039;&amp;#039;&amp;#039;: Select &amp;#039;&amp;#039;&amp;#039;Public&amp;#039;&amp;#039;&amp;#039; (free) or &amp;#039;&amp;#039;&amp;#039;Private&amp;#039;&amp;#039;&amp;#039; (requires subscription)&lt;br /&gt;
# Click &amp;#039;&amp;#039;&amp;#039;Create&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
You now have a repository at: &amp;lt;code&amp;gt;docker.io/yourdockerid/wiki&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Step 3: Login to Docker Hub from Terminal ==&lt;br /&gt;
&lt;br /&gt;
=== 3.1: Open Terminal ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Open terminal on Ubuntu 24.04&lt;br /&gt;
# You can use Ctrl+Alt+T or search for &amp;quot;Terminal&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3.2: Login to Docker Hub ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker login&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will see:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
USING WEB-BASED LOGIN&lt;br /&gt;
&lt;br /&gt;
i Info → To sign in with credentials on the command line, use &amp;#039;docker login -u &amp;lt;username&amp;gt;&amp;#039;&lt;br /&gt;
         &lt;br /&gt;
&lt;br /&gt;
Your one-time device confirmation code is: MPMR-BKUH&lt;br /&gt;
Press ENTER to open your browser or submit your device code here: https://login.docker.com/activate&lt;br /&gt;
&lt;br /&gt;
Waiting for authentication in the browser…&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
go to https://login.docker.com/activate and enter the &amp;lt;b&amp;gt;confirmation code&amp;lt;/b&amp;gt;, after which you will be asked to sign into docker, after that your set.&lt;br /&gt;
&lt;br /&gt;
the terminal will change to include:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WARNING! Your credentials are stored unencrypted in &amp;#039;/home/noob/.docker/config.json&amp;#039;.&lt;br /&gt;
Configure a credential helper to remove this warning. See&lt;br /&gt;
https://docs.docker.com/go/credential-store/&lt;br /&gt;
&lt;br /&gt;
Login Succeeded&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Step 4: Prepare Your Image ==&lt;br /&gt;
&lt;br /&gt;
=== 4.1: Check Your Local Images ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker images&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE&lt;br /&gt;
completenoobs/wiki    latest    abc123def456   2 hours ago     1.5GB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.2: Tag Your Image for Docker Hub ===&lt;br /&gt;
Replace &amp;lt;code&amp;gt;wiki&amp;lt;/code&amp;gt; with your repo name&lt;br /&gt;
Replace &amp;lt;code&amp;gt;yourdockerid&amp;lt;/code&amp;gt; with your actual Docker ID:&lt;br /&gt;
* Syntax:&amp;lt;code&amp;gt;docker tag YOURDOCKERID/YOUR_REPO_NAME:VERSION&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Tag your image with your Docker Hub username&lt;br /&gt;
docker tag completenoobs/wiki:latest yourdockerid/wiki:latest&lt;br /&gt;
&lt;br /&gt;
# Also create a version tag for better practice&lt;br /&gt;
docker tag completenoobs/wiki:latest yourdockerid/wiki:1.0&lt;br /&gt;
&lt;br /&gt;
# Verify the tags&lt;br /&gt;
docker images&lt;br /&gt;
&lt;br /&gt;
docker images | grep wiki&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should now see multiple tags for the same image ID.&lt;br /&gt;
&lt;br /&gt;
== Step 5: Push Image to Docker Hub ==&lt;br /&gt;
&lt;br /&gt;
=== 5.1: Push the Image ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Push the latest tag&lt;br /&gt;
docker push yourdockerid/wiki:latest&lt;br /&gt;
&lt;br /&gt;
# Push the version tag&lt;br /&gt;
docker push yourdockerid/wiki:1.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You&amp;#039;ll see upload progress:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
The push refers to repository [docker.io/yourdockerid/wiki]&lt;br /&gt;
a1b2c3d4e5f6: Pushing [==============&amp;gt;                     ]  45.3MB/150MB&lt;br /&gt;
7g8h9i0j1k2l: Pushed&lt;br /&gt;
3m4n5o6p7q8r: Pushing [========&amp;gt;                           ]  25.6MB/100MB&lt;br /&gt;
...&lt;br /&gt;
latest: digest: sha256:abc123... size: 3245&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;: First push takes longer (uploads all layers). Subsequent pushes only upload changes.&lt;br /&gt;
&lt;br /&gt;
== Step 6: Verify Upload ==&lt;br /&gt;
&lt;br /&gt;
=== 6.1: Check on Docker Hub ===&lt;br /&gt;
# Go to: https://hub.docker.com/r/yourdockerid/wiki&lt;br /&gt;
# You should see:&lt;br /&gt;
#* Your repository&lt;br /&gt;
#* Tags (latest, 1.0)&lt;br /&gt;
#* Last pushed timestamp&lt;br /&gt;
#* Image size&lt;br /&gt;
#* Pull count (starts at 0)&lt;br /&gt;
&lt;br /&gt;
=== 6.2: Update Repository Description ===&lt;br /&gt;
# Click on your repository&lt;br /&gt;
# Click &amp;#039;&amp;#039;&amp;#039;Manage Repository&amp;#039;&amp;#039;&amp;#039; (gear icon)&lt;br /&gt;
# Add a detailed description&lt;br /&gt;
# Add README content (supports Markdown):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;markdown&amp;quot;&amp;gt;&lt;br /&gt;
 CompleteNoobs Wiki Docker Image&lt;br /&gt;
&lt;br /&gt;
Pre-configured MediaWiki with CompleteNoobs.com content - For Local Use.&lt;br /&gt;
May require an update after first install - as for some reason some pages missing from first xml import&lt;br /&gt;
```bash&lt;br /&gt;
docker exec -it completenoobs_wiki /var/www/html/check_updates.sh&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
## Quick Start&lt;br /&gt;
```bash&lt;br /&gt;
docker run -d -p 8080:80 yourdockerid/wiki:latest&lt;br /&gt;
```&lt;br /&gt;
##Quick Start with Persistent Storage&lt;br /&gt;
```bash&lt;br /&gt;
docker run -d -p 8080:80 \&lt;br /&gt;
  -v completenoobs_mysql:/var/lib/mysql \&lt;br /&gt;
  -v completenoobs_images:/var/www/html/images \&lt;br /&gt;
  --name completenoobs_wiki \&lt;br /&gt;
  completenoobs/cnoobs-wiki:latest&lt;br /&gt;
```&lt;br /&gt;
## Features&lt;br /&gt;
- MediaWiki 1.44&lt;br /&gt;
- Pre-imported CompleteNoobs content&lt;br /&gt;
- YouTube extension&lt;br /&gt;
- PageNotice extension&lt;br /&gt;
- SyntaxHighlight support&lt;br /&gt;
- XML update system&lt;br /&gt;
&lt;br /&gt;
## Default Credentials&lt;br /&gt;
- Username: admin&lt;br /&gt;
- Password: AdminPass123!&lt;br /&gt;
&lt;br /&gt;
## Volumes&lt;br /&gt;
- `/var/lib/mysql` - Database storage&lt;br /&gt;
- `/var/www/html/images` - Uploaded images&lt;br /&gt;
&lt;br /&gt;
## More Information&lt;br /&gt;
Visit: https://completenoobs.com&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Step 7: Test Download (Verify It Works) ==&lt;br /&gt;
&lt;br /&gt;
=== 7.1: Remove Local Images (Optional) ===&lt;br /&gt;
To truly test downloading from Docker Hub:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Stop and remove container if running&lt;br /&gt;
docker stop completenoobs_wiki&lt;br /&gt;
docker rm completenoobs_wiki&lt;br /&gt;
&lt;br /&gt;
# Remove local images&lt;br /&gt;
docker rmi yourdockerid/wiki:latest&lt;br /&gt;
docker rmi yourdockerid/wiki:1.0&lt;br /&gt;
docker rmi completenoobs/wiki:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 7.2: Pull From Docker Hub ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Pull your image from Docker Hub&lt;br /&gt;
docker pull yourdockerid/wiki:latest&lt;br /&gt;
&lt;br /&gt;
# Run it&lt;br /&gt;
docker run -d -p 8080:80 --name test_wiki yourdockerid/wiki:latest&lt;br /&gt;
&lt;br /&gt;
# Check it&amp;#039;s working&lt;br /&gt;
docker logs test_wiki&lt;br /&gt;
curl http://localhost:8080&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Step 8: Share With Others ==&lt;br /&gt;
&lt;br /&gt;
=== 8.1: Basic Run Command ===&lt;br /&gt;
Share this simple command for others to use your image:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d -p 8080:80 yourdockerid/wiki:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 8.2: Docker Compose File ===&lt;br /&gt;
Create a &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; for easier deployment:&lt;br /&gt;
&lt;br /&gt;
* With version 0.1 its all in one container so these commands do not really apply - just placeholder do now - will fix for 0.2&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
version: &amp;#039;3.8&amp;#039;&lt;br /&gt;
&lt;br /&gt;
services:&lt;br /&gt;
  wiki:&lt;br /&gt;
    image: yourdockerid/wiki:latest&lt;br /&gt;
    container_name: completenoobs_wiki&lt;br /&gt;
    ports:&lt;br /&gt;
      - &amp;quot;8080:80&amp;quot;&lt;br /&gt;
    volumes:&lt;br /&gt;
      - mysql_data:/var/lib/mysql&lt;br /&gt;
      - wiki_images:/var/www/html/images&lt;br /&gt;
    restart: unless-stopped&lt;br /&gt;
    environment:&lt;br /&gt;
      - TZ=America/New_York  # Adjust timezone&lt;br /&gt;
&lt;br /&gt;
volumes:&lt;br /&gt;
  mysql_data:&lt;br /&gt;
  wiki_images:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Step 9: Best Practices ==&lt;br /&gt;
&lt;br /&gt;
=== 9.1: Versioning ===&lt;br /&gt;
Always use version tags alongside &amp;#039;latest&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Bad (only latest)&lt;br /&gt;
docker push yourdockerid/wiki:latest&lt;br /&gt;
&lt;br /&gt;
# Good (version + latest)&lt;br /&gt;
docker push yourdockerid/wiki:1.0&lt;br /&gt;
docker push yourdockerid/wiki:latest&lt;br /&gt;
&lt;br /&gt;
# When updating&lt;br /&gt;
docker tag yourdockerid/wiki:latest yourdockerid/wiki:1.1&lt;br /&gt;
docker push yourdockerid/wiki:1.1&lt;br /&gt;
docker push yourdockerid/wiki:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 9.2: Image Size Optimization ===&lt;br /&gt;
Before pushing, consider reducing image size:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Check image size&lt;br /&gt;
docker images yourdockerid/wiki&lt;br /&gt;
&lt;br /&gt;
# Remove unnecessary files in Dockerfile&lt;br /&gt;
# Use multi-stage builds if possible&lt;br /&gt;
# Clean package manager cache&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 9.3: Security ===&lt;br /&gt;
* Never include passwords in image (use environment variables)&lt;br /&gt;
* Regularly update base images&lt;br /&gt;
* Scan for vulnerabilities:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Docker Scout (built-in to Docker Desktop)&lt;br /&gt;
docker scout cves yourdockerid/wiki:latest&lt;br /&gt;
&lt;br /&gt;
# Or use Trivy&lt;br /&gt;
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \&lt;br /&gt;
  aquasec/trivy image yourdockerid/wiki:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Step 10: Maintain Your Image ==&lt;br /&gt;
&lt;br /&gt;
=== 10.1: Update Your Image ===&lt;br /&gt;
When you need to update:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# 1. Make changes to Dockerfile or scripts&lt;br /&gt;
cd ~/completenoobs-docker-image&lt;br /&gt;
&lt;br /&gt;
# 2. Rebuild with new version&lt;br /&gt;
docker build -t yourdockerid/wiki:1.1 .&lt;br /&gt;
&lt;br /&gt;
# 3. Test locally&lt;br /&gt;
docker run -d -p 8080:80 --name test yourdockerid/wiki:1.1&lt;br /&gt;
# ... test everything works ...&lt;br /&gt;
docker stop test &amp;amp;&amp;amp; docker rm test&lt;br /&gt;
&lt;br /&gt;
# 4. Tag as latest&lt;br /&gt;
docker tag yourdockerid/wiki:1.1 yourdockerid/wiki:latest&lt;br /&gt;
&lt;br /&gt;
# 5. Push both tags&lt;br /&gt;
docker push yourdockerid/wiki:1.1&lt;br /&gt;
docker push yourdockerid/wiki:latest&lt;br /&gt;
&lt;br /&gt;
# 6. Update Docker Hub description with changelog&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 10.2: Monitor Usage ===&lt;br /&gt;
Check Docker Hub regularly for:&lt;br /&gt;
* Pull count (how many times downloaded)&lt;br /&gt;
* User issues (check if you&amp;#039;ve linked a GitHub repo)&lt;br /&gt;
* Security scanning results&lt;br /&gt;
&lt;br /&gt;
= Backup Docker Image Locally =&lt;br /&gt;
&lt;br /&gt;
To back up a Docker image locally as a .tar file, which can then be stored on an external drive or transferred to another server, follow these steps.&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
=== Save the Docker Image to a .tar File ===&lt;br /&gt;
Use the &amp;lt;code&amp;gt;docker save&amp;lt;/code&amp;gt; command to export the image to a tarball:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker save -o /path/to/backup/my-image.tar my-image:latest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;-o&amp;lt;/code&amp;gt;: Specifies the output file path (e.g., &amp;lt;code&amp;gt;/path/to/backup/my-image.tar&amp;lt;/code&amp;gt;).&lt;br /&gt;
* &amp;lt;code&amp;gt;my-image:latest&amp;lt;/code&amp;gt;: The name and tag of the image to back up.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker save -o /home/user/backups/my-image.tar my-image:latest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Verify the Tarball ===&lt;br /&gt;
Ensure the .tar file was created:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ls -lh /path/to/backup/my-image.tar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Store on an External Drive ===&lt;br /&gt;
To store the image on an external drive (e.g., mounted at &amp;lt;code&amp;gt;/mnt/external&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
# Copy the .tar file to the external drive:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp /path/to/backup/my-image.tar /mnt/external/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Verify the file on the external drive:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ls /mnt/external/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Safely unmount the external drive after copying:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo umount /mnt/external&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Send Docker Image to Another Server =&lt;br /&gt;
&lt;br /&gt;
To transfer the saved Docker image to another server, use tools like &amp;lt;code&amp;gt;scp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;rsync&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;sftp&amp;lt;/code&amp;gt; to securely copy the .tar file.&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
&lt;br /&gt;
=== Save the Docker Image ===&lt;br /&gt;
Follow the same &amp;lt;code&amp;gt;docker save&amp;lt;/code&amp;gt; step as above to create the .tar file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker save -o /path/to/backup/my-image.tar my-image:latest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Transfer the Image to Another Server ===&lt;br /&gt;
Use &amp;lt;code&amp;gt;scp&amp;lt;/code&amp;gt; to copy the .tar file to the remote server:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp /path/to/backup/my-image.tar user@remote-server:/path/to/destination/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Replace &amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt; with the remote server&amp;#039;s username.&lt;br /&gt;
* Replace &amp;lt;code&amp;gt;remote-server&amp;lt;/code&amp;gt; with the server&amp;#039;s IP address or hostname.&lt;br /&gt;
* Replace &amp;lt;code&amp;gt;/path/to/destination/&amp;lt;/code&amp;gt; with the destination path on the remote server.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
scp /home/user/backups/my-image.tar admin@192.168.1.100:/home/admin/backups/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Load the Image on the Remote Server ===&lt;br /&gt;
On the remote server, use &amp;lt;code&amp;gt;docker load&amp;lt;/code&amp;gt; to import the .tar file into Docker:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker load -i /path/to/destination/my-image.tar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker load -i /home/admin/backups/my-image.tar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify the image is loaded:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker images&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Additional Tips =&lt;br /&gt;
&lt;br /&gt;
== Compress the Image (Optional) ==&lt;br /&gt;
To save space, compress the .tar file before storing or transferring:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gzip /path/to/backup/my-image.tar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This creates &amp;lt;code&amp;gt;my-image.tar.gz&amp;lt;/code&amp;gt;. To decompress on the destination:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gunzip /path/to/backup/my-image.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Use rsync for Large Files ==&lt;br /&gt;
For large .tar files, &amp;lt;code&amp;gt;rsync&amp;lt;/code&amp;gt; can be more reliable than &amp;lt;code&amp;gt;scp&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rsync -avz /path/to/backup/my-image.tar user@remote-server:/path/to/destination/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Automate Backups ==&lt;br /&gt;
Create a script (e.g., &amp;lt;code&amp;gt;backup_docker.sh&amp;lt;/code&amp;gt;) to automate backups:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
IMAGE_NAME=&amp;quot;my-image:latest&amp;quot;&lt;br /&gt;
BACKUP_PATH=&amp;quot;/home/user/backups&amp;quot;&lt;br /&gt;
TIMESTAMP=$(date +%F_%H-%M-%S)&lt;br /&gt;
docker save -o &amp;quot;$BACKUP_PATH/my-image-$TIMESTAMP.tar&amp;quot; $IMAGE_NAME&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make it executable:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x backup_docker.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schedule it with cron:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crontab -e&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add a line to run daily at midnight:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0 0 * * * /path/to/backup_docker.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Check Disk Space ==&lt;br /&gt;
Before saving or copying, ensure there&amp;#039;s enough disk space:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
df -h /path/to/backup&lt;br /&gt;
df -h /mnt/external&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Restoring the Image Locally =&lt;br /&gt;
&lt;br /&gt;
To restore the image from an external drive or a local .tar file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker load -i /path/to/backup/my-image.tar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker images&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Common Issues and Solutions ==&lt;br /&gt;
&lt;br /&gt;
=== Issue: &amp;quot;denied: requested access to the resource is denied&amp;quot; ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solution&amp;#039;&amp;#039;&amp;#039;: You&amp;#039;re not logged in or using wrong username&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker logout&lt;br /&gt;
docker login&lt;br /&gt;
# Make sure to use YOUR Docker ID in the tag&lt;br /&gt;
docker tag completenoobs/wiki:latest YOURDOCKERID/wiki:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Issue: &amp;quot;name unknown: repository name must be lowercase&amp;quot; ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solution&amp;#039;&amp;#039;&amp;#039;: Docker Hub requires lowercase names&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Wrong&lt;br /&gt;
docker tag image:latest YourName/Wiki:latest&lt;br /&gt;
&lt;br /&gt;
# Correct&lt;br /&gt;
docker tag image:latest yourname/wiki:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Issue: Push takes forever ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solution&amp;#039;&amp;#039;&amp;#039;: Large images take time on first push&lt;br /&gt;
* Be patient (can take 30+ minutes for large images)&lt;br /&gt;
* Ensure stable internet connection&lt;br /&gt;
* Consider optimizing image size&lt;br /&gt;
* Use &amp;lt;code&amp;gt;.dockerignore&amp;lt;/code&amp;gt; file to exclude unnecessary files&lt;br /&gt;
&lt;br /&gt;
=== Issue: &amp;quot;filesystem layer verification failed&amp;quot; ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solution&amp;#039;&amp;#039;&amp;#039;: Corrupted layer, rebuild and repush&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker build --no-cache -t yourdockerid/wiki:latest .&lt;br /&gt;
docker push yourdockerid/wiki:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Issue: Error response from daemon: Get &amp;quot;https://registry-1.docker.io/v2/completenoobs/cnoobs-wiki/manifests/sha256:d6cc&amp;quot;: net/http: TLS handshake timeout===&lt;br /&gt;
&lt;br /&gt;
If then pulling a container &amp;lt;code&amp;gt;docker pull completenoobs/cnoobs-wiki:0.1&amp;lt;/code&amp;gt; you see this error:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Error response from daemon: Get &amp;quot;https://registry-1.docker.io/v2/completenoobs/cnoobs-wiki/manifests/sha256:d6cc65ee8f9716986c6b406a9c037b18ab3cf39326b21b42c6ad0d84c80693f4&amp;quot;: net/http: TLS handshake timeout&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Then restart docker &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart docker&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example Commands Summary ==&lt;br /&gt;
&lt;br /&gt;
For quick reference, here are all the essential commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Login to Docker Hub&lt;br /&gt;
docker login&lt;br /&gt;
&lt;br /&gt;
# Tag your image&lt;br /&gt;
docker tag completenoobs/wiki:latest yourdockerid/wiki:latest&lt;br /&gt;
docker tag completenoobs/wiki:latest yourdockerid/wiki:1.0&lt;br /&gt;
&lt;br /&gt;
# Push to Docker Hub&lt;br /&gt;
docker push yourdockerid/wiki:latest&lt;br /&gt;
docker push yourdockerid/wiki:1.0&lt;br /&gt;
&lt;br /&gt;
# Others can now pull and run&lt;br /&gt;
docker pull yourdockerid/wiki:latest&lt;br /&gt;
docker run -d -p 8080:80 yourdockerid/wiki:latest&lt;br /&gt;
&lt;br /&gt;
# Logout when done&lt;br /&gt;
docker logout&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AwesomO</name></author>
	</entry>
</feed>