Docker Notes
- Links
- Install on Mac/OSx
- Removing containers and images and cleaning up
- Troubleshooting
- AWS Setup and Installation
- Quickstart
- Running Containers
- Connect to a running Container
- Disconnect
- Map local drive to volume
- Networking
- X11 Forwarding OSX
- Images
Links
Visualizing Docker Containers and Images
Install on Mac/OSx
Download and install the latest Docker.dmg
.
Removing containers and images and cleaning up
# Cleanup volumes
docker volume ls
docker volume ls -qf dangling=true
docker volume rm $(docker volume ls -qf dangling=true)
# Delete all containers
docker rm $(docker ps -a -q)
# Delete all images
docker rmi $(docker images -q)
Troubleshooting
- no space left on device
To fix, I removed the following file, and restarted docker
ls -lah ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
AWS Setup and Installation
The "host" machine needs to have the docker daemon running. The docker-machine
tool can be used to manage docker hosts. Here are the steps I use to create a new docker host machine in Amazon AWS.
Before creating a machine, you need to create a AWS VPC and a subnet.
Then, make sure your AWS credentials are available
export AWS_ACCESS_KEY_ID=<your id>
export AWS_SECRET_ACCESS_KEY=<your secret>
Use the following to create the machine.
NOTE: there's a issue where you must use security group name rather than id.
NOTE: also, I had to restart the machine once after creating it in order to connect to the docker daemon.
docker-machine create \
--driver amazonec2 \
--amazonec2-access-key $AWS_ACCESS_KEY_ID \
--amazonec2-secret-key $AWS_SECRET_ACCESS_KEY \
--amazonec2-vpc-id <your-vpc-id> \
--amazonec2-subnet-id <your-subnet-id> \
--amazonec2-region <region, ex: us-east-1> \
--amazonec2-zone <zone, for example: a,b,c,d> \
--amazonec2-security-group <your security group name> \
--amazonec2-iam-instance-profile docker-role \
<whatever name you want>
Quickstart
A Dockerfile
is a specification for an image. Containers
are instances of images.
The first step is to get the image you need. You can either get pre-built images using the pull
command. Or use the build
command to build custom images based on a Dockerfile
.
Once you have an image, use the run
command to start a new container.
Running Containers
To interact with a command line program (such as a shell or repl), use docker run -i -t <etc>
. For example, here's the command I used to start a Haskell Hugs environment. This maps local directory to same directory on the server:
docker run -i -t -v /Users/dparoulek/code:/Users/dparoulek/code
erasmas/hugs98 hugs
Here's another example of running minecraft server
docker run -d -p 25565:25565 --name minecraft kitematic/minecraft
Connect to a running Container
Here's a way to interactively connect to running container:
docker exec -it <container name> bash
Disconnect
To disconnect from interactive container, use CTRL-P CTRL-Q
.
Map local drive to volume
NOTE: Use absolute paths. I saw strangeness when I tried `-v .:/remote`
Here's how to move files from the container to the host (remember, when using aws, the host is the aws ec2 instance and NOT your local laptop):
docker run -rm --volumes-from survival -v /backup:/backup debian:wheezy tar cvf /backup/world.tar /data/world
Then, you can use docker-machine to get the file to your laptop:
scp docker-minecraft:/backup/world.tar .
Networking
Docker for Mac is different than docker-machine
. I think Docker for Mac is basically a user-friendlier version of docker-machine
. As of version 1.13.0, you can still use docker-machine
.
When using Docker for Mac, the ip address is localhost as described here in Docker For Mac Networking.
X11 Forwarding OSX
I don't understand this 100%, but in order to get x11 forwarding working between docker and OSX:
- Install
socat
. I usedbrew install socat
- Install and Start XQuartz. I downloaded the dmg and installed.
- Expose XQuartz socket file on TCP port 6000.
socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
- Run
docker run -ti --rm -e DISPLAY=192.168.99.1:0 firefox