Orientation
1. List Docker CLI commandsdocker docker container --help2. Display Docker version and info
docker --version docker version docker info3. Execute Docker image
docker run hello-world4. List Docker images
docker image ls5. List Docker containers (running, all, all in quiet mode)
docker container ls docker container ls --all docker container ls -aq
Containers
1. Create image using this directory's Dockerfiledocker build -t friendlyhello .2. Run "friendlyname" mapping port 4000 to 80
docker run -p 4000:80 friendlyhello3. Run "friendlyname" mapping port 4000 to 80 in detach mode
docker run -d -p 4000:80 friendlyhello4. Manage containers
# List all running containers docker container ls # List all containers, even those not running docker container ls -a # Gracefully stop the specified container docker container stop <hash> # Force shutdown of the specified container docker container kill <hash> # Remove specified container from this machine docker container rm <hash> # Remove all containers docker container rm $(docker container ls -a -q)5. Manage images
# List all images on this machine docker image ls -a # Remove specified image from this machine docker image rm <image id> # Remove all images from this machine docker image rm $(docker image ls -a -q)6. Docker hub related
# Log in this CLI session using your Docker credentials docker login # Tag <image> for upload to registry docker tag <image> username/repository:tag # Upload tagged image to registry docker push username/repository:tag # Run image from a registry docker run username/repository:tag
Services
1. Sample docker-compose.yml that defines how Docker containers should behave in production.version: "3"
services:
web:
# replace username/repo:tag with your name and image details
image: username/repo:tag
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "4000:80"
networks:
- webnet
networks:
webnet:
2. Enable swarm mode and make your current machine a swarm managerdocker swarm init3. Mange Stack
# Run the specified Compose file docker stack deploy -c <composefile> <appname> docker stack deploy -c docker-compose.yml getstartedlab # List stacks or apps docker stack ls4. Manage Service
# List running services associated with an app docker service ls # List tasks associated with an app docker service ps <service> docker service ps getstartedlab_web5. Inspect task or container
docker inspect <task or container>6. Take down an application
docker stack rm <appname>
docker stack rm getstartedlab7. Take down a single node swarm from the manager
docker swarm leave --force
Swarms
1. Create a VMdocker-machine create --driver virtualbox myvm1 docker-machine create --driver virtualbox myvm22. List VMs
docker-machine ls3. Instruct myvm1 to become swarm manager
docker-machine ssh myvm1 "docker swarm init --advertise-addr <myvm1 ip>" docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.100"4. Instruct myvm2 to become swarm worker
docker-machine ssh myvm2 "docker swarm join --token <token> <ip>:2377" docker-machine ssh myvm2 "docker swarm join --token SWMTKN-1-437hle524hh1hulxorovrlbfgfx645plt3sba8af3tewsb5q8d-7ez64tn8ggv7twildcg19j30c 192.168.99.100:2377"5. List the nodes in the swarm
docker-machine ssh myvm1 "docker node ls"6. Configure your shell to talk to myvm1
# Show shell variable for myvm1 docker-machine env myvm1 # Set docker-machine shell variable eval $(docker-machine env myvm1) # Unset docker-machine shell variable eval $(docker-machine env -u) # Verify which is the active machine,indicated by asterisk docker-machine ls7. View join token from swarm manager
docker-machine ssh myvm1 "docker swarm join-token -q worker"8. Open ssh session with the VM; type "exit" to end
docker-machine ssh myvm19. View nodes in swarm (while logged on to manager)
docker node ls10. Leave swarm
# Make the worker leave the swarm docker-machine ssh myvm2 "docker swarm leave" # Make master leave, kill swarm docker-machine ssh myvm1 "docker swarm leave -f"11. Status/Stop/Start a VM
docker-machine status myvm1 docker-machine stop myvm1 docker-machine start myvm112. Stop/Start all running VMs
docker-machine stop $(docker-machine ls -q)
docker-machine start $(docker-machine ls -q)13. Delete all VMs and their disk images
docker-machine rm $(docker-machine ls -q)14. Copy files to VM's home directory
docker-machine scp docker-compose.yml myvm1:~
Stacks
1. Sample docker-compose-stack.yml which include "visualizer" and "redis" servicesversion: "3"
services:
web:
# replace username/repo:tag with your name and image details
image: username/repo:tag
deploy:
replicas: 5
restart_policy:
condition: on-failure
resources:
limits:
cpus: "0.1"
memory: 50M
ports:
- "80:80"
networks:
- webnet
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
- webnet
redis:
image: redis
ports:
- "6379:6379"
volumes:
- "/home/docker/data:/data"
deploy:
placement:
constraints: [node.role == manager]
command: redis-server --appendonly yes
networks:
- webnet
networks:
webnet:
2. Create "./data" directory on myvm1 -- swarm managerdocker-machine ssh myvm1 "mkdir ./data"3. Deploy the stack
eval $(docker-machine env myvm1) docker stack deploy -c docker-compose-stack.yml getstartedlab4. Check visualizer on myvm1
http://192.168.99.100:8080
Or:
docker stack ps getstartedlab5. List all services
docker service ls
Docker Scan(Vulnerability scanning for Docker local images)
Please refer to this Doc link.
1. Scan an image
docker scan ubuntu:20.04
# only medium or higher vulnerabilities
docker scan --severity=medium ubuntu:20.04
2. Scan a Dockerfile with image to get detailed report
docker scan --severity=medium --file Dockerfile ubuntu:20.04
All other sample commands:
docker tag getting-started viadea/new-getting-started
docker push viadea/new-getting-started
docker run -dp 3000:3000 viadea/new-getting-started
docker run -d ubuntu bash -c "shuf -i 1-10000 -n 1 -o /data.txt && tail -f /dev/null"
docker volume create todo-db
docker run -dp 3000:3000 -v todo-db:/etc/todos getting-started
docker volume inspect todo-db
docker run -dp 3000:3000 \
-w /app -v "$(pwd):/app" \
node:12-alpine \
sh -c "yarn install && yarn run dev"
docker logs -f 6e6640ed48d2
docker network create todo-app
docker run -d \
--network todo-app --network-alias mysql \
-v todo-mysql-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=secret \
-e MYSQL_DATABASE=todos \
mysql:5.7
docker exec -it 9b42f7ad8146 mysql -p
docker run -it --network todo-app nicolaka/netshoot
dig mysql
docker run -dp 3000:3000 \
-w /app -v "$(pwd):/app" \
--network todo-app \
-e MYSQL_HOST=mysql \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=secret \
-e MYSQL_DB=todos \
node:12-alpine \
sh -c "yarn install && yarn run dev"
docker logs bf7d9f6ca2b5
docker exec -it 9b42f7ad8146 mysql -p todos
docker-compose version
docker scan getting-started
docker image history getting-started
docker image history --no-trunc getting-started
References:
Docker ARG, ENV and .env - a Complete Guide
==
Very detailed Article! it was very helpful for me to understand docker containers and creating containers for my clients work.
ReplyDelete97D1F1CC
ReplyDeleteBitlis
Çanakkale
Muş
Kırıkkale
Ordu
Manisa
Malatya
Muğla
Balıkesir
D4BAAA7C
ReplyDeleteCanik
Araban
Saray
Cizre
Merzifon
Bornova
Ortaca
Menemen
Kaş
61DE4AFD
ReplyDeleteGölcük
Demetevler
Bahçelievler
Kemalpaşa
Gemlik
Ezine
Mudanya
Artuklu
Fethiye