이 글에선 mount, port 설정의 편의를 위해 단일 컨테이너를 생성하더라도 docker-compose를 사용한다.
docker-compose.yaml
version: "3.9"
services:
nginx:
image: nginx:1.23.2
ports:
- "80:80"
environment:
- TZ=Asia/Seoul
# volumes:
# - ./nginx.conf:/etc/nginx/nginx.conf
ports는 "호스트포트:컨테이너포트" 형식이므로 "80:80"으로 설정한다. nginx에서 기본적으로 설정되어있는 포트가 80이므로 80을 연결한다. 이말은 설정에서 변경시키면 바꿔도 상관없다는 말이다. 호스트도 겹치지 않는 다른 포트로 설정해도 된다.
environment는 컨테이너 생성 시 설정될 환경 변수를 작성하는 블록이다. timezone을 기본적으로 서울로 설정하기 위해 추가해뒀다. (환경 변수가 많아 줄이고 싶거나 드러나면 안되서 보여주지 않고 설정하고 싶다면 .env와 같은 파일에 이름=값 형태로 환경 변수 하나당 한 줄씩 입력하고 env_file 블록을 nginx블록의 하위에 새로 넣고 해당 블록 하위에에 추가한다.)
volumes가 주석처리 되어있다. 이는 처음엔 nginx.conf 파일이 없는데 이 상태에서 실행시키면 기본적으로 디렉터리를 만들고 연결한다. 당연히 컨테이너 내의 nginx.conf는 파일이기 때문에 주석이 없는 상태로 실행하면 디렉터리가 아니라는 에러를 뱉는다.
먼저 위 파일이 있는 위치에서 docker-compose up -d로 컨테이너를 실행시킨 뒤 먼저 conf파일을 컨테이너에서 가져와야 한다. 아래 명령을 실행하자.
docker cp 컨테이너이름:/etc/nginx/nginx.conf ./
이제 docker-compose에서 주석처리되어있던 volumes와 그 밑의 줄 모두 해제하고 다시 실행해보면 똑같이 동작할 것이다.
다른 점은 호스트에 복사해둔 nginx.conf를 수정하면 컨테이너의 nginx.conf가 수정되는 것과 똑같아진다.
여기선 파일 하나를 연결하는 것만 다뤘지만 volumes 주석 이유를 말했을 때 기본적으로 디렉터리를 연결한단 점을 생각해서 html파일들을 넣기위해 디렉터리를 연결할 수도 있다. (nginx의 index.html 기본 위치는 /usr/share/nginx/html)
'개발 > Server' 카테고리의 다른 글
localhost 도메인설정 (0) | 2022.05.08 |
---|---|
docker 컨테이너 ip 고정 (0) | 2022.05.08 |
docker 명령어 (0) | 2022.04.22 |
[Ubuntu] docker 설치 (0) | 2022.04.22 |
[Ubuntu] 서버 시간대(timezone) 변경 (0) | 2022.04.20 |