Если вы новичок в Docker и только начали изучать его, следуя различным учебникам, вы можете встретить такие термины, как запуск контейнера Docker, старт контейнера Docker или создание контейнера Docker.
Этих терминов достаточно, чтобы запутать начинающего докера, потому что все три команды Docker кажутся похожими.
На самом деле, особенно трудно определить разницу между запуском и стартом Docker.
Разве запуск контейнера не совпадает с его стартом? На самом деле, нет.
Позвольте нам объяснить это вам.
Разница между Run, Start и Create в Docker
Вот что делают эти команды:
Команда Docker create создает новый новый контейнер из образа Docker. Тем не менее, он не запускается сразу.
Команда start Docker запустит любой остановленный контейнер. Если вы использовали команду docker create для создания контейнера, вы можете запустить его с помощью этой команды.
Команда run Docker представляет собой комбинацию create и start, поскольку она создает новый контейнер и запускает его немедленно. Фактически, команда docker run может даже извлечь образ из Docker Hub, если она не находит упомянутый образ в вашей системе.
Давайте рассмотрим это на примерах, чтобы вам было понятнее.
Посмотрим на примеры
Убедитесь, что вы установили Docker, если хотите следовать примерам.
Допустим, вы загружаете образ Ubuntu из Docker Hub с помощью команды docker pull ubuntu.
Вы можете увидеть все доступные образы Docker в вашей системе. У нас есть только Ubuntu в этом примере (чтобы избежать путаницы):
andreyex@destroyer:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 775349758637 5 weeks ago 64.2MB
Теперь создайте новый контейнер Docker с именем container-1 с помощью команды docker create :
andreyex@destroyer:~$ docker create --name container-1 ubuntu 2d9a8c190e6c9b3cbbc032a87762bfbc92f1dc0dd30abbe9bdb3ed7e74a6480f
Как вы можете видеть, команда создала новый контейнер. Если вы попытаетесь увидеть все запущенные container-1, вы не увидите контейнер, потому что, хотя он был создан, он никогда не запускался.
andreyex@destroyer:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Если вы проверите все контейнеры, независимо от того, запущены они или нет, вы увидите, что container-1 имеет статус Created:
andreyex@destroyer:~$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2d9a8c190e6c ubuntu "/bin/bash" 18 seconds ago Created container-1
Теперь давайте используем команду docker run для создания и запуска контейнера с именем container-2:
andreyex@destroyer:~$ docker run -it -d --name container-2 ubuntu bash 13dc0f4226dc8d9d86e41d927c5616654d8263da2cc8c667aaa5b4dbd7f7e9b3
Вы можете видеть, что container-2 работает, так как он имеет статус Up:
andreyex@destroyer:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 13dc0f4226dc ubuntu "bash" About a minute ago Up About a minute container-2
Давайте остановим этот работающий контейнер:
andreyex@destroyer:~$ docker stop container-2 container-2 andreyex@destroyer:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES andreyex@destroyer:~$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 13dc0f4226dc ubuntu "bash" 2 minutes ago Exited (0) 28 seconds ago container-2 2d9a8c190e6c ubuntu "/bin/bash" 3 minutes ago Created container-1
Теперь, когда у нас есть остановленный контейнер, вы можете запустить его снова с помощью команды docker start:
andreyex@destroyer:~$ docker start container-2 container-2 andreyex@destroyer:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 13dc0f4226dc ubuntu "bash" 2 minutes ago Up 2 seconds container-2
Но что происходит с container-1, который был создан с помощью команды docker create? Вы можете запустить этот контейнер с помощью команды docker start, а затем использовать docker exec для запуска чего-то определенного с ним.
Мы надеемся, что эта статья дала вам лучшее понимание run docker, start docker и команды docker create. Если у вас есть вопросы или предложения, пожалуйста, оставьте комментарий ниже.