보라코딩

Day 10, 도커 본문

개발자가 되었다?

Day 10, 도커

new 보라 2023. 8. 29. 12:53

도커 이미지 만드는 법

  • commit : 이미 사용하는 컨테이너를 이미지로 만들기 (back up)
  • build : 도커파일을 통해 구체적으로 이미지 생성

 

VSC에서 터미널에서 실습

  • docker run --name web-server -it ubuntu:22.04 : 우분투 이미지 다운 받고, 컨테이너 이름은 web-server로 컨테이너 실행
  • docker commit
    • docker commit : 아래와 같이 사용하라고 명령어 알려줌
    • docker commit web-server web-server-commit : 이미지 만들어짐
    • docker images : 이미지 만들어졌는지 확인
  • docker build
    • Dockerfile 생성하기
      • FROM ubuntu:22.04 : 내용 입력하고 저장
    • docker build : 아래와 같이 build 형식 알려줌
    • docker build -t web-server-build . : 현재 폴더에 위치해 있으면 위치 대신 . 으로

 

파이썬 설치하기

  • apt update : 우분투 최신상태로 업데이트
  • apt install python3 : 오류나면 앞에 sudo 붙여서 해결했다
    • 위에 두 개 명령 && 사용해서 합치기
    • RUN apt update && apt install -y python3 : Dokerfile 내 이미지 생성 과정에서 실행할 명령어
  • mkdir -p /var/www/html : 폴더 생성
  • cd /var/www/html : 이동
    • WORKDIR /var/www/html : 이미지 내에서 명령어를 실행할 디렉토리 설정
  • echo "Hello, <strong>Docker</strong> > index.html : 요청 응답해줄 기본 웹페이지 생성하여 index.html 파일에 저장
    • Run echo "Hello, Docker > index.html : 아래 코드가 더 좋음
    • COPY "index.html", "."] : 호스트에 있는 index.html을 /var/www/html로 복사하라는 의미
  • python3 -m http.server : 파이썬3에 내장되어 있는 웹서버 시작되면서 기본 포트인 8000번 포트에 리스닝...
    • CMD ["python3", "-u", "-m", "http,server"] : 컨테이너 실행시 실행할 명령어
  • docker build -t web-server-build .
  • docker rm --force web-server : 같은 이름이 있을 수도 있으니 지우고 진행
  • docker run -p 8888:8000 --name web-server web-server-build pwd
    • web-server-build를 바탕으로 web-server라는 이름의 컨테이너 생성 (호스트 8888, 컨테이너 8000 포트 연결)
    • pwd 붙이면 pwd가 cmd 대신에 시작됨. 즉, 시작 명령을 변경 가능 (오버라이딩)

 

  • RUN과 CMD 차이
    • run은 이미지 생성 시점에 생성
    • cmd는 이미지로부터 컨테이너가 가동될 때 실행됨

 

참고

  • /var/www/html 경로는 리눅스 서버의 기본 홈디렉토리



Docker compose

Web Browser -> 워드프레스(설치형 블로그) -> MySQL

 

 

 

 

docker network create wordpress_net


참고) mysql 컨테이너 실행
docker \
run \
    --name "db" \
    -v "$(pwd)/db_data:/var/lib/mysql" \
    -e "MYSQL_ROOT_PASSWORD=123456" \
    -e "MYSQL_DATABASE=wordpress" \
    -e "MYSQL_USER=wordpress_user" \
    -e "MYSQL_PASSWORD=123456" \
    --network wordpress_net \
mysql:5.7.16


참고) wordpress 컨테이너 실행
docker \
    run \
    --name app \
    -v "$(pwd)/app_data:/var/www/html" \
    -e "WORDPRESS_DB_HOST=db" \
    -e "WORDPRESS_DB_USER=wordpress_user" \
    -e "WORDPRESS_DB_NAME=wordpress" \
    -e "WORDPRESS_DB_PASSWORD=123456" \
    -e "WORDPRESS_DEBUG=1" \
    -p 8080:80 \
    --network wordpress_net \
wordpress:latest

 

  • http://localhost:8080/ 들어가면 워드프레스 화면 나옴
  • 지우고 docker-compose로 사용해보자
    • docker rm --force app
    • docker rm --force db
    • docker network rm workpress_net
    • 생성된 파일도 직접 다 지우기

 

compose 진짜 해보기!

  • `docker-compose.yml' 파일 생성 후 아래와 같이 입력
version: "3.7"

services:
  db:
    image: mysql:5.7.16
    volumes:
      - ./db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress_user
      MYSQL_PASSWORD: 123456

  app:
    depends_on: 
      - db
    image: wordpress:latest
    volumes:
      - ./app_data:/var/www/html
    ports:
      - "8080:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpress_user
      WORDPRESS_DB_PASSWORD: 123456 

 

  • docker-compose up 코드 실행 시, 오류 발생!!!
    • docker.credentials.errors.InitializationError: docker-credential-desktop.exe not installed or not available in PATH
    • 해결방법
      • nano ~/.docker/config.json
      • CredsStore를 CredStore로 변경
      • sudo snap install docker
      • sudo apt install docker-compose
  • docker-compose down : compose 종료하기

 

compose 파일 작성 규칙

  • version 필수 입력
  • services : 지시어 안에 컨테이너 넣기
  • db : 컨테이너 이름
  • ./db_data:/var/lib/mysql : 현재 디렉토리의 db_data와 /var/lib/mysql 연결
  • environment : 환경변수 setting

 

  • 워드프레스 컨테이너 : Web Server, PHP, /var/www/html/에 소스코드 보관
  • image:wordpress:lattest : 워드프레스 최신버전
  • depends_on: -db : mysql이 먼저 만들어지게 하려면
  • name은 app으로 설정
  • ./app_data:/var/www/html : app_data와 /var/www/html 연결
  • ports: -"8080:80" : 앱 컨테이너의 80번 포트와 호스트의 8080 포트 연결
  • 도커 컴포즈는 네트워크 만들고 연결하는 작업 필요 없음 (자동)

 

shell은 직접 네트워크 만들고 연결 필요

  • docker network create wordpress_net : 네트워크 형성
  • network wordpress_net : 데이터베이스 컨테이너를 네트워크에 연결 / 워드프레스를 네트워크에 연결

 

compose 진행과정 설명

  1. 브라우저에 입력 http://localhost:8080
  2. 8080번 포트로 들어오면 80번 포트 연결된 앱 컨테이너로 접속
  3. 웹서버 접속 -> PHP 요청 넘기고 -> var/www/html 읽어서 동작
  4. 같은 네트워크에 있는 db로 가서 3306을 리스닝하는 mysql 서버가 받아
  5. var/lib/mysql 디렉토리에 연결된 db_data에서 데이터 꺼내서 결과를 php해줌
  6. php는 웹서버에 응답해서 웹 브라우저에 결과 알려줌
  7. 워드프레스 실행됨

 

 

'개발자가 되었다?' 카테고리의 다른 글

Day 12, C#  (0) 2023.08.31
Day 11, 도커  (0) 2023.08.30
Day9, 도커 설치, 명령어 + 참고자료  (0) 2023.08.28
Day 8, Mongo DB  (1) 2023.08.25
대댓글 DB  (0) 2023.08.25