
version: "3"
services:
app:
build:
context: ./01_FLASK_DOCKER
dockerfile: Dockerfile
links:
- "db:mysqldb"
ports:
- "80:8080"
container_name: appcontainer
depends_on:
- db
db:
image: mysql:5.7
restart: always
volumes:
- ./mysqldata:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=1234
- MYSQL_DATABASE=db
ports:
- "3306:3306"
container_name: dbcontainer
build
이미지를 Dockefile을 기반으로 작성할 시 사용한다.
links
컨테이너 내부에서, 다른 컨테이너와 연결할 때 사용한다.
links:
- "db:mysqldb"
db 컨테이너와 연결하여 컨테이너 내에서 db 또는 mysqldb라는 이름으로 사용한다.
하지만 해당 옵션을 아예 쓰지 않아도, docker-compose.yml 파일에 기재된 각각의 컨테이너 이름으로, 각 컨테이너 내부에서 접속이 가능하다.
ex. docker-compose exec app /bin/bash
docker compose 내의 app 컨테이너의 쉘을 실행시킬 수 있음.
cf. mysql은 굳이 포트를 설정해 줄 필요는 없다. 어차피 외부에서 mysql로 직접 접속할 일은 없기 때문이다.
cf. vi에서 한 줄 삭제시 : 일반모드에서 dd 입력, 이전으로 되돌리기: 일반모드에서 u 입력
cf. docker-compose.yml 작성 시 꼭 두칸씩 들여쓰기 하는 것을 지켜야 오류가 나지 않는다.
컨테이너 실행을 위해 특정 필요 파일을 포함하는 폴더의 내용을 다른 디렉토리로 옮길 시 (ex. COPY ./ /app) 필요 파일을 제외한 의미없는 파일과 폴더들도 함께 옮겨지게 되는데, 이때 .dockerignore를 작성하여 다른 의미없는 파일/폴더들은 옮길 때 제외할 수 있다.
.gitignore와 유사한 역할을 수행한다.
.dockerignore 파일 포맷
# 주석 */Dockerfile* */*/Dockerfile* Dockerfile? Dockerfile* *.txt !Dockerfile.txt
#
주석을 의미한다.
*/Dockerfile*
현재 폴더의 하위 폴더에서 Dockerfile로 시작하는 파일/폴더는 제외시킨다.
ex. /root/Dockerfile.txt
*/*/Dockerfile*
현재 폴더의 하위 폴더의 하위 폴더에서 Dockerfile로 시작하는 파일/폴더는 제외시킨다.
ex. /root/one/Dockerfile.txt
Dockerfile?
?는 어떤 한 글자를 의미하므로, 현재 폴더에서 Dockerfile1과 같은 파일/폴더들을 제외한다.
Dockerfile*
현재 폴더에서 Dockerfile로 시작하는 파일/폴더들을 제외한다.
*.txt
현재 폴더에서 .txt 확장자를 가지는 파일들을 제외한다.
!Dockerfile.txt
!는 해당 파일은 제외 조건에서 열외한다는 의미이다.
따라서 Dockerfile.txt는 제외되지 않는다.