티스토리 뷰

DevOps/Docker

도커를 복습하자

잉_민 2022. 4. 8. 17:44
728x90
반응형

1. 도커?

>>인프라 : 개발환경 구축

도커는 간단히 말하면

리눅스기반의 가상환경을 만들어주는데 이를 컨테이너라고 한다.

여기에 프로그램들(파이썬, open CV, postgeSQL ...)을 설치하고 프로그램 환경을 다 만들어 놓으면

Image 로 굳혀서 다른 팀원에게 똑같은 환경을 배포해 줄 수 있는 장점이있다.

개발자인 내가 HOST 사용자 client REGISTRY는 저장소?

2. 그러면 환경을 불러와보자

1. Doker Hub 에서 Image를 검색하고 다운 받을 코드를 볼수 있다.

 > 남이 만들어 놓은 것.

 (여기서 Doker Hub는 깃허브처럼 공개된 공간, 자신의 계정 Repository 비공개적으로 격리된 저장소)

(둘다를 아우르는 단어는 Doker Registry)

https://hub.docker.com/

 

Docker Hub Container Image Library | App Containerization

We and third parties use cookies or similar technologies ("Cookies") as described below to collect and process personal data, such as your IP address or browser information. You can learn more about how this site uses Cookies by reading our privacy policy

hub.docker.com

2. Doker File 

 > 내가 수정하여 설치 가능한 것.: 이미지 생성 출발점, 명령어를 작성하여 이미지를 구성할수 있다.

 

>>>>postgreSQL 도커파일 만들기

(DB랑 연결하는 거 이전의 글 참고)

https://ing-min.tistory.com/45?category=1055583 

 

Docker_postgre 컨테이너 만들어보기 실습

windows powerShell > 우분투 rm -f 강제삭제 rmi 이미지 삭제 ***경로로 이동 cd ***Dockerfile FROM postgres RUN apt-get update RUN apt-get install -y vim RUN apt-get install -y locales RUN sed -i 's/^..

ing-min.tistory.com

1. 도커파일을 만든다.

도커파일이렇게만든다.

FROM postgres
RUN apt-get update
RUN apt-get install -y vim
RUN apt-get install -y locales
RUN sed -i 's/^# \(ko_KR.UTF-8\)/\1/' /etc/locale.gen
RUN localedef -f UTF-8 -i ko_KR ko_KR.UTF-8
ENV LC_ALL ko_KR.UTF-8

 

2. 도커 필드 명령어로 이미지를 생성한다. Build

: 도커 파일을 기반으로 이미지를 생성하는 것을 build라고 한다.

cmd 열어서 코드 실행

docker build [옵션] Dockerfile 경로

. 경로는 여기에 라는 표시 (*빼먹으면 안 된다.)

-t 옵션은 도커 허브 로그인 id / 이미지이름:1.0 을 지정해줄 수있다. :1.0은 버전

3. RUN : 컨테이너 실행 및 확인 : 볼륨 마운트(-v) 컨테이너 만들기

docker run -dit -p 5434:5432 -v "폴더절대경로\db:/var/lib/postgresql/data" -e POSTGRES_PASSWORD=postgres --name pgv <이미지 이름>

postgres 를 도커에 올리게 되면 자체 볼륨이 생성된다 : 그 경로가 /var/lib/postgresql/data 이것이다.

그래서 자신이 만든 도커(폴더 절대경로)와 포스트그레SQL 볼륨 경로를 맵핑해주는 것이다 !

: 제대로 만들어졌다면, 경로의 db 폴더가 생겼을 것이다. 확인해보자

: -v 명령어는 아래 그림과 같은 개념이라고 생각하면 된다.

호스트 폴더와, 컨테이너 폴더를 연결시키는 역할이다.

무조건 host 기준이고, 만약 -v 옵션이 적용된 시점에 호스트에 폴더가 없다면, 해당경로의 컨테이너의 폴더를 복사한다.

만약에 host에 폴더가 있다면, host 폴더 기준으로 컨테이너한테 맵핑한다.

예를 들어서, -v 태그로 맵핑할 컨테이너 경로에 파일이 들어있는데, host에는 파일이 없는 경로를 맵핑하게 되면, host 기준으로 해당 컨테이너 경로의 파일들은 모두 날아가게 된다.

참고로, postgres 컨테이너의 /var/lib/postgresql/datadb서버 데이터 이기 때문에, 컨테이너를 날려도, 볼륨을 host에 맵핑해놨기 때문에, 데이터가 안날아간다.

백업할때, 자주 쓰이는 방식이고, 다른 사람과 공유하기도 쉽다.

https://devlog.jwgo.kr/2020/12/16/postgres-persist-volume-problem-with-docker/

 

도커(Docker)에서 컨테이너 삭제 시, Postgresql의 볼륨이 유지되지 않고 삭제되는 경우 문제와 해결

사이트 운영에 도움을 주실 수 있습니다. 고맙습니다. --> 도커(Docker)에서 컨테이너 삭제 시, Postgresql의 볼륨이 유지되지 않고 삭제되는 경우 문제와 해결방법 2020년 12월 16일 문제 도커에서 Postgre

devlog.jwgo.kr

 

> docker images
도커 이미지 확인

>docker run -td --name devops
생성한 이미지를 실행해야 도커파일에 지정된 대로 컨테이너 이미지가 생성된다.

>>>명령어

docker login : 도커 로그인하기
docker images : 만들어진 이미지 보기
docker ps -a : 현재 실행중인 컨테이너 리스트
docker stop <컨테이너명> :만약 지우고자 하는 컨테이너가 아직 running중이라면 먼저 멈추기리스트에 있는 컨테이너 중 지우고 싶은 컨테이너 지우기
docker rm <컨테이너명> : 리스트에 있는 컨테이너 중 지우고 싶은 컨테이너 지우기


docker volume ls : 해당 목록을 볼수 있다. postgresql은 기본적으로 도커로 올리면 자체 볼륨을 생성


docker inspect 컨테이너ID  : 컨테이너를 살펴보세요.  --name으로 mydb라는 이름을 주었으므로 docker inspect mydb
	Mounts라는 항목을 찾을 수 있는데
	정상적으로 내가 설정한 볼륨이 마운팅 되었다면 여기에 내가 설정한 1개의 볼륨만 보여야 합니다.

 

 

3. Docker Commit / Push

: 자신이 만든 환경 이미지 만들고  자신의 도커 레포짓토리에 올리기

4. Docker Compose로 환경 전체 공유

일반적으로 Web 컨테이너, DB컨테이너 .. 복수의 컨테이너  구축해야 초기 개발환경이 완성된다.

처리가 어려우므로 여러 Docker 컨테이너를 한번에 처리할 수 있는 Docker Compose 사용.

<<도커 컴포즈 파일 만들기>>

도커컴포즈파일만들기

> docker-compose.yaml

version: '3'
services:
  # database build
  database:
    container_name: book_db
    # 빌드될 dockerfile 위치
    build:
      context: ./database
    # 만들어질 이미지파일 이름
    image: book_db
    # 연결될 DB 환경설정 값
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=meta_bookstore
    volumes:
      - ./database/db:/var/lib/postgresql/data
      # - ./database/db/init.sql:/docker-entrypoint-initdb.d/create_tables.sql
    ports:
      - "5435:5432"
    restart: always
  
  # backend build
  backend:
    container_name: book_backend
    depends_on:
      - database
    build: 
      context: ./backend
    image: book_backend
    volumes:
      - ./backend:/usr/src/app
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=development
      - PORT=3000
      - LOGGER_LEVEL=debug
      - DB_HOST=database
      - DB_PORT=5432
      - DB_DATABASE=meta_bookstore
      - DB_ID=postgres
      - DB_PASS=postgres
      - DB_DIALECT=postgres
    restart: always
    command: "npm start"

  # # frontend build
  # frontend:
  #   container_name: book_frontend
  #   depends_on:
  #     - backend
  #   build: ./frontend/bookscanner-frontend
  #   image: book_frontend
  #   volumes:
  #     - ./frontend/bookscanner-frontend:/app
  #   ports:
  #     - "8080:8080"
  #   restart: always

# # MQTT server build
  mqtt:
    image: eclipse-mosquitto
    hostname: mosquitto
    restart: always
    ports:
      - "1883:1883"
      - "8088:8088"
    volumes: 
      - ./mqtt-simulator-main/mqtt/config/mqtt/config:/mosquitto/config
    tty: true
    stdin_open: true
    networks:
      - webnet
networks: 
  webnet:

: mqtt , backend, DB 세개의 컨테이너를 한번에

*도커파일 만들기는 다음 사이트 참고 :

https://khj93.tistory.com/entry/Docker-Docker-File-%EC%9E%91%EC%84%B1%ED%95%98%EA%B8%B0-%EB%AA%85%EB%A0%B9%EC%96%B4

 

[Docker] Docker File을 이용하여 Docker Image만들기

Docker File Docker File이란 Docker Image를 만들기 위한 설정 파일입니다. 여러가지 명령어를 토대로 Docker File을 작성하면 설정된 내용대로 Docker Image를 만들 수 있습니다. 이전 포스트에서도 설명했듯이

khj93.tistory.com

<<도커 컴포즈 업시키기>>

경로에서 터미널 열기하여 

docker-compose up

DB 이름설정이 바르게 되어있어야한다.

도커 허브 윈도우에서 확인하기

>>readme

- pgAdmin4에서 meta_bookstore DB 생성 or DB connection 확인
- DBeaver에서 meta_bookstore, port 5432 연결되는지 확인
- 프로그램 끄면 connection도 끊어지니 끄지말고 실행하기
  위 두 항목을 모두 확인 하고 compose 실행해야 안정적으로 실행됨

최상위 폴더에서 $ docker-compose up
ctrl+C 로 실행 취소하고 $ docker-compose down
728x90
반응형

'DevOps > Docker' 카테고리의 다른 글

도커 _ AMD / Window 10 home 에서 Hyper-V 가상환경 설치  (0) 2022.04.21
Docker_postgre 컨테이너 만들어보기 실습  (0) 2022.02.15
Docker_push  (0) 2022.02.12
Docker_Docker file & build  (0) 2022.02.11
Docker_commit  (0) 2022.02.11
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함
반응형