도커(docker) 컨테이너를 다루는 명령어

busybean3·2021년 9월 7일
0

도커

목록 보기
4/4

이번 포스팅을 통해서 도커 컨테이너를 다루는 명령어를 알아보도록 합시다.

👉 도커 엔진 버전 확인

도커 엔진의 버전을 확인해보자.

## 1번
docker -v
> Docker version 20.10.6, build 370c289

## 2번
docker --version
> Docker version 20.10.6, build 370c289

👉 도커 이미지를 컨테이너로

아래 명령어는 도커 이미지를 컨테이너로 만들어주며, 컨테이너 내부로 들어가는 기본 명령어입니다.

## 도커 이미지를 컨테이너로 만들어주며 컨테이너 내부로 들어가는 명령어
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

다음은 도커 이미지를 컨테이너로 만들어주기만 하는 기본 명령어입니다.

## 도커 이미지를 컨테이너로 만들어주는 명령어
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

그다음은 docker create로 컨테이너만 만들어준 것을 시작하고 내부로 들어가는 명령어입니다.

## 도커 컨테이너를 시작하는 명령어
docker start [OPTIONS] CONTAINER [CONTAINER...]

## 도커 컨테이너 내부로 들어가는 명령어
docker attach [OPTIONS] CONTAINER

docker rundocker create는 위에서 보는 것과 같이 차이점이 존재합니다. docker run는 생성뿐만 아니라 시작하고, 내부로 들어가게 해주는 반면, docker create는 컨테이너를 생성까지만 해주게 됩니다. 한마디로 docker run과 같은 동작을 하기 위해서는 docker create의 경우 docker start와 docker attach를 해주어야 한다는 의미입니다.

👉 도커 외부 연결

컨테이너는 가상 머신과 마친가지로 내부 가상 IP 주소를 할당받게 되는데, 컨테이너에 127.17.0.x의 IP를 순차적으로 할당합니다. 도커 NAT IP인 127.17.0.x를 할당받은 eth0 인터페이스와 로컬 호스트인 lo 인터페이스가 있습니다. 아무런 설정을 하지 않았다면 이 컨테이너는 외부에서 접근할 수 없으며 도커가 설치된 호스트에서만 접근할 수 있습니다. 외부에 컨테이너의 애플리케이션을 노출하기 위해서는 eth0의 ip포트를 호스트의 ip와 포트에 바인딩해야 합니다.

eth0의 ip포트를 호스트의 ip와 포트에 바인딩하는 명령어는 아래와 같습니다.👇

## 바인딩 명령어
docker run -it -p [호스트의 포트]:[컨테이너의 포트] [CONTAINER] 

## EX
docker run -it -p 80:80 ubuntu:14.04

그 다음은 호스트의 특정 ip를 사용하려면 아래와 같은 명령어를 사용할 수 있으며, 여러개의 포트를 -p를 중첩하여 사용해서 바인딩 할 수 있습니다.

## 바인딩 명령어
docker run -it -p [호스트의 포트]:[컨테이너의 포트] -p [특정 ip]:[호스트의 포트]:[컨테이너의 포트] [CONTAINER] 

## EX
docker run -it -p 3306:3306 -p 128.213.12.45:7777:80 ubuntu:14.04

👉 도커 컨테이너 실행 명령어 옵션

-d option

-i , -t 가 컨테이너 내부로 진입하도록 attach 가능한 상태로 설정한다면 -d는 detached 모드로 컨테이너를 실행합니다. detached 모드는 컨테이너를 백그라운드에서 동작하는 애플리케이션으로써 실행하도록 설정합니다.

그러나 -d 옵션으로 run을 실행하면 입출력이 없는 상태로 컨테이너를 실행합니다. 컨태이너 내부에서 프로그램이 터미널을 차지하는 포그라운드로 실행돼 사용자의 입력을 받지 않습니다. detached 모드인 컨테이너는 반드시 컨테이너에서 프로그램이 실행돼야 하며, 포그라운드 프로그램이 실행되지 않는 다면 컨테이너는 종료됩니다.

이를 테스트 해보겠습니다.

## 컨테이너 내부에서 프로그램을 실행하지 않은 채로 -d 옵션 사용
docker run -d ubuntu:14.04

## 바로 종료된 것을 확인 
docker ps -a 
>>
CONTAINER ID   IMAGE                                   COMMAND                  CREATED          STATUS                      PORTS                                                                     NAMES
a7a34513b357   ubuntu:14.04                            "/bin/bash"              48 seconds ago   Exited (0) 43 seconds ago                                                                             busy_rhodes
42a62abc2d46   a40e0b600ffe                            "/bin/sh -c 'pip3 in…"   33 hours ago     Exited (1) 33 hours ago                                                                               naughty_lichterman
3d7a1b0f44d6   1160d7512631                            "python3"                2 weeks ago      Exited (0) 2 weeks ago                                                                                kind_mendel

위와 같이 docker start로 컨테이너를 시작해도 컨테이너 내부에 터미널을 차지하는 포그라운드로써 동작하는 프로그램이 없으므로 컨테이너는 시작되지 않습니다.

이와 반대로 mysql 와 같은 컨테이너를 -d 옵션을 사용하지 않고 -i , -t 옵션만 사용하게 되면 mysql 프로그램이 포그라운드로 실행된 로그를 볼 수 있습니다. 이 상태에서는 상호 입출력이 불가능하고 단순히 포그라운드 모드로 동작하는 것만 지켜볼 수 있습니다. 이와 같은 이유로 -d 옵션을 설정해서 컨테이너가 백그라운드로 동작하게 하는 것입니다.

-e option

-e 옵션은 컨테이너 내부의 환경변수 설정합니다. 예를 들어 mysql 컨테이너를 생성할 때 -e 옵션으로 mysql root password를 설정 후 생성할 수 있습니다.

## -e 옵션 사용을 통한 환경변수 설정
docker run ...  -e MYSQL_ROOT_PASSWORD=password  ...

A 컨테이너에서 B 컨테이너로 접근하는 방법 중 가장 간단한 것은 NAT로 할당받은 내부 IP를 사용하는 것 입니다. 하지만 컨테이너를 시작할 때마다 재할당하는 것이므로 매번 변경되는 컨테이너의 IP로 접근하기는 어렵습니다.

그래서 --link 옵션을 통해서 항상 컨테이너에 alias (별칭)으로 접근하도록 설정합니다.

## link 옵션으로 별칭 설정
docker run ... --link [컨테이너명]:[별칭] ...

👉 도커 컨테이너 상태 확인

도커 컨테이너의 상태를 확인하는 명령어는 아래와 같습니다.👇

## 도커 컨테이너 상태확인
docker ps 
> CONTAINER ID   IMAGE                         COMMAND                  CREATED       STATUS       PORTS                                                                     NAMES
e7f66c492d93   mongo:latest                  "docker-entrypoint.s…"   2 weeks ago   Up 2 weeks   27017/tcp                                                                 mongodb-deepscrap
15555776a388   confluentinc/cp-kafka:5.5.1   "/etc/confluent/dock…"   2 weeks ago   Up 8 days    0.0.0.0:9092->9092/tcp, :::9092->9092/tcp                                 kafkastackdockercompose_kafka1_1
8bdb162ae101   confluentinc/cp-kafka:5.5.1   "/etc/confluent/dock…"   2 weeks ago   Up 8 days    9092/tcp, 0.0.0.0:9094->9094/tcp, :::9094->9094/tcp                       kafkastackdockercompose_kafka3_1
21106d738ec0   confluentinc/cp-kafka:5.5.1   "/etc/confluent/dock…"   2 weeks ago   Up 8 days    9092/tcp, 0.0.0.0:9093->9093/tcp, :::9093->9093/tcp                       kafkastackdockercompose_kafka2_1
ab7ed4b4a365   zookeeper:3.4.9               "/docker-entrypoint.…"   2 weeks ago   Up 2 weeks   2181/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2182->2182/tcp, :::2182->2182/tcp   kafkastackdockercompose_zoo2_1
2e99cdf1e553   zookeeper:3.4.9               "/docker-entrypoint.…"   2 weeks ago   Up 2 weeks   2181/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2183->2183/tcp, :::2183->2183/tcp   kafkastackdockercompose_zoo3_1
0bc0a0a6cd2d   zookeeper:3.4.9               "/docker-entrypoint.…"   2 weeks ago   Up 2 weeks   2888/tcp, 0.0.0.0:2181->2181/tcp, :::2181->2181/tcp, 3888/tcp             kafkastackdockercompose_zoo1_1

도커 컨테이너 목록을 확인할 수 있으며 출력에 대한 설명은 아래와 같습니다.

  • CONTAINER ID : 컨테이너에게 자동으로 할당되는 무작위 16진수 해시값으로 고유한 ID입니다.
  • IMAGE : 컨테이너를 생성할 때 사용된 이미지의 이름입니다.
  • COMMAND : 컨테이너가 시작될 때 실행될 명령어입니다. 이미지에 내장된 코멘트는 docker run , docker create 명령어 끝에 입력해서 덮어쓸 수 있습니다. 추후 설명드리겠습니다.
  • CREATED : 컨테이너가 생성되고 난 뒤 흐른 시간을 나타냅니다.
  • STATUS : 컨테이너의 상태를 나타내며, 컨테이너가 실행중임을 나타내는 up, 종료된 상태인 Exited , 일시 중지된 상태인 Pause 등이 있습니다.
  • PORTS : 컨테이너가 개방한 포트와 호스트에 연결할 포트를 보여줍니다.
  • NAMES : 컨테이너의 고유한 이름입니다.

여기서 중요한 점은 docker ps 명령어는 현재 실행 중인 즉 동작중은 컨테이너의 목록만 리턴합니다. 종료된 컨테이너를 확인하기 위해서는 아래와 같은 명령어로 확인할 수 있습니다.

## 도커 컨테이너 전체 목록 확인
docker ps -a
> CONTAINER ID   IMAGE                                   COMMAND                  CREATED        STATUS                     PORTS                                                                     NAMES
42a62abc2d46   a40e0b600ffe                            "/bin/sh -c 'pip3 in…"   26 hours ago   Exited (1) 26 hours ago                                                                              naughty_lichterman
3d7a1b0f44d6   1160d7512631                            "python3"                2 weeks ago    Exited (0) 2 weeks ago                                                                               kind_mendel
e7f66c492d93   mongo:latest                            "docker-entrypoint.s…"   2 weeks ago    Up 2 weeks                 27017/tcp                                                                 mongodb-deepscrap
003e77c9d9aa   mongo:latest                            "docker-entrypoint.s…"   2 weeks ago    Exited (137) 2 weeks ago                                                                             mongo-deepscrap
15555776a388   confluentinc/cp-kafka:5.5.1             "/etc/confluent/dock…"   2 weeks ago    Up 8 days                  0.0.0.0:9092->9092/tcp, :::9092->9092/tcp                                 kafkastackdockercompose_kafka1_1
8bdb162ae101   confluentinc/cp-kafka:5.5.1             "/etc/confluent/dock…"   2 weeks ago    Up 8 days                  9092/tcp, 0.0.0.0:9094->9094/tcp, :::9094->9094/tcp                       kafkastackdockercompose_kafka3_1
21106d738ec0   confluentinc/cp-kafka:5.5.1             "/etc/confluent/dock…"   2 weeks ago    Up 8 days                  9092/tcp, 0.0.0.0:9093->9093/tcp, :::9093->9093/tcp                       kafkastackdockercompose_kafka2_1
ab7ed4b4a365   zookeeper:3.4.9                         "/docker-entrypoint.…"   2 weeks ago    Up 2 weeks                 2181/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2182->2182/tcp, :::2182->2182/tcp   kafkastackdockercompose_zoo2_1
2e99cdf1e553   zookeeper:3.4.9                         "/docker-entrypoint.…"   2 weeks ago    Up 2 weeks                 2181/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2183->2183/tcp, :::2183->2183/tcp   kafkastackdockercompose_zoo3_1
0bc0a0a6cd2d   zookeeper:3.4.9                         "/docker-entrypoint.…"   2 weeks ago    Up 2 weeks                 2888/tcp, 0.0.0.0:2181->2181/tcp, :::2181->2181/tcp, 3888/tcp             kafkastackdockercompose_zoo1_1
0182a1a4d33e   confluentinc/cp-kafka-connect:5.2.1     "/etc/confluent/dock…"   2 weeks ago    Exited (137) 2 weeks ago                                                                             kafkadocker_kafka-connect_1
0ba8fbc6f510   landoop/kafka-topics-ui:0.9.4           "/run.sh"                2 weeks ago    Exited (137) 2 weeks ago                                                                             kafkadocker_kafka-topics-ui_1
8be07deaef7e   landoop/schema-registry-ui:0.9.4        "/run.sh"                2 weeks ago    Exited (137) 2 weeks ago                                                                             kafkadocker_schema-registry-ui_1
059628c4386d   confluentinc/cp-kafka-rest:5.2.1        "/etc/confluent/dock…"   2 weeks ago    Exited (137) 2 weeks ago                                                                             kafkadocker_kafka-rest-proxy_1
0e81b59b09ee   elkozmon/zoonavigator-web:0.5.1         "./run.sh"               2 weeks ago    Exited (137) 2 weeks ago                                                                             kafkadocker_zoonavigator-web_1
4eabe8fc5f0e   confluentinc/cp-schema-registry:5.2.1   "/etc/confluent/dock…"   2 weeks ago    Exited (1) 2 weeks ago                                                                               kafkadocker_kafka-schema-registry_1
3b95646920c8   confluentinc/cp-ksql-server:5.2.1       "/etc/confluent/dock…"   2 weeks ago    Exited (255) 2 weeks ago                                                                             kafkadocker_ksql-server_1
07514343da92   elkozmon/zoonavigator-api:0.5.1         "./run.sh"               2 weeks ago    Exited (137) 2 weeks ago                                                                             kafkadocker_zoonavigator-api_1
2543953b71c7   confluentinc/cp-kafka:5.2.1             "/etc/confluent/dock…"   2 weeks ago    Exited (137) 2 weeks ago                                                                             kafkadocker_kafka2_1
92a86e1072fa   confluentinc/cp-kafka:5.2.1             "/etc/confluent/dock…"   2 weeks ago    Exited (137) 2 weeks ago                                                                             kafkadocker_kafka1_1
4824e35467c6   confluentinc/cp-kafka:5.2.1             "/etc/confluent/dock…"   2 weeks ago    Exited (137) 2 weeks ago                                                                             kafkadocker_kafka3_1
1a29ed1b3a1d   zookeeper:3.4.9                         "/docker-entrypoint.…"   2 weeks ago    Exited (137) 2 weeks ago                                                                             kafkadocker_zoo1_1
7f6f2afff97a   zookeeper:3.4.9                         "/docker-entrypoint.…"   2 weeks ago    Exited (137) 2 weeks ago                                                                             kafkadocker_zoo3_1
63981e1313c6   zookeeper:3.4.9                         "/docker-entrypoint.…"   2 weeks ago    Exited (137) 2 weeks ago                                                                             kafkadocker_zoo2_1
c7a6e96074f7   kafkadocker_kafka                       "start-kafka.sh"         2 weeks ago    Exited (143) 2 weeks ago                                                                             kafkadocker_kafka_1
d824b999954c   wurstmeister/zookeeper                  "/bin/sh -c '/usr/sb…"   2 weeks ago    Exited (137) 2 weeks ago                                                                             kafkadocker_zookeeper_1
1d8d006c198c   samocns                                 "/bin/bash"              2 weeks ago    Exited (0) 2 weeks ago                                                                               pensive_lederberg
fa1b999cc84e   samocns                                 "/bin/bash"              4 weeks ago    Exited (129) 4 weeks ago                                                                             priceless_jang

위의 명령어 (docker ps)와 다르게 Exited 된 도커 컨테이너들이 보이는 것을 확인할 수 있습니다.

여담으로 docker run 해서 컨테이너 내부에 들어가서 exit를 통해서 나오는 경우 Pause 되고, Ctrl + P, Q를 입력하는 경우 컨테이너의 셸에서만 빠져나옵니다.

👉 도커 컨테이너 삭제

더 이상 사용하지 않는 컨테이너를 삭제할 때는 아래와 같은 명령어를 사용합니다.

## 도커 컨테이너 삭제 명령어
docker rm [CONTAINER]

하지만 위의 명령어는 컨테어너가 exited 된 상태만 docker rm으로 삭제가 가능합니다. 그와 반면 컨테이너가 종료되지 않은 것들은 해당 명령어로 하지 못합니다. 그래서 강제로 종료하는 명령어도 존재하며, 종료 후 삭제도 가능합니다.

## 1. 도커 컨테이너 종료 명령어
docker stop [CONTAINER]

## 1. 종료된 도커 컨테이너 삭제
docker rm [CONTAINER]

## 2. 도커 컨테이너 강제 종료
docker rm -f [CONTAINER]

그다음은 모든 컨테이너를 삭제하는 명령어입니다. 전체 컨테이너를 일일이 삭제하는 것은 매우 귀찮은 일이므로 아래와 같은 명령어를 사용합니다.

## 도커 컨테이너 전체 삭제
docker container prune

REFERENCE

해당 글의 모든 레퍼런스는 "시작하세요! 도커/쿠버네티스 친절한 설명으로 쉽게 이해하는 컨테이너 관리" (용찬호 지음)을 알립니다.

[https://coupa.ng/b2 DsNQ](https://coupa.ng/b2 DsNQ)

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

profile
엉덩이 무거운 개발자가 되기 위해서 몸무게를 찌웠다...

0개의 댓글