-
-
Save itanaskovic/c97f5e6d289afa7c5ba1162aba541508 to your computer and use it in GitHub Desktop.
Some docker examples
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
### Commit, clone a container | |
To 'clone' a container, you'll have to make an image of that container first, you can do so | |
by "committing" the container. Docker will (by default) *pause* all processes running in the | |
container during commit to preserve data-consistency. | |
For example; | |
docker commit --message="Snapshot of my container" my_container my_container_snapshot:yymmdd | |
Commit `my_container` as an image called `my_container_snapshot`, and tag it `yymmdd`. The "message" is optional and allows adding some extra info to the image. | |
$ docker images | |
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE | |
my_container_snapshot yymmdd 9496ac4a89a6 5 seconds ago 85.1 MB | |
To view the "message" we added earlier, inspect the image using `docker inspect [imagename]`, and to get *just* the message provide a `--filter` option. In this case: | |
$ docker inspect --format="{{.Comment}}" my_container_snapshot:yymmdd | |
Snapshot of my container | |
You can start a new container from this snapshot; | |
docker run --name=my_clone my_container_snapshot:yymmdd | |
This will start a new container called "my_clone", using the snapshot we created earlier. | |
### Volumes | |
When dealing with database containers, most containers use a `volume` for data storage. Data in volumes | |
is not considered part of the containers filesystem and will therefore **not** be included when committing a | |
container (nor will it be when using `docker export` or `docker save`). | |
To check if a container uses volumes and where they are located, use `docker inspect`. To get just the information about 'volumes', we're providing a `--filter`; | |
$ docker inspect --format="{{json .Volumes}}" my_container | |
{"/var/lib/mysql":"/var/lib/docker/vfs/dir/8274456ae711beb73de3ba0d969931c260a1bf063088f436fb08eb79b546d21d"} | |
This container, running mysql, is using a volume for `/var/lib/mysql`, and is stored inside `/var/lib/docker/vfs/dir/8274456ae711beb73de3ba0d969931c260a1bf063088f436fb08eb79b546d21d` on the host filesystem. | |
### Backing up volume data | |
To export data inside a volume, use a utility container, for example, to backup the /var/lib/mysql data directory of the example above, do something like this; | |
docker run --rm --volumes-from=my_container debian tar cvf - /var/lib/mysql | gzip > mysql-data.tar.gz | |
This instruction will; | |
- start a debian container | |
- connect to the *volumes* of `my_container` and mount those volumes at the *same* location as inside `my_container` (ie, `/var/lib/mysql`) | |
- Tar + Gzip the `/var/lib/mysql` directory to a file called `mysql-data.tar.gz` in the current directory on the host | |
- Perform harakiri (it's a "self destructing" container; setting `--rm` will destroy the container after the command has completed) | |
### Export a database | |
To *export* a database, again use a utility container containing the tool to backup your data, for example, to backup | |
a mysql database; | |
docker run --rm --link=my_container:db mysql:latest mysqldump --host=db -u root my_database > my_database_dump.sql | |
This instruction will; | |
- start a mysql container (but doesn't start the mysql *server*, because we're providing a different command) | |
- establish a link to `my_container` and name that link `db` | |
- add an entry to `/etc/hosts` inside the container for the `db` link. This enables us to connect to the linked container by using `db` as hostname. | |
- do a `mysqldump` of the database in the *linked* container (using `db` as hostname) | |
- export the dump to a file called `my_database_dump.sql` in the current directory | |
- delete the container after the command has completed. | |
### Import the database in a new container | |
[write] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment