img

26 самых известных команд Docker (с примерами)

21 ноября
20:00
Бесплатный вебинар
Введение в Docker
Ведущий — Филипп Игнатенко.
Руководитель центра разработки
Записаться
img
img

Docker - это система контейнеризации, которая позволяет упаковывать и запускать приложение вместе со всеми его зависимостями внутри контейнера. Когда вы работаете с Docker, вы должны знать некоторые команды. Эта статья всецело посвящена именно этому.

1. Поиск версии

Одна из первых вещей, которую вам нужно знать, это то, как найти версию Docker, установленного на вашем компьютере. 

geekflare@geekflare:/home/geekflare$ docker --version

Docker version 18.09.6, build 481bc77

2. Загрузка образа

Допустим, что вы хотите получить образ Docker из Dockerhub (репозиторий Docker). На следующем примере мы показали, как можно извлечь образ HTTP-сервера Apache.

geekflare@geekflare:/home/geekflare$ docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
f5d23c7fed46: Pull complete
b083c5fd185b: Pull complete
bf5100a89e78: Pull complete
98f47fcaa52f: Pull complete
622a9dd8cfed: Pull complete
Digest: sha256:8bd76c050761610773b484e411612a31f299dbf7273763103edbda82acd73642
Status: Downloaded newer image for httpd:latest
geekflare@geekflare:/home/geekflare$

3. Образы

Вы можете получить список всех образов Docker, загруженных в систему, с такой информацией, как тег/идентификатор образа/размер и т.д.

geekflare@geekflare:/home/geekflare$ docker images
REPOSITORY          TAG            IMAGE ID        CREATED             SIZE
httpd              latest        ee39f68eb241     2 days ago          154MB
hello-world        latest        fce289e99eb9    6 months ago        1.84kB
sequenceiq          2.7          789fa0a3b911    4 years ago         1.76GB
/hadoop-docker

4. Запуск

Вы можете запустить образ Docker, на который вы ссылаетесь в команде. Эта команда создаст контейнер Docker, в которой запуститься HTTP-сервер Apache.

geekflare@geekflare:/home/geekflare$ docker run -it -d httpd
09ca6feb6efc0578951a3e2557ed5855b2edda39a795d9703eb54d975930fe6e

5. Какие контейнеры запущены?

Команда ps перечисляет все контейнеры Docker, которые запущены, со всеми сопутствующими сведениями о них. 

geekflare@geekflare:/home/geekflare$ docker ps
CONTAINER ID     IMAGE           COMMAND           CREATED         
09ca6feb6efc     httpd     "httpd-foreground"   36 seconds ago      
STATUS              PORTS            NAMES
Up 33 seconds       80/tcp       suspicious_bell

Как вы можете видеть, в этом контейнере Docker запущен сервер Apache.

6. ps –a

Перечисляет все контейнеры Docker, которые были запушены, из которых вы вышли или которые вы остановили, со всеми сопутствующими сведениями о них.

geekflare@geekflare:/home/geekflare$ docker ps -a
CONTAINER ID        IMAGE                                COMMAND                  
09ca6feb6efc        httpd                            "httpd-foreground"  
2f6fb3381078        sequenceiq/hadoop-docker:2.7.0   "/etc/bootstrap.sh -d"   
9f397feb3a46        sequenceiq/hadoop-docker:2.7.0   "/etc/bootstrap.sh -…"   
9b6343d3b5a0        hello-world                      "/hello"                 
CREATED           STATUS                     PORTS              NAMES      
51 seconds ago    Up 49 seconds              80/tcp         suspicious_bell
2 weeks ago       Exited (137) 9 days                       quizzical_raman   
2 weeks ago       Exited (255) 2 weeks ago   2122/tcp,   determined_ritchie                                                                                                                                                                                                                                                                                                                                                                                  
8030-8033/tcp, 
8040/tcp, 
8042/tcp, 
8088/tcp, 
19888/tcp, 
49707/tcp, 
50010/tcp, 
50020/tcp, 
50070/tcp, 
50075/tcp, 
50090/tcp   
2 weeks ago       Exited (0) 2 weeks ago                     peaceful_mclean                                                                                                                          

7. exec

Вы можете получить доступ к контейнеру Docker и запустить команды внутри этого контейнера. В данном примере я пытаюсь получить доступ к контейнеру сервера Apache.

Для того, чтобы выйти из контейнера, введите exit и нажмите Enter.

geekflare@geekflare:/home/geekflare$ docker exec -it 09ca6feb6efc bash
root@09ca6feb6efc:/usr/local/apache2# ls
bin  build  cgi-bin  conf  error  htdocs  icons  include  logs                modules
root@09ca6feb6efc:/usr/local/apache2#

8. Удаление контейнера

Вы можете удалить контейнер Docker, указав идентификатор контейнера в команде.

geekflare@geekflare:/home/geekflare$ docker rm 9b6343d3b5a0
9b6343d3b5a0
Запустите следующую команду для того, чтобы проверить, был ли удален контейнер.
geekflare@geekflare:/home/geekflare$ docker ps -a
CONTAINER ID        IMAGE                            COMMAND                  
09ca6feb6efc        httpd                            "httpd-foreground"       
2f6fb3381078        sequenceiq/hadoop-docker:2.7.0   "/etc/bootstrap.sh -d"   
9f397feb3a46        sequenceiq/hadoop-docker:2.7.0   "/etc/bootstrap.sh -…"   
CREATED              STATUS                    PORTS         NAMES    
About a minute ago   Up About a minute         80/tcp        suspicious_bell    
2 weeks ago          Exited (137) 9 days ago                 quizzical_raman   
2 weeks ago          Exited (255) 2 weeks ago   2122/tcp, determined_ritchie                                                                                                                                                                                                                                                                                                                                                                           
8030-8033/tcp, 
8040/tcp, 
8042/tcp, 
8088/tcp, 
19888/tcp, 
49707/tcp, 
50010/tcp, 
50020/tcp, 
50070/tcp, 
50075/tcp, 
50090/tcp   

9. Удаление образа

Вы можете удалить образ Docker, указав идентификатор образа в команде. 

geekflare@geekflare:/home/geekflare$ docker rmi fce289e99eb9
Untagged: hello-world:latest
Untagged: hello-world@sha256:41a65640635299bab090f783209c1e3a3f11934cf7756b09cb2f1e02147c6ed8
Deleted: sha256:fce289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e
Deleted: sha256:af0b15c8625bb1938f1d7b17081031f649fd14e6b233688eea3c5483994a66a3
geekflare@geekflare:/home/geekflare$

10. Перезапуск контейнера

Вы можете перезапустить контейнер Docker, указав идентификатор контейнера в команде.

geekflare@geekflare:/home/geekflare$ docker restart 09ca6feb6efc
09ca6feb6efc

Запустите следующую команду и проверьте параметр STATUS для того, чтобы убедиться, что контейнер был запущен должным образом.

geekflare@geekflare:/home/geekflare$ docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             09ca6feb6efc        httpd               "httpd-foreground"   6 minutes ago       
STATUS              PORTS               NAMES
Up 9 seconds        80/tcp              suspicious_bell

11. Остановка контейнера 

Вы можете остановить контейнер Docker, указав идентификатор контейнера в команде.

geekflare@geekflare:/home/geekflare$ docker stop 09ca6feb6efc
09ca6feb6efc

Запустите следующую команду для того, чтобы проверить, контейнер все еще работает или был остановлен. 

geekflare@geekflare:/home/geekflare$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

12. Запуск контейнера

Эта команда запускает контейнер Docker, идентификатор которого был указан в ней.

geekflare@geekflare:/home/geekflare$ docker start 09ca6feb6efc
09ca6feb6efc

Запустите следующую команду для того, чтобы проверить, запустился ли контейнер. 

geekflare@geekflare:/home/geekflare$ docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             
09ca6feb6efc        httpd               "httpd-foreground"   8 minutes ago       
STATUS              PORTS               NAMES
Up 3 seconds        80/tcp              suspicious_bell

13. Уничтожение контейнера

Эта команда моментально прекращает работу контейнера, а команда stop останавливает работу контейнера корректно – в этом и есть разница между командами kill и stop.

geekflare@geekflare:/home/geekflare$ docker kill 09ca6feb6efc
09ca6feb6efc

Запустите следующую команды для того, чтобы убедиться, что контейнер был уничтожен.

geekflare@geekflare:/home/geekflare$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

14. Фиксация изменений

Вы можете сохранить новый образ Docker в локальной системе, указав идентификатор контейнера в команде. В примере ниже geekflare – это имя пользователя, а httpd_image – это имя образа. 

geekflare@geekflare:/home/geekflare$ docker commit 09ca6feb6efc geekflare/httpd_image
sha256:d1933506f4c1686ab1a1ec601b1a03a17b41decbc21d8acd893db090a09bb31c

15. Вход в систему

Вы можете войти в систему Dockerhub. Перед входом в систему у вас запросят учетные данные.

geekflare@geekflare:/home/geekflare$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: geekflare
Password:
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded

16. Добавление образа

Вы можете загрузить образ Docker в Dockerhub, указав имя образа в команде.

geekflare@geekflare:/home/geekflare$ docker push geekflare/httpd_image
The push refers to repository [docker.io/geekflare/httpd_image]
734d9104a6a2: Pushed
635721fc6973: Mounted from library/httpd
bea448567d6c: Mounted from library/httpd
bfaa5f9c3b51: Mounted from library/httpd
9d542ac296cc: Mounted from library/httpd
d8a33133e477: Mounted from library/httpd
latest: digest: sha256:3904662761df9d76ef04ddfa5cfab764b85e3eedaf10071cfbe2bf77254679ac size: 1574

17. Сеть Docker

С помощью следующей команды вы можете получить всю сетевую информацию в рамках кластера.

geekflare@geekflare:/home/geekflare$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
85083e766f04        bridge              bridge              local
f51d1f3379e0        host                host                local
5e5d9a192c00        none                null                local

Кроме того, есть несколько других команд, связанных с сетью Docker.

geekflare@geekflare:/home/geekflare$ docker network
Usage:  docker network COMMAND
Manage networks
Commands:
connect     Connect a container to a network
create      Create a network
disconnect  Disconnect a container from a network
inspect     Display detailed information on one or more networks
ls          List networks
prune       Remove all unused networks
rm          Remove one or more networks
Run 'docker network COMMAND --help' for more information on a command.

18. Информация о Docker

Вы можете получить подробную информацию о Docker, который установлен в вашей системе, в том числе версию ядра, количество контейнеров и образов и т.д.

geekflare@geekflare:/home/geekflare$ docker info
Containers: 3
Running: 1
Paused: 0
Stopped: 2
Images: 3
Server Version: 18.09.6
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: bb71b10fd8f58240ca47fbb579b9d1028eea7c84
runc version: 2b18fe1d885ee5083ef9f0838fee39b62d653e30
init version: fec3683
Security Options:
apparmor
seccomp
Profile: default
Kernel Version: 4.18.0-25-generic
Operating System: Ubuntu 18.10
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 4.982GiB
Name: geekflare
ID: RBCP:YGAP:QG6H:B6XH:JCT2:DTI5:AYJA:M44Z:ETRP:6TO6:OPAY:KLNJ
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Username: geekflare
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Product License: Community Engine

19. Копирование файла

Вы можете скопировать файл из контейнера Docker в локальную систему. 

В данном примере я копирую файл http.pid, который расположен внутри контейнера с идентификатором 09ca6feb6efc, в /home/geekflare/.

geekflare@geekflare:/home/geekflare$ sudo docker cp 09ca6feb6efc:/usr/local/apache2/logs/httpd.pid /home/geekflare/
[sudo] password for geekflare:

Запустите следующую команду для того, чтобы убедиться, что файл был скопирован.

geekflare@geekflare:/home/geekflare$ ls
Desktop  Documents  example  examples.desktop  httpd.pid  nginx_new.yml  nginx.yml

20. Проверка истории

Можно просмотреть историю образа Docker, указав его имя в команде.

geekflare@geekflare:/home/geekflare$ docker history httpd
IMAGE               CREATED             CREATED BY                  
ee39f68eb241        2 days ago          /bin/sh -c #(nop)  CMD ["httpd-
foreground"]    
<missing>           2 days ago          /bin/sh -c #(nop)  EXPOSE 80                   
<missing>           2 days ago          /bin/sh -c #(nop) COPY 
file:c432ff61c4993ecd…   
<missing>           4 days ago          /bin/sh -c set -eux;
savedAptMark="$(apt-m… 
<missing>           4 days ago          /bin/sh -c #(nop)  ENV HTTPD_PATCHES=          
<missing>           4 days ago          /bin/sh -c #(nop)  ENV 
HTTPD_SHA256=b4ca9d05… 
<missing>           4 days ago          /bin/sh -c #(nop)  ENV
HTTPD_VERSION=2.4.39   
<missing>           4 days ago          /bin/sh -c set -eux;  apt-get update;
apt-g…
<missing>           4 days ago          /bin/sh -c #(nop) WORKDIR
/usr/local/apache2
<missing>           4 days ago          /bin/sh -c mkdir -p "$HTTPD_PREFIX"
&& chow…
<missing>           4 days ago          /bin/sh -c #(nop)  ENV
PATH=/usr/local/apach…
<missing>           4 days ago          /bin/sh -c #(nop)  ENV
HTTPD_PREFIX=/usr/loc…
<missing>           5 days ago          /bin/sh -c #(nop)  CMD ["bash"]                
<missing>           5 days ago          /bin/sh -c #(nop) ADD
file:71ac26257198ecf6a…
SIZE      COMMENT       
0B
0B
138B
49.1B
0B
0B
0B
35.4B
0B
0B
0B
0B
0B
69.2B                       

21. Проверка журналов

Можно просмотреть журналы контейнера Docker, указав идентификатор контейнера в команде.

geekflare@geekflare:/home/geekflare$ docker logs 09ca6feb6efc
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[Mon Jul 15 14:01:55.400472 2019] [mpm_event:notice] [pid 1:tid 140299791516800] AH00489: Apache/2.4.39 (Unix) configured -- resuming normal operations
[Mon Jul 15 14:01:55.400615 2019] [core:notice] [pid 1:tid 140299791516800] AH00094: Command line: 'httpd -D FOREGROUND'
[Mon Jul 15 14:08:36.798229 2019] [mpm_event:notice] [pid 1:tid 140299791516800] AH00491: caught SIGTERM, shutting down
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[Mon Jul 15 14:08:38.259870 2019] [mpm_event:notice] [pid 1:tid 139974087980160] AH00489: Apache/2.4.39 (Unix) configured -- resuming normal operations
[Mon Jul 15 14:08:38.260007 2019] [core:notice] [pid 1:tid 139974087980160] AH00094: Command line: 'httpd -D FOREGROUND'
[Mon Jul 15 14:09:01.540647 2019] [mpm_event:notice] [pid 1:tid 139974087980160] AH00491: caught SIGTERM, shutting down
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[Mon Jul 15 14:10:43.782606 2019] [mpm_event:notice] [pid 1:tid 140281554879616] AH00489: Apache/2.4.39 (Unix) configured -- resuming normal operations
[Mon Jul 15 14:10:43.782737 2019] [core:notice] [pid 1:tid 140281554879616] AH00094: Command line: 'httpd -D FOREGROUND'
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[Mon Jul 15 14:14:08.270906 2019] [mpm_event:notice] [pid 1:tid 140595254346880] AH00489: Apache/2.4.39 (Unix) configured -- resuming normal operations
[Mon Jul 15 14:14:08.272628 2019] [core:notice] [pid 1:tid 140595254346880] AH00094: Command line: 'httpd -D FOREGROUND'

22. Поиск образа

Вы можете найти образ Docker в Dockerhub, указав его имя в команде.

geekflare@geekflare:/home/geekflare$ docker search hadoop
NAME                             DESCRIPTION                                     
sequenceiq/hadoop-docker         An easy way to try Hadoop                       
uhopper/hadoop                   Base Hadoop image with dynamic
configuration…
harisekhon/hadoop                Apache Hadoop (HDFS + Yarn, tags 2.2 - 2.8)     
bde2020/hadoop-namenode          Hadoop namenode of a hadoop cluster             
kiwenlau/hadoop                  Run Hadoop Cluster in Docker Containers 
izone/hadoop                     Hadoop 2.8.5 Ecosystem fully distributed,
Ju…
uhopper/hadoop-namenode          Hadoop namenode                                 
bde2020/hadoop-datanode          Hadoop datanode of a hadoop cluster             
singularities/hadoop             Apache Hadoop                                   
uhopper/hadoop-datanode          Hadoop datanode                                 
harisekhon/hadoop-dev            Apache Hadoop (HDFS + Yarn) + Dev Tools + 
Gi…
STARS               OFFICIAL            AUTOMATED
611                                     [OK]
98                                      [OK]
54                                      [OK]
22                                      [OK]
19                                      [OK]
14                                      [OK]
9                                       [OK]
9                                       [OK]
8                                       [OK]
7                                       [OK]
6                                       [OK]

23. Обновление конфигурации

Вы можете обновить конфигурацию контейнера. Ниже представлены все параметры обновления.

geekflare@geekflare:/home/geekflare$ docker update --help
Usage:  docker update [OPTIONS] CONTAINER [CONTAINER...]
Update configuration of one or more containers
Options:
--blkio-weight uint16        Block IO (relative weight), between 10 and 1000, or 0 to disable
(default 0)
--cpu-period int             Limit CPU CFS (Completely Fair Scheduler) period
--cpu-quota int              Limit CPU CFS (Completely Fair Scheduler) quota
--cpu-rt-period int          Limit the CPU real-time period in microseconds
--cpu-rt-runtime int         Limit the CPU real-time runtime in microseconds
-c, --cpu-shares int             CPU shares (relative weight)
--cpus decimal               Number of CPUs
--cpuset-cpus string         CPUs in which to allow execution (0-3, 0,1)
--cpuset-mems string         MEMs in which to allow execution (0-3, 0,1)
--kernel-memory bytes        Kernel memory limit
-m, --memory bytes               Memory limit
--memory-reservation bytes   Memory soft limit
--memory-swap bytes          Swap limit equal to memory plus swap: '-1' to enable unlimited swap
--restart string             Restart policy to apply when a container exits

Запустите следующую команду для того, чтобы обновить конфигурацию ЦП контейнера Docker, указав его идентификатор в команде.

geekflare@geekflare:/home/geekflare$ docker update -c 1 2f6fb3381078
2f6fb3381078

24. Создание тома

Вы можете создать том, который контейнер Docker будет использовать в качестве хранилища данных.

geekflare@geekflare:/home/geekflare$ docker volume create
7e7bc886f69bb24dbdbf19402e31102a25db91bb29c56cca3ea8b0c611fd9ad0

Запустите следующую команду для того, чтобы убедиться, что том был создан.

geekflare@geekflare:/home/geekflare$ docker volume ls
DRIVER      VOLUME NAME
local       7e7bc886f69bb24dbdbf19402e31102a25db91bb29c56cca3ea8b0c611fd9ad0

25. Установка плагина

Вы можете установить плагин Docker vieux/sshfs, установив параметр среды отладки на 1.

geekflare@geekflare:/home/geekflare$ docker plugin install vieux/sshfs DEBUG=1
Plugin "vieux/sshfs" is requesting the following privileges:
- network: [host]
- mount: [/var/lib/docker/plugins/]
- mount: []
- device: [/dev/fuse]
- capabilities: [CAP_SYS_ADMIN]
Do you grant the above permissions? [y/N] y
latest: Pulling from vieux/sshfs
52d435ada6a4: Download complete
Digest: sha256:1d3c3e42c12138da5ef7873b97f7f32cf99fb6edde75fa4f0bcf9ed277855811
Status: Downloaded newer image for vieux/sshfs:latest
Installed plugin vieux/sshfs
Run the below command to list the docker plugins.
geekflare@geekflare:/home/geekflare$ docker plugin ls
ID                  NAME                 DESCRIPTION               ENABLED
2a32d1fb95af        vieux/sshfs:latest   sshFS plugin for Docker   true

26. Выход из системы

Вы можете выйти из системы Dockerhub.

geekflare@geekflare:/home/geekflare$ docker logout
Removing login credentials for https://index.docker.io/v1/

Заключение

Надеюсь, что в настоящему моменту вы достаточно хорошо поняли, что из себя представляют команды Docker. Испробуйте эти команды в своей среде разработки или тестовой среде для того, чтобы вы могли отточить свои навыки и лучше понять, как они работают. 

Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
DevOps
Скидка 25%
DevOps-инженер с нуля
Научитесь использовать инструменты и методы DevOps для автоматизации тестирования, сборки и развертывания кода, управления инфраструктурой и ускорения процесса доставки продуктов в продакшн. Станьте желанным специалистом в IT-индустрии и претендуйте на работу с высокой заработной платой.
Получи бесплатный
вводный урок!
Пожалуйста, укажите корректный e-mail
отправили вводный урок на твой e-mail!
Получи все материалы в telegram и ускорь обучение!
img
Еще по теме:
img
Git Flow - это специальная система ветвления для Git. Она помогает команде лучше контролировать и добавлять различные версии про
img
Docker — популярная платформа виртуализации на уровне ОС. Она поставляет приложения в пакетах (контейнерах), которые, представля
img
Хуки в Git — это bash-скрипты, которые запускаются до или после команд Git, например, коммитов и пушей. Они позволяют автоматизи
img
  Nomad и Kubernetes – это две самые популярные платформы оркестровки, предназначенные для оркестровки динамических рабочих нагр
img
  Давайте узнаем о новом Ops-течении – GitOps! DevOps поспособствовал цифровизации многих компаний. Речь идет о командах разрабо
img
  Канареечное (canary) развёртывание – это метод разработки и развертывания программного обеспечения, который позволяет выпускат
21 ноября
20:00
Бесплатный вебинар
Введение в Docker