쌩로그

[Docker] 시작하세요! 도커 & 쿠버네티스 - 02_도커 엔진_컨테이너 다루기(명령어 및 애플리케이션 구축) 본문

Deploy/Docker

[Docker] 시작하세요! 도커 & 쿠버네티스 - 02_도커 엔진_컨테이너 다루기(명령어 및 애플리케이션 구축)

.쌩수. 2025. 2. 27. 09:02
반응형

목차

  1. 포스팅 개요
  2. 본론
      2-1. 도커 이미지
      2-2. 도커 컨테이너 다루기
      2-3. 컨테이너 외부로 노출
      2-4. 컨테이너 애플리케이션 구축
  3. 요약

1. 포스팅 개요

이 포스팅은 위키북스 출판사의 '시작하세요! 도커/쿠버네티스'의 제 2장 도커 엔진 에 대한 부분을 학습하며 기록한 포스팅이다.

해당 파트를 통해 도커의 대략적인 명령어와 컨테이너에서 애플리케이션 구축에 대한 대략적인 개요를 살펴본다.

참고

윈도우를 사용한다면 커맨드(CMD)보단 WSL 을 사용하자.

2. 본론

2-1. 도커 이미지

도커 이미지 형식

  • 형식 : [저장소이름]/[이미지 이름]:[태그]
    • 저장소 이름
      • 이미지가 저장된 장소를 의미
      • 생략하면 도커에서 기본적으로 제공하는 도커 허브의 이미지를 의미
    • 이미지 이름
      • 어떤 역할을 하는지 나타낸다.
      • 생략 불가
      • ex)
        • Ubuntu : 우분투
    • 태그
      • 이미지의 버전 관리 혹인 리비전 관리에 사용됨.
      • 생략하면 latest(최신) 을 나타낸다.

※ 참고 : 리비전(Revision)

  • 해당 대상이 변경되거나 수정된 이력을 나타내는 개념
  • 도커 이미지에서는 특정 이미지가 빌드되거나 업데이트 된 시점의 상태를 식별하기 위한 버전정보

도커 엔진 버전 확인

$ docker -v
Docker version 27.3.1, build ce12230

도커 컨테이너 생성

아래는 우분투 생성 예시다.

이미지의 태그를 붙이지 않으면 latest 가 기본적으로 붙는다ㅣ.

$ docker run -i -t ubuntu
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
de44b265507a: Pull complete
Digest: sha256:80dd3c3b9c6cecb9f1667e9290b3bc61b78c2678c02cbdae5f0fea92cc6734ab
Status: Downloaded newer image for ubuntu:latest

# 도커로 리눅스 Shell 진입
root@29e4b975a030:/# 
  • runpull, create, start, attach모든 과정을 한번에 진행한다.
  • 옵션
    • i : 해당 옵션이 있을 때 컨테이너와 상호작용 가능하다.
    • t : TTY(=가상 터미널 환경)를 제공해준다. 그래서 생성한 컨테이너에서 쉘을 사용할 수 있게 된다.
  • 도커 컨테이너 생성시 CONTAINER ID 는 무작위의 16진수 해시값으로 할당된다.
  • 해당 쉘에서 나오려면 ctrl + D 를 누르거나 혹은 exit를 입력하면 된다.
    • 그럼 정지 후 나오게 된다.
    • 쉘을 정지하지 않고 나오려면, ctrl + p,q 를 누르면 빠져나온다.(해보니깐 ctrl 누르고, P, Q 같이 눌러야됨.)
root@29e4b975a030:/# exit  

# 빠져나옴.
$ 

※ 참고 : ctrl + P,Q 사용시 docker ps를 하면 컨테이너가 표시된다.

즉 실행중이라는 증거다.

root@29e4b975a030:/#

# ctrl + P,Q 후 
$ docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
3bec1b7944c4   ubuntu    "/bin/bash"   6 minutes ago   Up 6 minutes             clever_hertz

도커 이미지 내려받기

$ docker pull [이미지]:[태그]

# centos 7 
$ docker pull centos:7
7: Pulling from library/centos
2d473b07cdd5: Downloading [==============================>                    ]  46.93MB/76.1MB

...(다운로드 후)
$ docker pull centos:7
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Status: Downloaded newer image for centos:7
docker.io/library/centos:7

이미지 목록 출력

$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
ubuntu       latest    b1d9df8ab815   2 weeks ago   78.1MB
centos       7         eeb6ee3f44bd   3 years ago   204MB

2-2. 도커 컨테이너 다루기

도커 컨테이너 생성(생성만 O , 실행 X)

$ docker create -i -t --name mycentos centos:7
  • --name 으로 mycentos를 지정했다.
    • 컨테이너의 이름이 mycentos로 지정된다.
docker create -it --name mycentos centos:7
0f76f788dae2554dda7f66d3f131fdee9aac6fbaf772163c36d52577a5ecface

$ docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS          PORTS     NAMES
0f76f788dae2   centos:7   "/bin/bash"   10 seconds ago   Created                   mycentos

생성된 도커 컨테이너 실행

  • 실행만 한다.
  • 실행후 컨테이너로 들어가진 않는다.
$ docker start [컨테이너이름]

# 예시
$ docker start mycentos
  • 시작하고 컨테이너 내부로 들어가려면 attach 명령어를 쓰면 된다.
  • 바로 진입한다.
$ docker attach mycentos
[root@0f76f788dae2 / ]#

※ 참고
start 혹은 run 을 비롯한 모든 명령어는 컨테이너 이름 대신 ID를 사용할 수 있다.
ID는 무작위로 만들어진 16진수 해시값인데, 앞의 n자리(3자리, 4자리 모두 가능(단 중복 없을 때)) ID를 입력하면 된다.

컨테이너 확인

$ docker ps
  • ps 만 하면 실행 중인 컨테이너만 확인할 수 있다.
  • 모든 컨테이너를 확인하려면 속성 a를 붙이면 된다.
$ docker ps -a

ex

  • 현재 컨테이너를 두 개 생성했다.
  • 그 컨테이너들은 실행 중이 아니다.
  • ps만 하면 아무것도 안 나온다.
  • a 속성을 붙이면 두 개 나온다.
$docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES


## 나오지 않던 컨테이너들이 나옴.
$ docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                     PORTS     NAMES
33df3f54e4d4   ubuntu    "/bin/bash"   3 minutes ago    Exited (0) 3 minutes ago             tender_keller
29e4b975a030   ubuntu    "/bin/bash"   10 minutes ago   Exited (0) 8 minutes ago             laughing_borg

컨테이너 삭제

$ docker rm <컨테이너 이름 또는 ID> 

위의 확인된 컨테이너를 통한 예시를 아래에서 보자.

$ docker rm tender_keller # 이름으로 지움.
tender_keller

$ docker ps -a 
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                      PORTS     NAMES
29e4b975a030   ubuntu    "/bin/bash"   12 minutes ago   Exited (0) 10 minutes ago             laughing_borg

$ docker rm 29e4
29e4

$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

참고로 한 번 삭제한 컨테이너는 복구할 수 없으므로, 더 이상 사용하지 않는가를 충분히 고려한 후 컨테이너를 삭제해야 한다.

실행 중인 컨테이너는 삭제할 수 없다.

$ docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED       STATUS          PORTS     NAMES
0f76f788dae2   centos:7   "/bin/bash"   6 weeks ago   Up 23 seconds             mycentos

$ docker rm 07f # 또는 docker rm mycentos
Error response from daemon: No such container: 07f


$ docker rm 0f7
Error response from daemon: cannot remove container "/mycentos": container is running: stop the container before removing or force remove

에러 로그는 컨테이너를 정지한 뒤 삭제하거나 강제로 삭제할 수 있는 옵션을 추가하라는 내용이다.

강제로 삭제하는 옵션은 -f 이다.

$ docker rm -f [컨테이너_이름 혹은 컨테이너_ID]

컨테이너 정지

$ docker stop [컨테이너_이름 혹은 컨테이너_ID]

일일이 지우기 귀찮아서 한 번에 삭제할 때

$ docker container prune
  • 사용 예시는 아래와 같다.
$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
3bec1b7944c4b80a03712a16c575d8423bb6d063469072acd2b6d658e926afa3

Total reclaimed space: 0B

$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES


$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

-a, -q 옵션을 이용해서 삭제하기

  • -a : 컨테이너의 상태와 관계 없이 모든 컨테이너를 가리킴
  • -q : 컨테이너의 ID만 출력

이 옵션을 이용해서 출력된 컨테이너 리스트를 변수로 이용해서 삭제한다.
먼저 정지를 하고, 삭제를 함.

$ docker stop $(docker ps -a -q)
$ docker rm $(docker ps -a -q)

2-3. 컨테이너 외부로 노출

컨테이너는 가상 머신처럼 가상 IP 주소를 할당받는다.
기본적으로 도커는 컨테이너에 172.17.0.x의 IP를 순차적으로 할당한다.

컨테이너를 새롭개 생성한 후 ifconfig 명령어로 컨테이너의 네트워크 인터페이스를 확인한다.

$ docker run -i -t --name network_test ubuntu:14.04
Unable to find image 'ubuntu:14.04' locally
14.04: Pulling from library/ubuntu
2e6e20c8e2e6: Pull complete
0551a797c01d: Pull complete
512123a864da: Pull complete
Digest: sha256:64483f3496c1373bfd55348e88694d1c4d0c9b660dee6bfef5e12f43b9933b30
Status: Downloaded newer image for ubuntu:14.04
root@b0ddf75cf40b:/# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:ac:11:00:02
          inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:9 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1046 (1.0 KB)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth0 부분의 inet addr:172.17.0.2 을 확인할 수 있다.

lo 인터페이스는 로컬 호스트를 뜻한다.

  • 아무런 설정을 하지 않았다면 이 컨테이너는 외부에서 접근할 수 없다.
  • 도커가 설치된 호스트에서만 접근할 수 있다.
    • 예외로 Docker Desktop for Mac에서는 호스트에서 컨테이너 IP로의 접근이 불가능하다.(책에는 이렇게 나옴.)

따라서 외부에 컨테이너의 애플리케이션을 노출하려면 eth0 의 IP와 포트를 호스트의 IP와 포트에 바인딩해야 한다.

컨테이너에 아파치 웹 서버를 설치해서 외부에 노출해보자.

$ docker run -i -t --name mywebserver -p 8080:80 ubuntu:14.04

위에서 주목할 부분은 -p 8080:80 이다.

  • -p : 컨테이너의 포트를 호스트의 포트와 바인딩해서 연결할 수 있다.
  • 입력 형식 : [호스트의 포트]:[컨테이너의 포트]
  • 예시 : 호스트의 777번 포트를 컨테이너의 80번 포트와 연결하려면 7777:80 과 같이 입력하면 된다.

여러 개의 포트를 외부에 개방하려면 -p 옵션을 여러 번 써서 설정하면 된다.
아래는 예시다.

$ docker run -i -t -p 3306:3306 -p 192.168.10.100:7777:80 ubuntu:14.04

참고
-p 80 처럼도 입력은 가능하다. 하지만, 이렇게 입력하면 컨테이너의 80번 포트를 쓸 수 있는 호스트의 포트 중 하나와 연결한다.
그런데 컨테이너를 생성하는 시점에서 호스트의 어느 포트와 연결됐는지 알 수 없다.
docker ps 명령어를 입력해 PORTS 항목을 확인해야 한다.

아파치 웹 서버 설치

# apt-get update
# apt-get install apache2 -y
# service apache2 start

도커에서 아파치 웹서버를 실행했고,
호스트의 8080 포트와 도커의 80 포트를 바인딩시켰다.

따라서 localhost:8080으로 들어가면 도커 컨테이너의 80 포트와 매핑되어서 아파치 웹 서버로 접속해야 한다.

결과는?

잘나온다.
localhost:8080으로 들어가니 우분투에서 설치한 아파치 웹 서버의 기본 페이지가 나온다.

아파치 웹 서버가 설치된 것은 컨테이너 내부이므로 호스트에는 어떠한 영향도 받지 않는다.
참고로 컨테이너의 포트를 80 번이 아니라 다른 포트로 연결했다면, 아파치 서버로의 접근은 하지 못할 것이다.

아파치 서버가 80번 포트를 기본으로 사용하기 때문에, 호스트의 8080 포트와 컨테이너의 80포트의 바인딩이 이루어져서 아파치로 접근할 수 있었지, 그렇지 않았다면 해당 페이지는 나오지 않았을 것이다.

2-4. 컨테이너 애플리케이션 구축

컨테이너에 애플리케이션을 하나만 동작시키면 컨테이너 간의 독립성을 보장함과 동시에 애플리케이션의 버전 관리, 소스 코드 모듈화 등이 더욱 쉽다.

유형1 은 데이터베이스와 웹 서버를 하나의 컨테이너에 담은 것이고,
유형2 는 데이터베이스와 웹 서버를 각각의 컨테이너로 분리했는데,
유형2가 도커 커뮤니티나 공식 홈페이지에서 권장하는 구조다.

  • 한 컨테이너에서 프로세스 하나만 실행하는 것이 도커의 철학이기도 하다.

호스트와 바인딩된 포트 확인하기

$ docker port [컨테이너_이름]

# 예시 
$ docker port wordpress
80/tcp -> 0.0.0.0:64835

$ docker ps
CONTAINER ID   IMAGE       COMMAND                   CREATED          STATUS          PORTS                   NAMES
ab8848c7f8e5   wordpress   "docker-entrypoint.s…"   3 minutes ago    Up 3 minutes    0.0.0.0:64835->80/tcp   wordpress

wordpress 라는 이름을 가진 컨테이너 80/tcp 가 호스트의 64385 port와 바인딩되었다는 의미다.
docker ps -a 로는 0.0.0.0:64835->80/tcp 처럼 나오는데, 64385 포트가 해당 컨테이너의 80/tcp와 바인딩되었다는 의미다.

옵션 -d

  • -i -t 가 컨테이너 내부로 진입하도록 attach 가능한 상태로 설정한다면 -d 는 Detached 모드로 컨테이너를 실행한다.
  • Detached 모드는 컨테이너를 백그라운드에서 동작하는 애플리케이션으로써 실행하도록 설정한다.
  • -d 옵션을 붙이고 우분투 이미지의 컨테이너를 실행하면 해당 컨테이너에 들어가지 않는다.
    • 왜냐하면 입출력이 없는 상태로 컨테이너를 (백그라운드에서) 실행한다.
    • 컨테이너 내부에서 프로그램이 터미널을 차지하는 포그라운드(foreground)로 실행돼 사용자의 입력을 받지 않는다.
  • Detached 모드인 컨테이너는 반드시 컨테이너에서 프로그램이 실행돼야 하며, 포그라운드로 프로그램이 실행되지 않으면 컨테이너는 종료된다.

또한 -d 옵션을 붙이고 컨테이너를 실행하면 docker ps 명령어로는 확인할 수 없고, docker ps -a 로 확인가능하다.

$ docker run -d --name detach_test ubuntu:14.04
4ac9c7be1b3ac1ed720fdda9f20da81b9e049dc23e979a7b68309fc5f73c4201
$ docker ps # ubuntu 확인 불가
CONTAINER ID   IMAGE       COMMAND                   CREATED          STATUS          PORTS                   NAMES
ab8848c7f8e5   wordpress   "docker-entrypoint.s…"   8 minutes ago    Up 8 minutes    0.0.0.0:64835->80/tcp   wordpress
0d1da24c0f54   mysql:5.7   "docker-entrypoint.s…"   14 minutes ago   Up 14 minutes   3306/tcp, 33060/tcp     wordpressdb

$ docker ps -a # ubuntu 확인 가능 
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS                      PORTS                   NAMES
4ac9c7be1b3a   ubuntu:14.04   "/bin/bash"               11 seconds ago   Exited (0) 10 seconds ago                           detach_test
ab8848c7f8e5   wordpress      "docker-entrypoint.s…"   8 minutes ago    Up 8 minutes                0.0.0.0:64835->80/tcp   wordpress
0d1da24c0f54   mysql:5.7      "docker-entrypoint.s…"   15 minutes ago   Up 14 minutes               3306/tcp, 33060/tcp     wordpressdb
c82a591bf57c   ubuntu:14.04   "/bin/bash"               21 hours ago     Exited (0) 21 hours ago                             mywebserver

이렇게 종료된 컨테이너를 docker start 명령어로 다시 시작시켜도 컨테이너 내부에 터미널을 차지하는 포그라운드로써 동작하는 프로그램이 없기 때문에 컨테이너는 시작되지 않는다.

Detached 모드

  • docker run -d로 컨테이너를 실행하면, 컨테이너가 백그라운드에서 실행되어 터미널로부터 분리(detach)된다.
  • 즉, 사용자의 현재 터미널은 컨테이너가 실행을 시작하자마자 즉시 돌아오며, 터미널이 점유되지 않는다.
  • 컨테이너의 표준 입출력은 현재 터미널과 직접 연결되어 있지 않기 때문에, 컨테이너가 출력하는 로그 등을 실시간으로 확인할 수 없다(별도로 docker logs 또는 docker attach 사용).

mysql을 run -i -t 로 실행했다면, 포그라운드로 프로그램이 실행되는 것을 확인할 수 있다.
(MySQL 이미지가 컨테이너가 시작할 때 mysqld(데몬)가 동작하도록 설정되어있다.)
이 상태에서는 상호 입출력이 불가능하고 프로그램이 포그라운드 모드로 동작하는 것을 지켜볼 수 있다.
따라서 이런 상황에서는 -d 옵션을 사용해서 컨테이너가 백그라운드에서 동작하게 해야한다.

옵션 - e

  • -e 옵션은 컨테이너 내부의 환경변수를 설정한다.
  • 컨테이너화된 애플리케이션은 환경변수에서 값을 가져와 쓰는 경우가 많으므로 자주 사용하는 옵션이다.

명령어 exec

  • exec 명령어를 사용하면 컨테이너 내부에서 명령어를 실행한 뒤 그 결괏값을 반환받을 수 있다.
$ docker exec [컨테이너_이름] [명령어]

# 예시
$ docker exec mycontainer ls -l
  • -d 로 실행한 컨테이너를 attach 명령어로 컨테이너 내부에 들어간다 하더라도 -d 옵션으로 생성했다면 의미가 없고, 컨테이너에서 실행 중인 프로그램의 로그 출력을 보게 될 뿐이다.
  • exec 명령어를 이용하면 컨테이너 내부의 셀을 사용할 수 있다.
$ docker exec -i -t [컨테이너_이름] [셸]

# 예시
$ docker exec -i -t mycontainer /bin/bash

옵션 --link

  • A 컨테이너에서 B 컨테이너로 접근하는 방법 중 가장 간단한 것은 NAT로 할당받은 내부 IP를 쓰는 것이다.
  • B 컨테이너의 IP가 172.17.0.3이라면 A 컨테이너는 이 IP를 써서 B 컨테이너에 접근할 수 있다.
  • 그러나 도커 엔진은 컨테이너에게 내부 IP를 172.17.0.2, 3, 4…와 같이 순차적으로 할당한다.
    • 이는 컨테이너를 시작할 때마다 재할당하는 것이므로 매번 변경되는 컨테이너의 IP로 접근하기는 어렵다.
  • --link 옵션은 내부 IP를 알 필요 없이 항상 컨테이너에 별명(alias)으로 접근하도록 설정한다.
$ ... --link mycontainerdb:mysql # 예시

위와 같이 하면, 해당 옵션을 넣으면서 실행한 컨테이너가 mycontainter라고 할 때 mycontainerdb의 IP를 모르더라도, mysql이라는 호스트명으로 접근할 수 있게 한다.

mycontainer 컨테이너에서 mysql이라는 호스트 이름으로 요청을 전송하면, mycontainerdb 컨테이너의 내부 IP로 접근한다.

  • --link 옵션을 쓸 때 --link 에 입력된 컨테이너가 실행 중이지 않거나 존재하지 않는다면 --link 를 적용한 컨테이너 또한 실행할 수 없다.

다음과 같은 오류가 발생한다.

$ docker start wordpress
Error response from daemon: Cannot link to a non running container: /wordpressdb AS /wordpress/mysql
Error: failed to start containers: wordpress

wordpress, wordpressdb 컨테이너를 링크했었다.
wordpressdb 가 정지된 상태에서 위와 같은 에러가 발생했다.

이를 통해 --link 옵션이 컨테이너의 연결 뿐만 아니라, 컨테이너의 실행 순서의 의존성도 정의해주는 것을 확인할 수 있다.

※참고

  • --link 옵션은 컨테이너 간의 이름으로 서로를 찾을 수 있게 도와주지만, 현재 deprecated된 옵션이고, 추후 삭제될 수도 있다.
    • 이미 삭제 되었을지도...책 집필시기에서 조금 지난 시점이라..
  • 도커 브리지 네트워크를 사용하면 --link 옵션과 동일한 기능을 더욱 손쉽게 사용할 수 있으므로 브리지 네트워크를 사용하는 것을 권장한다.

3. 요약

도커 이미지 형식

  • 형식 : [저장소이름]/[이미지 이름]:[태그]
    • 저장소 이름
      • 이미지가 저장된 장소를 의미
      • 생략하면 도커에서 기본적으로 제공하는 도커 허브의 이미지를 의미
    • 이미지 이름
      • 어떤 역할을 하는지 나타낸다.
      • 생략 불가
      • ex)
        • Ubuntu : 우분투
    • 태그
      • 이미지의 버전 관리 혹인 리비전 관리에 사용됨.
      • 생략하면 latest(최신) 을 나타낸다.
도커 명령어
# 엔진 버전 확인
$ docker v  # 혹은 docker version

# 컨테이너 생성
$ docker create ...

# 컨테이너 내부로 들어가기
$ docker attach ...

# 컨테이너 실행 : `pull`, `create`, `start`, `attach`의 모든 과정을 한번에 진행한다.
$ docker run ...

# 컨테이너 목록 출력
$ docker ps

# 컨테이너 목록 전체 출력
$ docker ps -a

# 컨테이너 삭제
$ docker rm

# 컨테이너 정지
$ docker stop ..

# 컨테이너 한번에 지우기
$ docker container prune



# 이미지 내려받기
$ docker pull [이미지]:[태그]

# 이미지 목록 출력
$ docker images

컨테이너의 port와 호스트의 port를 바인딩할 때

-p : 컨테이너의 포트를 호스트의 포트와 바인딩해서 연결할 수 있다.

  • 입력 형식 : [호스트의 포트]:[컨테이너의 포트]

호스트와 바인딩된 포트 확인하기

$ docker port [컨테이너_이름]

Detached 모드

  • docker run -d로 컨테이너를 실행하면, 컨테이너가 백그라운드에서 실행되어 터미널로부터 분리(detach)된다.

exec 명령어

  • exec 명령어를 사용하면 컨테이너 내부에서 명령어를 실행한 뒤, 그 결괏값을 반환받을 수 있다.
$ docker exec [컨테이너_이름] [명령어]

# 예시
$ docker exec mycontainer ls -l
728x90
Comments