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로 생성한 컨테이너를 삭제한다.
'Docker Basic' 카테고리의 다른 글
[Docker Basic] 23. 도커허브와 github 연동하여 이미지 생성하기 (0) | 2020.06.27 |
---|---|
[Docker Basic] 22. Private Registry 구축하기 (0) | 2020.06.27 |
[Docker Basic] 19. 여러 컨테이너 관리 - docker compose.yml 톺아보기 (1) | 2020.06.25 |
[Docker Basic] 18. 여러 컨테이너 관리 - docker compose 개념 (0) | 2020.06.25 |
[Docker Basic] 17. Dockerfile 상세 명령 (0) | 2020.06.15 |