1.  도커 이미지 리눅스 cpu 타입 체크

2.  해당 이미지 리눅스 cpu 타입에 맞는 EC2 설치 

 

3.  EC2 실행 후 도커 설치 이미지 가져오기

1. 도커 설치

sudo yum update -y
sudo yum install -y docker

2. 권한 부여

sudo usermod -aG docker $USER

3. 도커 서비스 시작

sudo service docker start

4. 이미지 가져오기 (주의: 도커에 로그인 하지 않으면 public 이미지만 가져오는 것이 가능)

docker pull {이미지 명} ex: suhanlim/druginfo-app:latest

 5. 도커 이미지 실행 시키기 (스프링 톰켓 기준 8080포트, 이미지 명)

docker run -d -p 8080:8080 suhanlim/druginfo-app:latest

 

장점

  • 따로 프로그램을 실행시키기 위한 프로그램들을 설치할 필요가 없어 간편하다.
  • nohub 명령어를 통해 죽지 않게 프로그램을 실행시킬 필요 없이 콘솔 종료 후에도 잘 동작한다. 

'Development > AWS' 카테고리의 다른 글

EC2 웹 서비스 배포시 인바운드 규칙  (0) 2023.08.12
EC2 접속 in Mac OS (bed permissions)  (0) 2023.08.12

전제 조건

  • Docker가 설치 되어 있고 실행 중 이어야 한다.
  • 스프링 프로젝트를 jar파일로 내보내고 root/target/ 에 따로 빼두어야 한다.
  • Docker에 계정으로 로그인 되어 있어야 한다.

 

1.  루트 디렉토리에 Dockerfile 만들기

FROM {jdk 명} ex: openjdk:17-jdk 
COPY {jar 파일 경로명} ex: target/druginfo-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

경로에 파일 있는지 확인

 

2.  Docker 파일 빌드, Docker hub에 업로드

docker build -t [이미지 이름] .
docker tag [이미지 이름] username/[이미지 이름]:latest
docker push username/[이미지 이름]:latest

Docker 허브에 잘 올라와 있는지 확인

https://github.com/drum-grammer/docker-pro-2308

Docker : 나만의 도커 이미지 만들기 부터, 클라우드 배포까지!

8월 원티드 프리 온보딩 챌린지 - docker 뽀개기

I. 사전 미션하는 법

방법 1

  1. 해당 repository를 fork 하세요.
  2. 로컬에서 작업한 커밋을 fork한 repository에 push 하세요.
  3. Pull Request를 생성하여, 사전 미션을 제출해주세요.

방법 2

  1. 해당 repository를 clone 하세요:
  2. git clone git@github.com:drum-grammer/docker-pro-wanted.git
  3. 별도의 브랜치를 생성하세요:
  4. git checkout -b my-branch-xx
  5. 아래 사전 미션 내용을 보고 답안을 마크다운 형식으로 작성하시고, ./mission/{nickName} 디렉토리 저장해주세요.
  6. 해당 브랜치를 푸쉬해주세요.
  7. git push -u origin my-branch-xx
  8. Pull Request를 생성하여, 사전 미션을 제출해주세요.

II. 사전 미션

  1. 컨테이너 기술이란 무엇입니까? (100자 이내로 요약)
  2. 도커란 무엇입니까? (100자 이내로 요약)
  3. 도커 파일, 도커 이미지, 도커 컨테이너의 개념은 무엇이고, 서로 어떤 관계입니까?
  4. [실전 미션] 도커 설치하기 (참조: 도커 공식 설치 페이지)
  • 아래 도커 설치부터 실행 튜토리얼을 참조하여 도커를 설치하고, 도커 컨테이너를 실행한 화면을 캡쳐해서 Pull Request에 올리세요.
1. 컨테이너 기술은 운영체제와 무관하게 독립된 환경에서 프로그램을 실행하는 기술로, 프로그램 운영의 효율성과 이식성을 높입니다.
2. 도커는 가상환경에서 컨테이너를 실행하는 프로그램으로, 독립적인 실행 공간과 빠른 속도를 제공하며, 개별 IP 주소를 갖습니다.
3. 도커 파일은 경량화된 파일, 도커 이미지는 컨테이너를 생성하는 패키지, 도커 컨테이너는 독립적인 작업 공간으로, 이미지를 실행하여 애플리케이션을 구동합니다.

III. 도커 설치부터 실행 튜토리얼

도커 설치

1. 도커 공식 웹사이트에서 "Get Started"를 클릭합니다.

2. OS에 맞는 설치 파일을 다운로드 받습니다.

  • MacOS의 경우 "Download for Mac"을 클릭합니다.
  • Window 일 경우 "Download for Windows"를 클릭합니다.
  • 다운로드한 설치 파일을 실행합니다.

도커 컨테이너 실행 시키기

1. 나의 사전 미션 폴더를 만들고 해당 폴더로 이동합니다.

cd path/to/docker-pro-wanted/mission
mkdir my-name
cd my-name

2. "Hello, World!"를 출력하는 도커 파일을 만듭니다.

vim Dockerfile

i를 눌러 편집모드로 전환 후 아래 내용을 작성합니다:

FROM alpine:latest
CMD ["echo", "Hello, World"]

ESC를 눌러 명령모드로 전환 후, :wq 입력, enter키를 눌러 Dockerfile을 생성합니다.

3. 도커 파일로 도커 이미지를 빌드합니다.

docker build -t hello-world .

(위 명령어의 의미는 "현재 디렉토리에서 Dockerfile을 읽어 도커 이미지를 만들고, 해당 이미지에 hello-world라는 tag 를 붙혀라" 입니다.)

4. 빌드한 도커 이미지를 실행합니다.

docker run hello-world

이 명령어는 hello-world라는 이름의 도커 이미지를 실행시켜 "Hello, World!"를 출력합니다.

이미지

  • 컨테이너를 생성하는 데 필요한 모든 것을 포함한 패키지
  • 계층형 구조
  • docker hub에서 pull 할 수도 있고 직접 제작하여 사용하는 것 도 가능하다.
  • docker build 이미지 제작 명령어 (계층 순)
    • FROM: 기본 운영체제 선택
    • RUN: Docker가 특정 명령어를 실행하도록 하는 명령어
    • COPY: 로컬 시스템의 파일을 복사에 Docker 이미지에 넣는 명령어
    • ENTRYPOINT: 컨테이너가 작동할 명령어를 지정하는 명령어
    • CMD: 컨테이너가 시작될 때 자동으로 사용되는 명령어 설정
  • 이미지를 구축할 때마다 모든 계층을 캐시에 저장하기 때문에 다시 이미지를 구축할 경우 매우 빠른 속도로 구축할 수 있다.
  • 제작한 이미지에 리포지토리 태그를 붙이면 push 명령어를 통해 Docker Hub에 푸시 가능하다

(Docker 이미지 제작 과정)

$cat > Dockerfile
FROM ubuntu

RUN apt-get update
RUN apt install -y python3, python3-pip
RUN pip3 install flask
COPY app.py /opt/app.py

ENTRYPOINT FLASK_APP=/opt/app.py flask run --host=0.0.0.0

(생성한 이미지 docker hub에 올리기)

$sudo docker login
// username 입력
// passward 입력
$sudo docker build . -t {docker username}/my-simple-webapp
$sudo docker push {docker username}/my-simple-webapp

 

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

Docker 명령어  (0) 2023.07.01
Docker 컨테이너 웹 호스팅  (0) 2023.07.01
리눅스 가상 환경에서 Docker 설치  (0) 2023.07.01
Docker  (0) 2023.05.26

컨테이너 (image (OS, Develop tool))

  • 컨테이너의 목적: 운영 체제 호스팅이 아니라 특정 작업이나 프로세스를 처리하는 것 작업이 끝나면 컨테이너는 종료한다.
  • 이미지(program)를 실행시키는 환경
  • 표준 입력값을 수신하지 않기 때문에 콘솔에 연결해도 아무 입력값도 읽어 들일 수 없다 (비 대화형 모드로 실행된다)
    • 입력값을 받게 하려면 -it 옵션을 통해 주는 것과 받는 것이 가능하다
      • i: 입력값 주기
      • t: 가상 터미널 사용
  • 모든 컨테이너는 기본적으로 ip를 할당 받는다
    • 단 내부 ip이기 때문에 도커 호스트(도커 엔진) 통해서만 호스트 가능하다.
  • 컨테이너 작업 종료 시 따로 -v옵션으로 볼륨을 매핑 설정해주지 않으면 데이터는 휘발성으로 날라가게 된다.

Jenkins/Jenkins 를 사용한 간단 웹 호스팅 실습

 

1. jenkins/jenkins 포트 매핑 실행

2. VMware로 실행 중 인 가상환경의 ip주소 확인

3. vmware를 실행 시키고 있는 현재의 노트북에서 해당 ip로 접근 (-p 옵션으로 8080:8080 매핑 해주었기 때문에 가능)

4. 만약 컨테이너를 종료시킨다면 해당 작업 내용은 따로 볼륨을 잡아주지 않았기 때문에 모두 휘발된다.

https://github.com/jenkinsci/docker/blob/master/README.md

$sudo docker run -p 8080:8080 -v {경로}:/var/jenkins_home jenkins/jenkins

sudo docker run -p 8080:8080 -v /root/my-jenkins-data:/var/jenkins_home -u root jenkins/jenkins

(README.md 파일을 참고하여 포트 매핑, 볼륨 세팅을 하고 jenkins/jenkins를 실행시키는 명령어)

 

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

Docker 명령어  (0) 2023.07.01
Docker 이미지  (0) 2023.07.01
리눅스 가상 환경에서 Docker 설치  (0) 2023.07.01
Docker  (0) 2023.05.26

+ Recent posts