docker-compose.yml 파일을 생성했다면, 해당 파일을 컨트롤하는 docker compose 명령어들이 있다. 이러한 명령어들은 컨테이너 시작, 구성확인, 삭제 등 여러가지 명령을 수행한다. docker compose 명령어의 리스트는 다음과 같다.

명령

설명

up

컨테이너 생성/시작

ps

컨테이너 목록 표시

logs

컨테이너 로그 출력

run

컨테이너 실행

start

컨테이너 시작

stop

컨테이너 정지

restart

컨테이너 재시작

pause

컨테이너 일시정지

unpause

컨테이너 재개

port

공개 포트 번호 표시

config

구성 확인

kill

실행중인 컨테이너 강제 정지

rm

컨테이너 삭제

down

리소스 삭제

또한 이 명령 다음 특정 컨테이너명을 지정하면, 해당 컨테이너만 조작할수도 있다. 예를들어, webserver와 db 컨테이너 두개를 올린 docker-compose.yml을 실행한 상태에서, docker-compose stop webserver 를 입력하면, webserver만 중지된다.

 

추가로, 대부분의 docker compose 명령은 명령을 실행하는 현재 디렉토리 안에 docker-compose.yml 파일이 있어야 한다. 즉 해당파일 없는 경로에서 실행하면 작동하지 않으며, 따로 -f 옵션을 주어야 한다.

 

 

 

docker-compose --version

 

설명

docker-compse의 버전을 확인한다. 아무데서나 해당 명령을 사용할 수 있다.

 

예시

 

 

docker-compose up

 

설명

작성한 docker-compose.yml을 바탕으로 여러개의 컨테이너를 생성하여 시작한다. 기본적으로 지원하는 이름은 docker-compose.yml, yaml 2가지이다다른 이름으로 하는 경우, -f 옵션을 써야 한다. docker-compose up 실행하면 백그라운드로 실행되지 않아 프롬프트가 떨어지지 않고 계속 로깅된다. -d 옵션으로 백그라운드에서 실행할 수 있다.

 

구문은 다음과 같다.

docker-compose up [옵션] [서비스명 .] 

 

옵션

-f

정해진 docker-compose.yml 이름 외에 다른 이름을쓰는 경우.

-d

백그라운드에서 실행

--no-deps

링크 서비스를 시작하지 않음.

--build

이미지를 빌드한다. 컨테이너 시작 시 dockerfile을 빌드할때 사용.

--no-build

이미지를 빌드하지 않는다.

-t, --timeout

컨테이너의 타임아웃을 초로 지정 (디폴트 10초)

--scale SERVICE=서비스수

컨테이너를 생성할 개수를 지정.

 

예시

docker compose up

docker compose -f ./sample/docker-compose.yml up

docker compose up --scale server_a=10 --scale server_b=20

(docker-compose.yml에 server_a, server_b 2가지 컨테이너가 있고, server_a는 10개, server_b는 20개 시작)

 

아래 예시는 이런식으로 작동한다는 것만 이해하면 되겠다. (위 예시와 관련없음)

[root@docker-basic compose-test]# docker-compose up
Creating network "compose-test_default" with the default driver
Pulling mongodb (mongo:4)...
4: Pulling from library/mongo
d7c3167c320d: Pull complete
131f805ec7fd: Pull complete
322ed380e680: Pull complete
6ac240b13098: Pull complete
c5704a01b59f: Pull complete
8e396e2a1e68: Pull complete
914fffcb1cc5: Pull complete
692bd0d35810: Pull complete
122d231765e4: Pull complete
9c9c497305ce: Pull complete
77e3ca7a65fc: Pull complete
f70e0d9672b4: Pull complete
dcc04aade5db: Pull complete
Digest: sha256:29805e9a6fc2a233b9b633c7b0f382a43df3f119522b82366a72abecb302a793
Status: Downloaded newer image for mongo:4
Pulling backend (dbgurum/doc-kor:devbackend_v1)...
devbackend_v1: Pulling from dbgurum/doc-kor
e79bb959ec00: Pull complete
d4b7902036fe: Pull complete
1b2a72d4e030: Pull complete
d54db43011fd: Pull complete
69d473365bb3: Pull complete
6e2490ee2dc8: Pull complete
24bcfd3d8296: Pull complete
4c485b32137c: Pull complete
412552bf9213: Pull complete
ccc531a563c9: Pull complete
d80cdc55821c: Pull complete
28bb33283f12: Pull complete
Digest: sha256:3c276f5805414759745bdd45256eb33804d4bd4aa02007c38d50c40ab8949938
Status: Downloaded newer image for dbgurum/doc-kor:devbackend_v1
Pulling frontend (dbgurum/doc-kor:devfrontend_v1)...
devfrontend_v1: Pulling from dbgurum/doc-kor
e79bb959ec00: Already exists
d4b7902036fe: Already exists
1b2a72d4e030: Already exists
d54db43011fd: Already exists
69d473365bb3: Already exists
6e2490ee2dc8: Already exists
24bcfd3d8296: Already exists
4c485b32137c: Already exists
44059a7f00c1: Pull complete
cd480d0dfe0e: Pull complete
082172b2c563: Pull complete
4a9927cdb901: Pull complete
8c5d9b22addb: Pull complete
Digest: sha256:0ffcaea4346ab991488fd159c5428dea495674f31b9fca7d07328f7d3511581d
Status: Downloaded newer image for dbgurum/doc-kor:devfrontend_v1
Creating compose-test_backend_1  ... done
Creating compose-test_frontend_1 ... done
Creating compose-test_mongodb_1  ... done
Attaching to compose-test_frontend_1, compose-test_backend_1, compose-test_mongodb_1
frontend_1  | Debugger listening on ws://127.0.0.1:9229/ae1582ff-808e-4df1-9e8e-c19d0c450e9e
frontend_1  | For help see https://nodejs.org/en/docs/inspector
backend_1   | Debugger listening on ws://127.0.0.1:9229/1a24cd35-6829-4330-88df-9db147fdfb9c
backend_1   | For help see https://nodejs.org/en/docs/inspector
frontend_1  | App listening on port 8888
frontend_1  | Press Ctrl+C to quit.
mongodb_1   | 2020-06-12T13:54:34.758+0000 I  CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 spe                                                               cify --sslDisabledProtocols 'none'
mongodb_1   | 2020-06-12T13:54:34.760+0000 W  ASIO     [main] No TransportLayer configured during NetworkInterface startup
mongodb_1   | 2020-06-12T13:54:34.760+0000 I  CONTROL  [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db                                                                64-bit host=7f0732f4f380
mongodb_1   | 2020-06-12T13:54:34.760+0000 I  CONTROL  [initandlisten] db version v4.2.8
mongodb_1   | 2020-06-12T13:54:34.760+0000 I  CONTROL  [initandlisten] git version: 43d25964249164d76d5e04dd6cf38f6111e21f                                                               5f
mongodb_1   | 2020-06-12T13:54:34.760+0000 I  CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.1.1  11 Sep 2018
mongodb_1   | 2020-06-12T13:54:34.760+0000 I  CONTROL  [initandlisten] allocator: tcmalloc
mongodb_1   | 2020-06-12T13:54:34.760+0000 I  CONTROL  [initandlisten] modules: none
mongodb_1   | 2020-06-12T13:54:34.760+0000 I  CONTROL  [initandlisten] build environment:
mongodb_1   | 2020-06-12T13:54:34.760+0000 I  CONTROL  [initandlisten]     distmod: ubuntu1804
mongodb_1   | 2020-06-12T13:54:34.760+0000 I  CONTROL  [initandlisten]     distarch: x86_64
mongodb_1   | 2020-06-12T13:54:34.760+0000 I  CONTROL  [initandlisten]     target_arch: x86_64
mongodb_1   | 2020-06-12T13:54:34.760+0000 I  CONTROL  [initandlisten] options: { net: { bindIp: "*" } }
mongodb_1   | 2020-06-12T13:54:34.761+0000 I  STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=1455M,cac                                                               he_overflow=(file_max=0M),session_max=33000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log                                                               =(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000,close_scan_interval=10,cl                                                               ose_handle_minimum=250),statistics_log=(wait=0),verbose=[recovery_progress,checkpoint_progress],
backend_1   | App listening on port 8887
backend_1   | Press Ctrl+C to quit.
backend_1   | Disconnected: unable to reconnect to mongodb://mongodb:27017/guestbook
backend_1   | /backend/node_modules/mongoose/node_modules/mongodb/lib/operations/mongo_client_ops.js:474
backend_1   |       throw err;
backend_1   |       ^
backend_1   |
backend_1   | Error: Disconnected: unable to reconnect to mongodb://mongodb:27017/guestbook
backend_1   |     at NativeConnection.db.on (/backend/routes/messages.js:10:11)
backend_1   |     at emitNone (events.js:106:13)
backend_1   |     at NativeConnection.emit (events.js:208:7)
backend_1   |     at NativeConnection.set (/backend/node_modules/mongoose/lib/connection.js:119:12)
backend_1   |     at /backend/node_modules/mongoose/lib/connection.js:529:26
backend_1   |     at err (/backend/node_modules/mongoose/node_modules/mongodb/lib/utils.js:415:14)
backend_1   |     at executeCallback (/backend/node_modules/mongoose/node_modules/mongodb/lib/utils.js:404:25)
backend_1   |     at err (/backend/node_modules/mongoose/node_modules/mongodb/lib/operations/mongo_client_ops.js:293:21)
backend_1   |     at connectCallback (/backend/node_modules/mongoose/node_modules/mongodb/lib/operations/mongo_client_ops.                                                               js:249:5)
backend_1   |     at process.nextTick (/backend/node_modules/mongoose/node_modules/mongodb/lib/operations/mongo_client_ops                                                               .js:471:7)
backend_1   |     at _combinedTickCallback (internal/process/next_tick.js:132:7)
backend_1   |     at process._tickCallback (internal/process/next_tick.js:181:9)
mongodb_1   | 2020-06-12T13:54:34.889+0000 I  STORAGE  [initandlisten] WiredTiger message [1591970074:889345][1:0x7f9a74c1                                                               ab00], txn-recover: Set global recovery timestamp: (0, 0)
mongodb_1   | 2020-06-12T13:54:34.892+0000 I  RECOVERY [initandlisten] WiredTiger recoveryTimestamp. Ts: Timestamp(0, 0)
mongodb_1   | 2020-06-12T13:54:34.896+0000 I  STORAGE  [initandlisten] Timestamp monitor starting
mongodb_1   | 2020-06-12T13:54:34.897+0000 I  CONTROL  [initandlisten]
mongodb_1   | 2020-06-12T13:54:34.897+0000 I  CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the d                                                               atabase.
mongodb_1   | 2020-06-12T13:54:34.897+0000 I  CONTROL  [initandlisten] **          Read and write access to data and confi                                                               guration is unrestricted.
mongodb_1   | 2020-06-12T13:54:34.897+0000 I  CONTROL  [initandlisten]
mongodb_1   | 2020-06-12T13:54:34.897+0000 I  CONTROL  [initandlisten]
mongodb_1   | 2020-06-12T13:54:34.897+0000 I  CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/ena                                                               bled is 'always'.
mongodb_1   | 2020-06-12T13:54:34.897+0000 I  CONTROL  [initandlisten] **        We suggest setting it to 'never'
mongodb_1   | 2020-06-12T13:54:34.897+0000 I  CONTROL  [initandlisten]
mongodb_1   | 2020-06-12T13:54:34.897+0000 I  CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/def                                                               rag is 'always'.
mongodb_1   | 2020-06-12T13:54:34.897+0000 I  CONTROL  [initandlisten] **        We suggest setting it to 'never'
mongodb_1   | 2020-06-12T13:54:34.897+0000 I  CONTROL  [initandlisten]
mongodb_1   | 2020-06-12T13:54:34.899+0000 I  STORAGE  [initandlisten] createCollection: admin.system.version with provide                                                               d UUID: 7c8bac0f-69df-42d7-9a16-3288e3cb146e and options: { uuid: UUID("7c8bac0f-69df-42d7-9a16-3288e3cb146e") }
mongodb_1   | 2020-06-12T13:54:34.905+0000 I  INDEX    [initandlisten] index build: done building index _id_ on ns admin.s                                                               ystem.version
mongodb_1   | 2020-06-12T13:54:34.905+0000 I  SHARDING [initandlisten] Marking collection admin.system.version as collecti                                                               on version: <unsharded>
mongodb_1   | 2020-06-12T13:54:34.905+0000 I  COMMAND  [initandlisten] setting featureCompatibilityVersion to 4.2
mongodb_1   | 2020-06-12T13:54:34.905+0000 I  SHARDING [initandlisten] Marking collection local.system.replset as collecti                                                               on version: <unsharded>
mongodb_1   | 2020-06-12T13:54:34.906+0000 I  STORAGE  [initandlisten] Flow Control is enabled on this deployment.
mongodb_1   | 2020-06-12T13:54:34.906+0000 I  SHARDING [initandlisten] Marking collection admin.system.roles as collection                                                                version: <unsharded>
mongodb_1   | 2020-06-12T13:54:34.906+0000 I  STORAGE  [initandlisten] createCollection: local.startup_log with generated                                                                UUID: 7dfc7e6d-3f66-4fcd-88fb-69a8e79c26ef and options: { capped: true, size: 10485760 }
mongodb_1   | 2020-06-12T13:54:34.911+0000 I  INDEX    [initandlisten] index build: done building index _id_ on ns local.s                                                               tartup_log
mongodb_1   | 2020-06-12T13:54:34.911+0000 I  SHARDING [initandlisten] Marking collection local.startup_log as collection                                                                version: <unsharded>
mongodb_1   | 2020-06-12T13:54:34.911+0000 I  FTDC     [initandlisten] Initializing full-time diagnostic data capture with                                                                directory '/data/db/diagnostic.data'
mongodb_1   | 2020-06-12T13:54:34.913+0000 I  SHARDING [LogicalSessionCacheRefresh] Marking collection config.system.sessi                                                               ons as collection version: <unsharded>
mongodb_1   | 2020-06-12T13:54:34.914+0000 I  NETWORK  [listener] Listening on /tmp/mongodb-27017.sock
mongodb_1   | 2020-06-12T13:54:34.914+0000 I  NETWORK  [listener] Listening on 0.0.0.0
mongodb_1   | 2020-06-12T13:54:34.914+0000 I  NETWORK  [listener] waiting for connections on port 27017
mongodb_1   | 2020-06-12T13:54:34.915+0000 I  CONTROL  [LogicalSessionCacheReap] Sessions collection is not set up; waitin                                                               g until next sessions reap interval: config.system.sessions does not exist
mongodb_1   | 2020-06-12T13:54:34.915+0000 I  STORAGE  [LogicalSessionCacheRefresh] createCollection: config.system.sessio                                                               ns with provided UUID: c366c860-db1b-4d09-a489-8803806e081a and options: { uuid: UUID("c366c860-db1b-4d09-a489-8803806e081                                                               a") }
mongodb_1   | 2020-06-12T13:54:34.919+0000 I  INDEX    [LogicalSessionCacheRefresh] index build: done building index _id_                                                                on ns config.system.sessions
mongodb_1   | 2020-06-12T13:54:34.924+0000 I  INDEX    [LogicalSessionCacheRefresh] index build: starting on config.system                                                               .sessions properties: { v: 2, key: { lastUse: 1 }, name: "lsidTTLIndex", ns: "config.system.sessions", expireAfterSeconds:                                                                1800 } using method: Hybrid
mongodb_1   | 2020-06-12T13:54:34.924+0000 I  INDEX    [LogicalSessionCacheRefresh] build may temporarily use up to 200 me                                                               gabytes of RAM
mongodb_1   | 2020-06-12T13:54:34.924+0000 I  INDEX    [LogicalSessionCacheRefresh] index build: collection scan done. sca                                                               nned 0 total records in 0 seconds
mongodb_1   | 2020-06-12T13:54:34.924+0000 I  INDEX    [LogicalSessionCacheRefresh] index build: inserted 0 keys from exte                                                               rnal sorter into index in 0 seconds
mongodb_1   | 2020-06-12T13:54:34.927+0000 I  INDEX    [LogicalSessionCacheRefresh] index build: done building index lsidT                                                               TLIndex on ns config.system.sessions
mongodb_1   | 2020-06-12T13:54:35.002+0000 I  SHARDING [ftdc] Marking collection local.oplog.rs as collection version: <un                                                               sharded>
backend_1   | App listening on port 8887
backend_1   | Press Ctrl+C to quit.
mongodb_1   | 2020-06-12T13:54:35.671+0000 I  NETWORK  [listener] connection accepted from 172.20.0.3:57958 #1 (1 connecti                                                               on now open)
mongodb_1   | 2020-06-12T13:54:35.674+0000 I  NETWORK  [conn1] received client metadata from 172.20.0.3:57958 conn1: { dri                                                               ver: { name: "nodejs", version: "3.1.13" }, os: { type: "Linux", name: "linux", architecture: "x64", version: "3.10.0-1062                                                               .18.1.el7.x86_64" }, platform: "Node.js v8.16.0, LE, mongodb-core: 3.1.11" }
backend_1   | connected to mongodb://mongodb:27017/guestbook
backend_1   | received request: GET /messages
mongodb_1   | 2020-06-12T13:55:44.019+0000 I  SHARDING [conn1] Marking collection guestbook.messages as collection version: <unsharded>
frontend_1  | response from http://backend:8887/messages: 200
frontend_1  | received request: POST /post
frontend_1  | posting to http://backend:8887/messages- name: 김욱태 body: hello world
backend_1   | saving message...
frontend_1  | response from http://backend:8887/messages200
mongodb_1   | 2020-06-12T13:55:52.142+0000 I  STORAGE  [conn1] createCollection: guestbook.messages with generated UUID: c03e5637-1a20-4540-af9f-514c8955de2d and options: {}
backend_1   | received request: GET /messages
mongodb_1   | 2020-06-12T13:55:52.146+0000 I  NETWORK  [listener] connection accepted from 172.20.0.3:57980 #2 (2 connections now open)
mongodb_1   | 2020-06-12T13:55:52.146+0000 I  INDEX    [conn1] index build: done building index _id_ on ns guestbook.messages
frontend_1  | response from http://backend:8887/messages: 200

여기서 프롬프트 떨어지지 않고 대기중이다. 끄지말고 다른 창을 띄워서 확인하자.
또한 데이터가 기록되거나 작동하는 것들이 모두 여기 로그로 남는다.

 

 

docker-compose down

 

설명

compose 정의 파일을 바탕으로 docker-compose up 으로 생성한 컨테이너나 도커이미지를 삭제할 때 사용한다. 기본적으로 docker ps -a 에서도 없어지므로, 완전히 컨테이너가 없어진다. 다음 구문으로 사용한다. docker-compose down [옵션]

 

옵션

--rmi all

모든 이미지까지 삭제

--rmi local

커스텀 태그가 없는 이미지만 삭제

-v, --volumes

compose 정의 파일의 데이터 볼륨 삭제

 

 

docker-compose stop

 

설명

docker-compose.yml 파일을 중지한다. docker ps -a에는 나온다. 즉 완전히 없어지는 게 아니고, 중단되는 것이다.

 

 

docker-compose start

 

설명

docker-compose.yml 파일을 시작한다. 맨 처음 docker-compose up을 실행한 후, docker-compose stop 한 상태에서만 가능한 명령이다.

 

 

 

docker-compose restart

 

설명

docker-compose.yml 파일을 재시작한다. 특정 컨테이너만 조작할 때는 명령의 인수에 컨테이너명을 지정한다. 

 

예시

docker-compose restart server_a

 

 

 

docker-compose pause

 

설명

- docker-compose.yml 파일을 일시정지 시킨다. docker ps 에는 exited가 아닌, 정상적으로 나온다.

 

 

 

docker-compose unpause

 

설명

- docker-compose.yml 파일을 재개시킨다.

 

 

 

docker-compose ps

 

설명

docker-compose로 작동하고 있는 컨테이너 목록이 나온다.

 

옵션

-q

컨테이너ID만 표시하게 함

 

예시

참고로, docker ps, docker container ls 등에서도 동일하게 확인 가능하다.

 

 

docker-compose logs

 

설명

- docker-compose로 올린 컨테이너들의 로그를 확인할 수 있다. watch 명령어와 연계해서 쓰면 실시간으로 로그를 확인할 수 있다.

 

 

 

docker-compose run

 

설명

- docker-compose로 시작한 컨테이너에서 임의의 명령을 실행할 때 사용한다. 특정 컨테이너에 진입해야 하거나, 상테를 체크하는 등 여러가지로 사용된다.

 

예시

docker-compose로 올린 컨테이너 중, mongodb라는 컨테이너에 쉘로 연결하기

(mongodb 라는 이름은, docker-compose.yml파일에 명시된 컨테이너 이름이다)

 

 

docker-compose port

 

설명

서비스의 공개용 포트 확인

구문 : docker-compose port [옵션] 서비스명 프라이빗포트번호

 

옵션

--protocol=proto

프로토콜, tcp 또는 udp

--index=index

컨테이너의 인덱스 수

 

예시

private 포트번호가 맞지 않으면 아예 결과가 나오지 않는다.

 

 

docker-compose config

 

설명

compose의 구성 확인. yml을 열어보는것과 동일하다.

 

예시

 

 

docker-compose kill

 

설명

실행 중인 컨테이너에 시그널을 송신한다. 시그널은 프로세스 간의 연락을 주고받는 장치로 리눅스 커널에 내장되어있다. 시그널에 대해서는 더 이상 자세한 설명은 생략한다. 옵션 없이 쓰면 SIGKILL을 송신한다. (-9, 프로세스 강제 종료)

 

옵션

-s

SIGKILL 말고 다른 시그널을 전송할 때 사용한다.

 

예시

컨테이너에 SIGINT 송신 : docker-compose kill -s SIGINT

 

 

 

docker-compose rm

 

설명

docker-compose로 생성한 컨테이너를 삭제한다.

 

+ Recent posts