Чем отличаются команды docker run и docker create

Ответ

Команды docker create и docker run обе создают контейнер из образа, но отличаются моментом его запуска.

  • docker create: Только создает файловую систему контейнера и подготавливает его к запуску. Контейнер остается в статусе Created и не выполняет никаких процессов.

    # Создаем контейнер, но не запускаем его
    $ docker create --name my-nginx nginx
    
    # Проверяем статус (статус будет "Created")
    $ docker ps -a
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS    PORTS     NAMES
    c1a2b3c4d5e6   nginx     "/docker-entrypoint.…"   5 seconds ago    Created             my-nginx
  • docker run: Это составная команда, которая выполняет docker create и сразу же docker start. Она создает и запускает контейнер.

    # Создаем и сразу запускаем контейнер в фоновом режиме (-d)
    $ docker run -d --name my-running-nginx nginx
    
    # Проверяем статус (статус будет "Up ...")
    $ docker ps
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS         PORTS     NAMES
    f6e5d4c3b2a1   nginx     "/docker-entrypoint.…"   3 seconds ago    Up 2 seconds   80/tcp    my-running-nginx

Основное правило:

docker run = docker create + docker start

Когда что использовать:

  • docker create: Если нужно подготовить контейнер (например, подключить к нему сеть, настроить тома) перед тем, как его запустить вручную командой docker start <container_id>.
  • docker run: В большинстве случаев для немедленного запуска контейнера.