Docker Developer Guide#02
Docker Concepts & Guide
Summary
- Concepts of Container
- Development Container
- Deploy of Container
- GitHub Package
- Upload Image to Docker Hub
- Docker Install WSL2
- Import & Export Container
- Docker Cheat Sheet
- Docker Volumes
- Portainer.io
- Setup /etc/docker/daemon.json
- References
1. Concepts of Contaitner
Diference Container x Virtual Machine
2. Developer Container
3. Deploy Container
3.1. Google Cloud Platform
Google Cloud Run
3.2. AWS
AWS Elastic Container Service
3.3. Kurbenetes
Diferences Beteween K8s x K3s
K3S
curl -sfL https://get.k3s.io | sh -
# Check for Ready node,
takes maybe 30 seconds
k3s kubectl get node
3.4. Start Docker
sudo dockerd &
4. GitHub Package
- ghcr.io
name: CIon:
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- uses: azure/docker-login@v1
with:
login-server: ghcr.io
username: ${{ secrets.GH_PACKAGES_USER }}
password: ${{ secrets.GH_PACKAGES_TOKEN }}
- run:
docker build -t ghcr.io/Software-Engineering-2030/sample-docker/demovideo:latest -f Dockerfile
docker tag ghcr.io/Software-Engineering-2030/sample-docker/demovideo ghrc.io/Software-Engineering-2030/sample-docker/demovideo:${{github.sha}}
- run:
docker push ghcr.io/Software-Engineering-2030/sample-docker/demovideo:latest
docker push ghcr.io/Software-Engineering-2030/sample-docker/demovideo:${{github.sha}}
5. Upload Image to Docker Hub
- docker ps -a
- docker commit Imagem repo
- docker push repo
- docker login -username=username -email=email@docker.com
- https://hub.docker.com
docker login -u=xxxx -p=yyyydocker login -u="${DOCKER_USERNAME}" -p="${DOCKER_PASSWORD}"
6. Docker Install WSL2
Pre-reqs
sudo apt update && sudo apt upgrade
sudo apt remove docker docker-engine docker.io containerd runc
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
Update Sources Ubuntu
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Install Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
Docker Permission Users
sudo usermod -aG docker $USER
Install Docker Composer
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
Install Docker Service Start(*)
sudo service docker start
Docker Bash, Commit, Push
docker pull ubuntudocker run -it -d ubuntudocker exec -it aa3e7607dbac bashdocker commit aa3e7607dbac viannaandre/ubuntu-test:latestdocker push viannaandre/ubuntu-test:latest
GitHub Package
7. Import & Export Container
Export Container
# docker container ls -a# docker export meudjango | gzip > meudjango.gz
Copy Container
scp meudjango.gz servidor:/destino
Destination Host
# ssh usuario@servidor# zcat meudjango.gz | docker import - meudjango
Execute Host
# docker run -it meudjango bash
8. Docker Cheat Sheet
9. Docker Volumes
Docker Backup / Restore
Docker Volume Bind
Docker Migration Strategy
How to persist and backup PostgreSQL Docker container
version: '3.1'
services:
db:
image: postgres
restart: always
environment:
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
POSTGRES_DB: mydb
volumes:
- ./data:/var/lib/postgresql/data
How to persist and backup MySQL Docker container
Structure
Docker Migration Volumes
Docker Backup / Restore Volumes
Backup a container
Backup docker data from inside container volumes and package it in a tarball archive. docker run --rm --volumes-from CONTAINER -v $(pwd):/backup busybox tar cvfz /backup/backup.tar CONTAINERPATH
Restore container from backup
Restore the volume with a tarball archive. docker run --rm --volumes-from CONTAINER -v $(pwd):/backup busybox bash -c "cd CONTAINERPATH && tar xvf /backup/backup.tar --strip 1"
¬
Docker Volume Backup / Restore (Checked)
Backup
#!/bin/bash
# This script allows you to backup a single volume from a container
# Data in given volume is saved in the current directory in a tar archive.
CONTAINER_NAME=$1
VOLUME_NAME=$2
usage() {
echo "Usage: $0 [container name] [volume name]"
exit 1
}
if [ -z $CONTAINER_NAME ]
then
echo "Error: missing container name parameter."
usage
fi
if [ -z $VOLUME_NAME ]
then
echo "Error: missing volume name parameter."
usage
fi
sudo docker run --rm --volumes-from $CONTAINER_NAME -v $(pwd):/backup busybox tar cvf /backup/backup.tar $VOLUME_NAME
Restore
#!/bin/bash
# This script allows you to restore a single volume from a container
# Data in restored in volume with same backupped path
NEW_CONTAINER_NAME=$1
usage() {
echo "Usage: $0 [container name]"
exit 1
}
if [ -z $NEW_CONTAINER_NAME ]
then
echo "Error: missing container name parameter."
usage
fi
sudo docker run --rm --volumes-from $NEW_CONTAINER_NAME -v $(pwd):/backup busybox tar xvf /backup/backup.tar
Usage can be like this:
$ volume_backup.sh old_container /srv/www
$ sudo docker stop old_container && sudo docker rm old_container
$ sudo docker run -d --name new_container myrepo/new_container
$ volume_restore.sh new_container
10. Portainer.io
Docker Volume
docker volume create portainer_data
Docker Container
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:2.11.0https://localhost:9443
11. Setup /etc/docker/daemon.json
/etc/docker/daemon.json
{
"dns": ["8.8.8.8"]
}
Restart Docker:
sudo service docker restart
11. References
- https://www.docker.com/sites/default/files/d8/2019-09/docker-cheat-sheet.pdf
- https://dockerlabs.collabnix.com/
- https://hub.docker.com/
- https://caylent.com/blog/docker/docker-commands-cheat-sheet
- https://dev.to/sirak/how-to-persist-and-backup-postgresql-docker-container-b75
- https://www.nanoshots.com.br/2017/01/docker-restaurando-dumps-em-containers.html
- https://www.youtube.com/watch?v=ZEy8iFbgbPA&t=86s
- https://github.com/xcad2k/cheat-sheets/blob/main/infrastructure/docker.md