Docker run, Docker start and Docker create 차이

Docker create : 도커 이미지에서 새로운 컨테이너를 생성합니다. 그러나 즉시 실행되지는 않습니다

Docker start : 중지된 컨테이너를 시작합니다. docker create 명령을 사용하여 컨테이너를 만든 경우 이 명령으로 시작할 수 있습니다.

Docker run : create와 start의 조합으로 새 컨테이너를 생성하고 시작합니다. docker run 명령은 로컬 시스템에서 이미지를 찾지 못하는 경우 Docker Hub에서 이미지를 가져와서 컨테이너를 생성하고 실행합니다.

 

<예제로 알아보기>

예제를 실행하기 전에 Docker가 설치되어 있어야 합니다.

설치가 되어있지 않으면 도커 설치 문서를 참조하세요

 

docker pull 을 사용하기 위해서는 docker 에 login 되어 있어야 합니다. docker에 login 했다고 가정합니다.

 

docker pull 명령어로 ubuntu를 다운로드합니다.

$ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
ea362f368469: Pull complete
Digest: sha256:b5a61709a9a44284d88fb12e5c48db0409cfad5b69d4ff8224077c57302df9cf
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest


docker images 명령어로 시스템에서 사용 가능한 모든 도커 이미지를 볼 수 있습니다. 우분투 이미지로 설명합니다.

$ docker images
REPOSITORY                   TAG         IMAGE ID       CREATED       SIZE
ubuntu                       latest      d13c942271d6   9 days ago    72.8MB

 

docker create 명령어로 ubuntu 이미지로 container-1 이라는 이름의 새로운 도커 컨테이너를 생성합니다.  

$ docker create -i --name container-1 ubuntu
468813d90e4cd70bcb9f939f9fbdcfa960840a8e4cbc135928fcfb5d3a61a26f

 

docker ps 명령어로 현재 실행되고 있는 컨테이너를 조회하면 방금 생성한 컨테이너가 보이지 않습니다. 왜냐하면, 생성은 되었지만 실행이 되지 않았기 때문입니다.

$ docker ps
CONTAINER ID   IMAGE          COMMAND        CREATED      STATUS     PORTS           NAMES

 

docker ps -a 명령어로 실행중이거나 중지된 모든 컨테이너를 조회해보면 STATUS가 Created이고 이름이 container-1인 컨테이너를 볼 수 있습니다.

$ docker ps -a
CONTAINER ID   IMAGE                             COMMAND                  CREATED         STATUS                    PORTS                              NAMES
71c041429247   ubuntu                            "bash"                   2 minutes ago   Created                                                      container-1

 

docker run 명령어로 container-2라는 이름의 컨테이너를 생성하고 실행해 보겠습니다.

$ docker run -d -it --name container-2 ubuntu
c28cec7d600b3379c0d9440378427dd7343bca3d02777d62bba79d6f08c6f003

container-2 가 실행되고 있고 STATUS가 Up인 상태인 것을 볼 수 있습니다. 즉, docker run 명령어는 컨테이너를 생성하고 시작합니다.

$ docker ps
CONTAINER ID   IMAGE                             COMMAND                  CREATED          STATUS                       PORTS                              NAMES
c28cec7d600b   ubuntu                            "bash"                   18 seconds ago   Up 17 seconds                                                   container-2

 

docker stop 명령어로 실행 중인 container-2 컨테이너를 중지합니다.

$ docker stop container-2
container-2

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

$ docker ps -a
CONTAINER ID   IMAGE                             COMMAND                  CREATED          STATUS                            PORTS                              NAMES
c28cec7d600b   ubuntu                            "bash"                   3 minutes ago    Exited (137) About a minute ago                                      container-2
71c041429247   ubuntu                            "bash"                   25 minutes ago   Created                                                              container-1

 

docker start 명령어로 docker create로 생성한 container-1 컨테이너를 실행해 봅니다. 아래와 같이 컨테이너가 실행된 것을 확인할 수 있습니다.

$ docker start container-1
container-1

$ docker ps
CONTAINER ID   IMAGE                             COMMAND                  CREATED              STATUS                       PORTS                              NAMES
468813d90e4c   ubuntu                            "bash"                   About a minute ago   Up 2 seconds                                                    container-1

 

도커 컨테이너 및 이미지 삭제

docker rm -f 명령어로  container-1 컨테이너를 강제 삭제합니다. 즉, 실행중인 컨테이너를 중지하고 컨테이너를 삭제합니다.

docker rmi 명령어로 ubuntu 이미지를 삭제합니다. 이제 컨테이너도 이미지도 남아 있지 않습니다.

$ docker rm -f container-1
container-1

$  docker rmi ubuntu
Untagged: ubuntu:latest
Deleted: sha256:d13c942271d66cb0954c3ba93e143cd253421fe0772b8bed32c4c0077a546d4d

 

아래와 같이 docker run 명령어를 수행합니다. local 서버에서 이미지를 찾을 수 없다는 메시지와 함께 이미지를 라이브러리에서 Pulling하고 설치하고 실행합니다.

$ docker run -d -it --name container-3 ubuntu
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
ea362f368469: Pull complete
Digest: sha256:b5a61709a9a44284d88fb12e5c48db0409cfad5b69d4ff8224077c57302df9cf
Status: Downloaded newer image for ubuntu:latest
4b3269f98b4dc91fd934bd039d8141dc6a6e6ffb763d2c758238a1d005469220

다운로드된 이미지와 시작된 컨테이너을 확인합니다.

$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED              STATUS              PORTS     NAMES
4b3269f98b4d   ubuntu    "bash"    About a minute ago   Up About a minute             container-3

$ docker images
REPOSITORY                   TAG         IMAGE ID       CREATED       SIZE
ubuntu                       latest      d13c942271d6   9 days ago    72.8MB

위와 같이 이미지가 다운로드되었고 컨테이너가 시작된 것을 확인할 수 있습니다.

 

결론적으로 docker run 명령어는 pull, create, start 를 상황에 따라 수행하는 명령어입니다. 즉, 이미지가 없을 때는 pull, create, start를 이미지가 있을 때는 create, start를 수행하고 컨테이너가 있을 경우에는 start를 수행합니다.

 

 

'Docker' 카테고리의 다른 글

헷갈리는 Docker - 수정  (0) 2021.12.26
Docker Commands for Managing Container Lifecycle  (0) 2021.12.25
window10에 도커 설치하기  (1) 2021.12.25
도커란  (0) 2021.12.25
도커 명령어 - 수정  (0) 2021.12.25

+ Recent posts