Основные команды Docker
Создать свой репо для контейнеров (1 приватный бесплатно + нет ограничений для публичных контейнеров)
https://hub.docker.com
$ docker -v
Docker version 1.9.1, build a34a1d5
$ docker version
Client:
Version: 1.9.1
API version: 1.21
Go version: go1.4.2
Git commit: a34a1d5
Built: Fri Nov 20 13:12:04 UTC 2015
OS/Arch: linux/amd64
Server:
Version: 1.9.1
API version: 1.21
Go version: go1.4.2
Git commit: a34a1d5
Built: Fri Nov 20 13:12:04 UTC 2015
OS/Arch: linux/amd64
$ docker info
Containers: 3
Images: 87
Server Version: 1.9.1
Storage Driver: aufs
Root Dir: /mnt/dsk1/docker/aufs
Backing Filesystem: extfs
Dirs: 93
Dirperm1 Supported: true
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.19.0-42-generic
Operating System: Ubuntu 14.04.3 LTS
CPUs: 8
Total Memory: 23.54 GiB
Name: workstation
ID: O6JG:4MOF:M526:3PJV:FQHZ:3ERJ:P7KW:U3VN:D6AZ:C46E:SSH3:IADV
Username: marley
Registry: https://index.docker.io/v1/
WARNING: No swap limit support
// поискать в репо что-нибуть
$ docker search centos
// взять из репо последнюю версию debian
$ docker pull debian
// взять все версии debian
$ docker pull -a debian
// получить список скачанных images
$ docker images
$ docker images --tree
$ docker images debian
Переименовать image
// Переименовываю имидж. Чтобы контейнер на hub.docker.com начинался с моего username
$ docker tag centos6/rais:v01 marley/centos6-for-jekyll:latest
// Запустить контейнер и отправить 30 пингов до гугла
$ docker run -d ubuntu /bin/bash -c "ping 8.8.8.8 -c 30"
// Запустить интерактивно контейнер и в контейнере shell
$ docker run -i -t centos:centos6 /bin/bash
-d - Detached mode (зупустится в фоне)
$ docker run -i -t -d debian
Задать имя, иначе она будет выбрано самостоятельно
$ docker run -i -t -d --name myDebianServ debian
// Контенеры и имиджи хранятся здесь
$ cat /var/lib/docker/aufs/diff/<container_id>
$ ls -l /var/lib/docker/containers
$ ls -l /var/lib/docker/containers | wc -l
// показать активные контейнеры
$ docker ps
// показать все контейнеры в том числе остановленные
$ docker ps -a
// Последний стартовавший контейнер.
$ docker ps -l
// Старт стоп
$ docker start <container_id>
$ docker stop <container_id>
$ docker kill <container_id>
$ docker restart <container_id>
// Сколько жрет ресурсов
$ docker stats <container_id>
$ docker top <container_id> -ef
// Отключиться от контейнера docker без его остановки:
CTRL + P + Q
// Подключиться
$ docker attach <container_id>
// Подключиться еще одной сессией к контейнеру
$ docker exec -it <container_id> bash
$ docker top <container_id>
$ docker inspect <container_id>
$ docker logs <container_id>
// Показать какие порты локальной машины соответствуют портам контейнера
$ docker port <container_id>
Пример
$ docker port my_container
1337/tcp -> 0.0.0.0:1337
3000/tcp -> 0.0.0.0:3000
8080/tcp -> 0.0.0.0:80
9000/tcp -> 0.0.0.0:9000
// узнать IP контейнера Docker
$ docker inspect --format='' containerId
Остановка и удаление
// Удалить контейнер
$ docker rm <container_id>
$ docker rm -f <container_id>
// Остановить все контейнеры:
# docker stop $(docker ps -a -q)
// Удалить все контейнеры:
# docker rm $(docker ps -a -q)
// Удалить все остановленные контейнеры:
$ docker rm $(docker ps -qa --no-trunc --filter "status=exited")
// Удалить все images:
# docker rmi $(docker images -q)
// Если Error when deleting images - image is referenced in multiple repositories:
# docker rmi -f $(docker images -q)
// Удалить неиспользуемые образы:
$ docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
Более новый способ удаления всех оъектов
$ {
docker system prune -af
docker container prune -f
docker image prune -f
docker volume prune -f
docker network prune -f
}
Системная информация
$ docker system info
Получить информацию о слоях image
$ docker history <image_name>
$ docker history --no-trunc <image_name>
Возможно, более наглядно.
https://github.com/CenturyLinkLabs/dockerfile-from-image
Хочу понять каким образом был сделан docker image у автора курса по CoreOS
$ docker pull rosskukulinski/rethinkdb:2.1.0_beta1
$ docker run -v /var/run/docker.sock:/var/run/docker.sock centurylink/dockerfile-from-image rosskukulinski/rethinkdb:2.1.0_beta1
ADD file:085531d120d9b9b09174b936e2ecac25dda1f3029cfbc24751529c0c24a8e3d0 in /
CMD ["/bin/bash"]
MAINTAINER Stuart P. Bentley <[email protected]>
RUN apt-key adv --keyserver pgp.mit.edu --recv-keys 1614552E5765227AEC39EFCFA7E00EF33A8F2399
RUN echo "deb http://download.rethinkdb.com/apt jessie main" > /etc/apt/sources.list.d/rethinkdb.list
RUN apt-get update
RUN apt-get -yqq install build-essential protobuf-compiler python libprotobuf-dev libcurl4-openssl-dev libboost-all-dev libncurses5-dev libjemalloc-dev wget
ADD tarsum+sha256:9fa9e6a402710827733f45452cb37b43a2b8d2949e9800d8937a78377d04e619 in /src/rethinkdb_2.1.0.deb
RUN dpkg -i /src/rethinkdb_2.1.0.deb
RUN apt-get -yqqf install
VOLUME [/data]
WORKDIR /data
CMD ["rethinkdb" "--bind" "all"]
EXPOSE 28015/tcp 29015/tcp 8080/tcp