Docker로 서버 띄우기

길셔·2022년 6월 2일
0

SERVER

목록 보기
5/7

docker의 dockerfile과 docker-compse를 사용해서 서버를 띄워보자

  • docker의 큰 흐름

1. docker 사용

sudo su
apt-get update && apt-get upgrade
apt install docker.io
  • 관리자 권한으로 업데이트 후 도커 설치
docker 붙여넣기
  • docker hub에서 설치할 파일 검색 후 복사 붙여넣기
docker images
  • 설치된 파일 확인
docker run 
docker exit 
  • 도커 컨테이너 만들고 실행
  • 뒤에는 앞서 서버에 띄울 때와 똑같이 git clone해서 소스 가져온 후에 clean build 하면 실행

2. dockerFile를 사용

sudo su
apt-get update && apt-get upgrade
  • 관리자 권한으로 실행 후 업데이트
docker ps 
  • 현재 가동중인 컨테이너 출력
  • 컨테이너가 없으면 설치하는 명령어 출력해줌
apt install docker.io
  • 설치
cd  /
ls  
  • 루트 폴더로 이동 후
  • 파일들 확인
mkdir 폴더이름
ex) mkdir test
  • 작업할 폴더 만들고
cd 폴더이름/ 
ex) cd test/
  • 해당 폴더 경로로 이동
vi Dockerfile
  • Dockerfile안에 내용 작성을 위한 명령어

  • Dockerfile 작성 명령어

FROM : 베이스 이미지 지정

RUN : 이미지를 지정하면서 실행할 명령 지정

ENTRYPOINT : 컨테이너 어플 지정 ( 컨테이너 시작 시 실행할 명령어 )

EXPOSE : 컨테이너의 포트 지정

ADD : 이미지 생성 시 파일 추가

CMD : 컨테이너 어플 지정 (컨테이너 시작 시 명령어 지정)
  • 해당 명령어를 사용해서 실행할 내용 작성
cd 폴더명 / 
ls 
  • docker 파일로 가서 ls로 Dockerfile 있는거 확인
docker build -t 이름(버전)
ex) docker build -t test:1.0 .
  • docker image로 만들기 위한 명령어
  • 버전은 넣어도 되고 안넣어도 되는데 마지막에 . 붙여줘야한다.
  • 해당 작업을 하면 Dockerfile 내용을 실행 후 image로 만들어준다.
docker images
  • 그럼 test로 만든 image 확인 가능
docker run
ex) docker run —entrypoint “/bin/bash” -it —name test -p 8080:8080 test:1.0 
  • docker run을 사용해서 image를 컨테이너로 만듬
  • 옵션
    • -it : 컨테이너를 생성
    • -d : 컨테이너를 백그라운드로 실행 시켜라 ( 이 말은 컨테이너 밖인 os 운영체제(ubuntu 환경)에서도 이 컨테이너를 실행시켜라 )
    • -p : 컨테이너릐 포트를 포워딩 (8080:80)
      컨테이너의 80 포트를 로컬의 8080 포트로 포워딩 해라
    • -name : 컨테이너의 이름을 지정해서 실행하는 옵션
  • etrypoint는 docker가 command를 계속 띄워야하기 때문에 안띄우려고 사용
    • ENTRYPOINT ["1","2","3"] 으로 작성
    • ex) ENTRYPOINT["java","-jar","jar파일이름"]
exec -it test /bin/bash 
  • 컨테이너 안에서 다른 프로세스를 실행하기 위해 exec 명령어 사용
  • 참고로 컨테이너가 실행중일 때만 exec 서브 커맨드를 사용할 수 있다.
ls
cd build 
cd libs
jar 실행
  • 만약 Dockerfile에 build까지만 작성했다면 exec 명령어 다음에 위의 jar 파일을 실행하는 명령어를 입력해 줘야 한다.

  • 서버까지 자동으로 띄우기

exit 
docker ps
docker stop 
docker rm 파일이름(=test)
docker ps
  • 해당 과정에서 추가작업을 한다 생각하고 이어서 작성하면,
  • 현재 컨테이너를 나가고, docker ps로 현재 image확인
    • docker ps : 가동중인 컨테이너 존재 확인
    • docker ps -al : 동작은 안하고 등록은 돼있는 컨테이너 확인 가능
  • docker 멈추고, 지운다음 다시 확인
vi Dockerfile 
  • 서버작업하는 추가적인 명령 작성
docker build -t 파일이름
ex) docker build -t test . 
  • 도커 image 만들고,
docker run —name test -p 8080:8080 test 
  • 컨테이너 실행
  • 그럼 아까처럼 file 찾고, build된 jar 파일 찾아 실행하지 않아도 자동으로 실행
  • 그럼 전에는 도커 > 컨테이너로 들어가서 실행했다면
  • 지금은 도커에서 해당 컨테이너를 실핸해도 Dockerfile에 작성한 명령어로 동작한다.

3. docker-compose

  • Dokcerfile이 해당 컨테이너의 실행 순서를 자동으로 동작하게 하기위함이었다면,
    docker-compose는 이런 컨테이너 여러개를 자동으로 관리하기 위한 기능이다.

  • 전체적인 순서

    • 각 컨테이너의 Dokcerfile을 작성
    • docker-compose.yml를 작성해서 컨테이너 별 정의를 실시
      • 들여쓰기, 띄여주기 굉장히 중요
    • 'docker-compose up -d' 으로 컨테이너 개시
    • docker-compose down 으로 내림
docker -compose -version
  • 이라고 입력하면 설치 여부와 함께 미설치 시 명령어가 나옴
apt install docker-compose
docker-compose -version
  • 설치 후 다시 버전 확인
vi docker-compose.yml 
  • docker-compose 작성
version : 'X'
  
  services:
   build: .
   expose:
     - 8080
  • 사용할 버전
  • 포트, 빌드될 위치 등 서비스에 등록
docker-compose build
  • docker-compse에 작성한 내용을 빌드해준다.
docker-compose up -d
  • docker-compose를 실행
  • 이렇게까지만 작성해도 앞서 작업했던 과정을 한번에 해준다.
docker-compose down 
  • 실행을 끄려면 down만 작성해주면 된다.
  • exit 명령어는 컨테이너 자체를 종료하는 명령어이다.


4. 정리

  • docker는 aws시 설정한 os운영체제(ubuntu)에 docker라는 환경을 다시 띄우고
    docker안에 컨테이너를 만들어서 서버와 연결하는 구조이다.

    • docker
      • docker를 사용해서 원하는 설치파일을 자동으로 설치

    • Dockerfile
      • Dockerfile을 사용해서 원하는 설치파일을 자동으로 설치하고, 다른 작업도 자동으로 실행하게 작성

    • docker-compose
      • 컨테이너별로 Dockerfile을 선행으로 작성하고 각 컨테이너의 실행을 자동으로 관리
profile
까먹지말자

0개의 댓글