Cheat Sheet
Docker useful commands.
Container management
Avoid container termination after executing CMD or Entrypoint
If you have a Dockerfile similar to this one:
FROM nginx
COPY my-custom-script.sh /
ENTRYPOINT ["/my-custom-script.sh"]
# OR
# CMD /my-custom-script.sh
And after my-custom-script.sh exits, docker stops the container, you can fix the problem as follows.
Fist, make sure you are using COPY instead of ADD in your Dockerfile to copy your script.
Edit my-custom-script.sh and add the following line at the end:
...
# Run all command line arguments
exec "$@";
Then make sure to use a command when running your container, for example /bin/bash
docker run \
-tid \
-p 8080:8080 \
--name test \
my-custom-image \
/bin/bash
Bash TTY connect
docker exec -ti CONTAINER-NAME-HERE /bin/bash
Run container
docker run \
-tid \
--name test \
-p 8080:8080 \
-e MY_VAR='MY-VALUE' \
nginx
Run docker-in-docker
docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock docker
Start container on boot
Run your container with --restart=always
flag.
Or add the the flag to an existing container:
docker update --restart=always <container>
CLI tricks
Attach
docker attach CONTAINER-NAME
Image management
Create image from container
docker commit CONTAINER-NAME NEW-IMAGE-NAME
Create image from Dockerfile
docker build -t NEW-IMAGE-NAME .
Create image from AWS AMI
Get your AMI snapshot ID
Access your AWS console and go to EC2, AMIs. Find your AMI and check its Block Devices, for example:
/dev/sda1=snap-081e01478359d5bec:30:true:gp2
snap-081e01478359d5bec is the AMI snapshot ID, which will be used as the source for a new device.
Create a new volume from your AMI snapshot ID
In your AWS console go to Snapshots. Filter using your snapshot ID, for example: snap- 081e01478359d5bec.
Right click on it, then select Create Volume. Add a tag key Name and input your new volume’s name.
Attach your new volume to an instance
Launch a new instance or use an existing one.
Keep in mind the instance must have enough space to store a temporary tar le from your AMI volume.
In your AWS console go to Volumes. Filter by your Volume Name (you created previously).
Right click on it, then select Attach Volume.
Select your instance and choose a Device, for example: /dev/sdf
Click on Attach.
Mount your new volume
SSH connect to your instance and mount the volume you just created.
mount /dev/xvdf1 /mnt
Install Docker
Install Docker in your instance.
Create Docker image
SSH connect to your instance and mount the volume you just created.
tar -c -C /mnt/ . | docker import - YOUR-IMAGE-NAME
This command might take a while depending on the size of your volume.
Testing
List your docker images. Find YOUR-IMAGE-NAME and get its Image ID.
Run a container from your new image.
docker run -tid dd5935d36306 /bin/bash
Cleanup
If everything is OK you can umount your volume:
umount /mnt
Then go to your AWS Console, Volumes. Find the volume you created previously, right click on it then select Detach Volume. Then right click on it again then select Delete Volume.
References
https://stackoverflow.com/a/35124911
Cleanup dangling images
docker rmi -f $(docker images -f "dangling=true" -q)
Or.. the docker system prune
command will remove all stopped containers, all dangling images, and all unused networks:
docker system prune
Inspect
List run command used
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
assaflavie/runlike YOUR-CONTAINER
Show mounted volumes
docker inspect -f '{{ .Mounts }}' containerid
Last updated