dockerfile 여러개를 좀더 효율적이게 쓰기위해 docker compose파일이 있다.
하나의 파일에 여러개의 dockerfile을 컨트롤 및 빌드 할 수 있고 up 명령어로 한번에 실행도 가능하다
또 down 으로 끄는것도 가능
docker compose up -d
./run_tests
docker compose down
예시를 보며 확인해보자
version: "3.9" # optional since v1.27.0
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
- logvolume01:/var/log
depends_on:
- redis
redis:
image: redis
volumes:
logvolume01: {}
이렇게 3.9 docker compose 를 사용하고
services는
web 과 redis를 만듬
그리고 그설정들을 넣어주고
volumes으ㅡ로 logvolume01를 만든다(이뒤에 {} 가뭔지 모르겟네)
여러가지 서비스에대한건
https://docs.docker.com/compose/compose-file/05-services/
Services top-level element
docs.docker.com
여기를 보는게 최고인거같다
다있는듯
docker-compose를 쓰는이유
컨테이너의 볼륨 데이터를 보존하고 변경된 컨테이너만을 재생성하여 좀더 효율적으로 사용가능하다
음 docker-compose도 플러그인이였네...
sudo apt-get update
sudo apt-get install docker-compose-plugin
이런식으로 설치
이제 실행해보는 단계
https://docs.docker.com/compose/gettingstarted/
Try Docker Compose
docs.docker.com
이부분을 따라서 해보면 된다
.env 와 같은 환경변수 설정하는것!
이것도 중요한거 같음
cat .env
TAG=v1.5
cat docker-compose.yml
services:
web:
image: "webapp:${TAG}"
docker compose config
services:
web:
image: 'webapp:v1.5'
이런식으로 결과가 환경변수로 변경된 것을 볼 수 있다
또한 --env-file 명령어로 특정 env를 지정할 수도 있다
Syntax 음... 이건 미니쉘 했으면 syntax가 익숙 할 것이다.
quoted 에서 변화하는걸 보여주는거 같은데
미니쉘과 같다 고 보면 된다
그리고 ${VAR:-default} 같은 거는 값그니깐 export 같은 느낌 인데 값이 안들어가있으면 default 값이 있으면 변화없음
${VAR-default}는 VAR자체가 선언안된경우
export 로 예들자면
export VAR
export
VAR 암것도 없음
${VAR:-default}
default 출력
VAR2 선언안함
${VAR2-default}
default 출력
export VAR3
export
VAR3 암것도 없음
${VAR3:?error}
error 출력
VAR4 선언안함
${VAR4?error}
error 출력
그밑에 +syntax는 변경해주는거 같다
이제 사전정의된 환경변수들을 보자
- COMPOSE_CONVERT_WINDOWS_PATHS
- COMPOSE_FILE
- COMPOSE_PROFILES
- COMPOSE_PROJECT_NAME
- DOCKER_CERT_PATH
- COMPOSE_PARALLEL_LIMIT
- COMPOSE_IGNORE_ORPHANS
- COMPOSE_REMOVE_ORPHANS
- COMPOSE_PATH_SEPARATOR
꾀많음
- COMPOSE_CONVERT_WINDOWS_PATHS
이거는 윈도우 스타일에서 유닉스 스타일로 변경하는거 같다
1이 활성화 0 이 비활성화
- COMPOSE_FILE
compose.yaml 파일이 지금 위치에없으면 상위 파일을 뒤진다고 한다음...
mac 리눅스는 ':' 으로 윈도우는 ';' 로 경로를 구분하여 여러개를 검색하게 할 수 있는듯? 하다 왜필요할까??
- COMPOSE_PROFILES
프로파일의 설정을 할 수 있는거같다.
뭐 기본 디폴트를 뭐로 설정할지 정도??
- COMPOSE_PROJECT_NAME
이름을 정하는거
-p 와
name: 이런식
basename 으로 이름을 정해준다는 거같다
-DOCKER_CERT_PATH
이거 크레딧 페치인거같은데.. 데몬 소켓 쪽에서 나온적이 있다
일단 넘어가자
- COMPOSE_PARALLEL_LIMIT
동시 엔진 갯수를 제한하는거 같다 음...
- COMPOSE_IGNORE_ORPHANS
음 이건 뭘까??? 없어진?? 안쓰는?? 컨테이너를 감지하려고 하지않는다??
뭘까?
- COMPOSE_REMOVE_ORPHANS
이건 위에꺼 없에는거 같다
- COMPOSE_PATH_SEPARATOR
구분기호를 정하는거 인거같은데... 어케쓰는거지?
암튼 이런 환경변수들이 숨어 있음
프로필 사용
프로필 사용 프로필은 선택적 서비스 활성화로 Compose 어플리케이션 모델을 다양한 용도 및 환경에 사용할 수 있게 합니다. 각 서비스를 0개 이상의 프로필에 매핑하면 됩니다. 매핑되지 않은 경
docs.oofbird.me
profiles 사용법을 잘 번역해주셨다
profiles 은 뭔가 연관성이라고 생각하면 좋을거 같다.
depends_on은 이걸 실행하려면 무언가 있어야한다는 조건을 주었으면
profiles는 이걸 실행하려면 이 프로파일들을 같이 실행시켜라 라는 느낌?
그래서 그룹으로 묶어 이중 하나라도 실행되면 다같이 실행되게 하는 시스템같다.
GPU관심이 있긴한데...... 아직 이해가 잘안된다 그리고 맥에서 사용법등 이 궁금하긴하다
여러개의 yml 파일을 겹겹으로 할 수도 있는거 같다
혹은 변수 이름이 중복됫을때 겹친것을 이후나온것으로 변경? 하는듯한느낌이다.
이건.. 해보면서 터득해야할듯...
이제 네트워크 가자
다들 아는듯 ports로 로컬과 docker를 이어주는데
신기한거는 myapp_default라는게 docker-compose 하면 저절로 만들어진다는 것이다
services:
web:
build: .
ports:
- "8000:8000"
db:
image: postgres
ports:
- "8001:5432"
이렇게 포트를 해서 8001 로 5432를 접속할수 있지만
myapp_default에서 db라고 정의를 해주기도 하는거 같다
postgres://db:5432로 접속이 된다고 하니...오 신기
아니면 postgres://8001:5432 이렇게 해야할듯
links 다른 컨테이너 끼리 네트워크를 공유할 수 있게 만드는 것
services:
web:
build: .
links:
- "db:database"
db:
image: postgres
이런식으로 이름을 정해서??? 이어주는 방식
https://cumulus.tistory.com/34
Docker 네트워크 설정 및 link 기능
1. docker0 Docker가 설치되면 host에 기본으로 생성되는 네트워크 인터페이스 카드이다. 컨테이너의 네트워크 카드를 지정하지 않으면 docker0의 기본적으로 172.16.0.0/16 네트워크를 사용하게 된다. docke
cumulus.tistory.com
이분이 실험하신걸 볼 수 있다
오 또한 default로 모든 네트워크 기본설정을 할 수 도 있다
services:
web:
build: .
ports:
- "8000:8000"
db:
image: postgres
networks:
default:
# Use a custom driver
driver: custom-driver-1
그리고 순서도??
이건 wait-for-it.sh or wait-for 같은 명령어가 또있나보다
https://github.com/vishnubob/wait-for-it
GitHub - vishnubob/wait-for-it: Pure bash script to test and wait on the availability of a TCP host and port
Pure bash script to test and wait on the availability of a TCP host and port - GitHub - vishnubob/wait-for-it: Pure bash script to test and wait on the availability of a TCP host and port
github.com
예시이다
이걸로 순서를 만든다고 하는데....음
'42Seoul > Docker' 카테고리의 다른 글
openssl tls 알고리즘 해석해주신분 + mac cpu 보는법 (0) | 2023.05.18 |
---|---|
docker search version 검색하기 (0) | 2023.05.18 |
32. docker 메뉴얼 파해치기 Build buildKit (0) | 2023.04.01 |
31. docker 메뉴얼 파해치기 Build Attestations (0) | 2023.03.31 |
30. docker 메뉴얼 파해치기 Build Bake (0) | 2023.03.31 |