Inception Step 1: docker-compose

James An·2022년 10월 4일
0

42SEOUL

목록 보기
9/11

개요

  • docker orchestration with docker-compose

요구사항

  • 3 Docker Service
    • nginx, mariadb, wordpress + php
  • 2 Docker volume
    • mariadb
    • wordpress + php
  • 1 Docker network

step 1: docker and docker-compose

docker 수동으로 build

  • docker run --name nginx -itd -p 80:80 debian:buster

    • nginx라는 컨테이너 이름으로 debian:buster image를 빌드하고 컨테이너 생성
    • -it: 컨테이너와 쉘을 통해 상호작용하겠다라는 의미
      • 이 옵션이 없다면 container가 바로 꺼짐. why?
    • -d: 상호작용하고 있는 터미널이 끝나도 background에서 계속해서 컨테이너 구동
    • -p: port 80으로 포트포워딩
    • name 생성할 컨테이너 이름 설정
    • debian:buster 사용할 이미지 이름
  • docker exec -it nginx bash

    • background에서 돌아가고 있는 컨테이너에 접속해서 bash로 상호 작용
  • debian update

    • apt-get update -y
    • apt-get upgrade -y
  • nginx install and start

    • apt-get install nginx -y
    • service nginx start

docker build with Dockerfile

  • docker build 과정을 아래와 같이 Dockerfile로 자동화시켜 image를 생성할 수 있다.

    // Dockerfile
    
    FROM debian:buster 
    
    RUN apt-get update -y
    RUN apt-get upgrade -y
    RUN apt-get install nginx -y
    
    EXPOSE 80
    • debian:buster에서 base image 불러오기
    • apt-get으로 업데이드 및 필요한 패키지 설치
  • docker build . -t nginx:latest로 이미지 생성

    • . : 현재 경로의 Dockerfile 실행
    • -t: image 이름 설정
  • docker run -it -d -p 80:80 --name nginx nginx:latest

    • nginx:latest 이미지를 사용하고, 80번 포트로 소통하는nginx라는 이름을 가진 컨테이너 생성
  • docker exec -it nginx bash로 해당 컨테이너에 접근할 수 있다.

Dockerfile로 nginx conf, ssl 적용하기

  • ssl 적용을 위해 apt-get install로 openssl을 설치하는 명령어 추가.

    FROM debian:buster 
    
    RUN apt-get update -y
    RUN apt-get upgrade -y
    RUN apt-get install nginx -y
    RUN apt-get install openssl -y
    
    COPY    conf/default /
    RUN     mv default /etc/nginx/sites-available/default
    
    RUN     openssl genrsa -out server.key 4096 
    RUN     openssl req -new -key server.key -subj "/C=KR/ST=Seoul/O=42Seoul/OU=Shin" -out server.csr
    RUN     openssl req -x509 -in server.csr -key server.key -out server.crt
    RUN     mv server.crt /etc/ssl/certs/
    RUN     mv server.csr server.key /etc/ssl/private
    
    ENTRYPOINT     ["nginx", "-g", "daemon off;"]
    
    EXPOSE 443
  • conf 파일 nginx에 적용

  • ssl 보안 설정

  • ENRTYPOINT: 컨테이너가 시작되었을 때 스크립트 혹은 명령을 실행하는 역할. 즉 docker run 명령으로 컨테이너를 생성하거나, docker start 명령으로 정지된 컨테이너를 시작할 때 실행된다. ENTRYPOINT는 Dockerfile에서 단 한번만 사용할 수 있습니다

docker build with docker-compose

  • docker-compose로 Dockerfile을 읽어 이미지 생성 후 컨테이너를 생성하는 일련의 과정을 자동화해보자.

    version: "3.8"
    
    services:
      nginx:
        build: requirements/nginx
        container_name: nginx
        ports:
          - 443:443
        restart: always
    
  • version: docker version에 따라 작성

  • service : 각각의 컨테이너로 구현될 어플리케이션 명시를 위한 구문

    • build : 이미지를 빌드할 도커 파일 경로
    • port : 맵핑할 포트

      포트 맵핑이란? Port forwarding


    • volume : 볼륨 설정을 위한 항목, 연동이 필요한 로컬 호스트의 안의 볼륨 경로와 컨테이너의 경로 명시
    • .env : 컨테이너 안에서 사용할 환경변수 명시
    • volumes : 로컬 볼륨 파일과 컨테이너 파일 연결
profile
born 2 code :)

0개의 댓글