9-2. 빌드에서 운영까지

몽자비루 ㅣ 2024. 5. 10. 12:23

  1. 도커 컴포즈 설치하기
    1. 참고 링크 : https://docs.docker.com/compose/install/standalone/
    2. docker compose 다운로드하기
    3. 실행커미션이 없는 상태
    4. 실행커미션 할당
  2. 컨테이너 빌드에서 운영까지
    1. 참고 링크 : https://docs.docker.com/compose/gettingstarted/
    2. 디렉토리 생성하기
    3. 빌드를 위한 Dockerfile생성
      • app.py 생성하기
      • 도커파일에서 컨테이너 python base image에 library 설치할 때,
        requirements.txt에 있는 라이브러리를 설치함을 명시함.
      • Dockerfile 생성함

        • base image = python 
        • 작업 directory = /code
        • 환경변수 FLASK_APP=app.py
                          FLASK_RUN_HOST=0.0.0.0
        • 기본 애플리케이션 설치하기
        • RUN pip install -r requirements.txt 을 통해
          pip 명령어로 requirement 설치하면 위 flask와 redis가 python 위에 설치됨
    4. docker-compose.yml 생성하기
      • 현재 디렉토리 안에있는 Dockerfile을 기준으로 container build
      • port 를 8000> 5000으로 포워딩
      • redis 컨테이너 실행
    5. 도커 컴포즈에게 컨테이너 빌드 및 실행 명령
      • docker compose up : yaml파일을 이용하여 빌드 및 실행을 요청, web과 redis 컨테이너가 실행됨
      • 실행
    6. 기존에 동작중인 container 을 수정하여 운영
      • 도커 이미지 확인
      • 도커 컴포즈 중지
        • docker-compose stop : 컨테이너 정지
        • docker-compose down : 컨테이너 리소스 삭제
          단, down은 해당 compose가 있는 directory에서 실행해야 함.
      • compose.yaml 파일 수정
        • 파일이 변경될 때마다 Compose는 파일을 /code컨테이너 내부의 해당 위치에 동기화함.
          복사되면 번들러는 다시 시작하지 않고도 실행중인 애플리케이션을 업데이트함.
      • docker-compose watch 옵션 /백그라운드 모드로 실행
      • docker-compose ps
        • 현재 docker-compose 에 의해서 실행된 container 목록 확인
      • 실행
      • app.py 수정
    7. docker-compose scale 변경
      • docker-compose scale [name] = n 을 통해 scale in/out 가능
        • 다만 포트포워딩 하고있는 포트가 정해져있기 때문에 외부에접속할수 있는 container 은 사용 X (충돌)
    8. 그 외 명령어
      • docker-compose run [컨테이너명] env
        • web 컨테이너의 환경변수 확인
      • docker-compose logs [컨테이너명]
        • compose를 통해 동작되고 있는 컨테이너 기록 확인
      • docker-compose down --volumes
        • docker-compose에서 만들어진 volumes도 동시에 삭제됨.
  3. MYSQL 데이터베이스를 사용하는 wordpress 운영하기
    1. 참고 링크 : https://github.com/docker/awesome-compose/tree/master/official-documentation-samples/wordpress/
    2. 디렉토리 생성
      1. wordpress = webpage 를 만듬.
      2. mysql = DB를 저장함
    3. docker-compose.yml파일 생성.
      • DB 서비스
        • image: mariadb:10.6.4-focal
        • volumes: db_data:/var/lib/mysql
        • restart: 항상
        • 환경 변수 :
          - MYSQL_ROOT_PASSWORD=somewordpress
          - MYSQL_DATABASE=wordpress
          - MYSQL_USER=wordpress
          - MYSQL_PASSWORD=wordpress
        • 호스트 내부 포트 노출 : 3306, 33060
      • wordpress 서비스
        • image: wordpress:latest
        • volumes: wp_data:/var/www/html
        • ports: 컨테이너 내부의 80 (뒤) 포트가 호스트의 80 (앞)포트로 매핑되어 다른 호스트도 호스트 포트로 접근 가능
        • restart: 항상
        • 환경 변수 :
          - WORDPRESS_DB_HOST=db
          - WORDPRESS_DB_USER=wordpress
          - WORDPRESS_DB_PASSWORD=wordpress
          - WORDPRESS_DB_NAME=wordpress
        • 만약, wordpress 에서 depends_on: \n - db 로 한다면,
          반드시 db 서비스를 실행한 뒤에 wordpress 시작. 
    4. docker-compose 배포(background모드)
    5. docker-compose shutdown & cleanup