
14주차 학습내용
이번주에는 Docker에 대해 학습했다.
Docker?
Docker는 컨테이너 기반 기술로 애플리케이션과 필요한 모든 환경을 하나의 패키지로 묶어, 어디서나 동일하게 실행 가능하도록 만드는 기술이다.
가상머신과의 차이점
- Docker는 가상머신과 달리 호스트 OS 위에서 작동하며, 별도의 OS 부팅 과정이 필요 없다.
- 컨테이너는 애플리케이션 실행 속도가 빠르고, 자원 효율성이 높다.
Docker의 구성 요소
- 이미지(Image): 컨테이너를 실행하기 위한 템플릿. 애플리케이션과 필요한 환경(라이브러리, 설정 등)을 포함.
- 컨테이너(Container): 이미지를 기반으로 실행되는 독립된 환경.
- Dockerfile: 이미지를 생성하기 위한 설정 파일.
- Docker Hub: Docker 이미지가 저장되는 클라우드 저장소.
Docker 명령어
1) 이미지 관련 명령어
- docker pull <이미지 이름> : Docker Hub에서 이미지 다운로드
- docker images : 로컬에 저장된 이미지 목록 확인
2) 컨테이너 관련 명령어
- docker run <이미지 이름>: 컨테이너 실행
- docker ps: 실행 중인 컨테이너 목록 확인 (-a 옵션을 통해 종료되어 있는 컨테이너도 확인 가능)
- docker stop <컨테이너 ID>: 컨테이너 중지
3) 이미지 생성
- docker build -t <이미지 이름> .: Dockerfile을 사용하여 이미지 생성
4) 컨테이너 삭제
- docker rm <컨테이너 ID> : 컨테이너 삭제 (-f 옵션을 통해 실행중인 컨테이너 강제 종료, 삭제 가능)
- docker rmi <이미지 이름> : 이미지 삭제
Docker File 명령어
1) FROM <이미지 이름> : Docker 이미지를 빌드할 때 사용할 베이스 이미지를 지정하는 명령어.
2) RUN <실행 명령어> : 컨테이너 빌드 시 명령어를 실행. 주로 패키지 설치나 환경 설정에 사용한다.
3) CMD <실행 명령어> : 컨테이너 실행 시 기본적으로 실행될 명령어를 지정. 명령어는 컨테이너가 실행될 때 동작한다.
4) ENTRYPOINT <실행 명령어> : 컨테이너가 실행될 때 실행되는 기본 명령어를 설정하며, CMD와 비슷하다.
5) WORKDIR <디렉토리 경로> : 작업 디렉토리를 지정하는 명령어로 주로 FROM 다음으로 나온다. 이후 실행되는 명령어들은 해당 디렉토리 내에서 실행된다.
6) COPY <파일이나 디렉토리 경로> : 호스트 시스템의 파일이나 디렉토리를 컨테이너로 복사하는 명령어.
7) EXPOSE <포트번호> : 컨테이너에서 외부에 노출할 포트번호를 지정하는 명령어.
위 명령어 이외에도 더 많은 명령어가 있는 것 같지만 아직 사용해보지 못했다. 명령어들을 더 찾아보고 동작하는 과정을 살펴봐야겠다.
자필평가
이번주에는 지금까지 배운 내용들로 자필 평가를 실시했다.
평가를 통해 내가 부족한 부분을 알 수 있었다.
틀린 문제 & 오답노트
1. 추상클래스의 특징으로 틀린 것은?
a) 객체생성을 할 수 없다
b) 상위클래스로 쓰기위한 목적으로 만들어진 클래스
c) 추상클래스를 상속받은 클래스에서 추상메소드를 오버라이딩하거나 하위클래스를 추상클래스로 정의해야 사용할 수 있다.
d) 추상클래스는 추상메소드만 정의할 수 있다.
e) 추상클래스는 클래스를 abstract을 선언해서 추상 클래스라는 것을 정의해야 한다.
내가 선택한 답 : c
답: d) 추상클래스는 추상메소드만 정의할 수 있다.
풀이 : 추상클래스는 추상 메서드 뿐만 아니라 구현된 메서드와 멤버변수도 정의가 가능하다. 따라서 부분적으로만 구현하여 사용 가능하다.
2. 다음은 큐(Queue)에 대한 설명이다. 틀린 것은?
a) 큐는 먼저 들어온 데이터가 먼저 나가는 특성인 선입선출(FIFO)의 특징을 가진 선형 자료구조이다
b) 너비우선탐색을 구현하거나 프린터의 인쇄 대기열을 구현할 수 있다.
c) 깊이우선탐색이나 메소드 호출 메모리 구조를 표현할 수 있다.
d) 자바의 LikedList를 이용해서 구현할 수 있다.
e) 삭제연산만 수행되는 곳을 프론트, 삽입연산이 수행되는 곳을 리어로 칭한다.
내가 선택한 답 : d
답: c) 깊이우선탐색이나 메소드 호출 메모리 구조를 표현할 수 있다.
풀이 : 깊이우선탐색이나 메소드 호출 메모리 구조는 Queue가 아닌 Stack 자료구조를 사용한다.
3. devops의 단계가 아닌 것은?
a) 개발
b) 테스트
c) 모니터링
d) 지속적통합
e) 보안
내가 선택한 답 : a
답: e) 보안
풀이 : devops의 라이플 사이클 7단계
1. 지속적인 개발
2. 지속적인 통합
3. 지속적인 테스트
4. 지속적인 모니터링
5. 지속적인 피드백
6. 지속적인 배포
7. 지속적인 운영
4. Stream의 종료 메소드가 아닌 것은?
a) forEach
b) map
c) count
d) collect
e) sum
내가 선택한 답 : a
답: b) map
풀이 : map은 스트링의 요소를 변환하는 중간 메소드로 변환 결과를 새로운 스트림으로 반환한다.
느낀 점
Docker가 배포 및 운영 관리에 굉장히 뛰어나다는 것을 느낄 수 있었다. 이전에 가상머신을 통해 직접 환경을 구축했을 때 보다 더 쉽게 환경을 구축할 수 있었다. 특히, 현재 배우고 있는 MSA에서는 서비스 별로 프로젝트가 나눠져 있고, 이를 배포해야 하는데 Docker를 사용하면 배포 프로세스도 간단해지고 운영할 때 일관성도 보장된다는 점이 엄청난 강점 같다.
앞으로의 계획
다음주에는 쿠버네티스에 대해 학습 할 예정인데, Docker와 함께 어떻게 사용되는지 열심히 공부해야겠다. 정보 처리 기사도 신청 기간이기 때문에 이것도 같이 열심히 공부해서 한 번에 붙고싶당..
14주차 학습내용
이번주에는 Docker에 대해 학습했다.
Docker?
Docker는 컨테이너 기반 기술로 애플리케이션과 필요한 모든 환경을 하나의 패키지로 묶어, 어디서나 동일하게 실행 가능하도록 만드는 기술이다.
가상머신과의 차이점
- Docker는 가상머신과 달리 호스트 OS 위에서 작동하며, 별도의 OS 부팅 과정이 필요 없다.
- 컨테이너는 애플리케이션 실행 속도가 빠르고, 자원 효율성이 높다.
Docker의 구성 요소
Docker 명령어
1) 이미지 관련 명령어
2) 컨테이너 관련 명령어
3) 이미지 생성
4) 컨테이너 삭제
Docker File 명령어
1) FROM <이미지 이름> : Docker 이미지를 빌드할 때 사용할 베이스 이미지를 지정하는 명령어.
2) RUN <실행 명령어> : 컨테이너 빌드 시 명령어를 실행. 주로 패키지 설치나 환경 설정에 사용한다.
3) CMD <실행 명령어> : 컨테이너 실행 시 기본적으로 실행될 명령어를 지정. 명령어는 컨테이너가 실행될 때 동작한다.
4) ENTRYPOINT <실행 명령어> : 컨테이너가 실행될 때 실행되는 기본 명령어를 설정하며, CMD와 비슷하다.
5) WORKDIR <디렉토리 경로> : 작업 디렉토리를 지정하는 명령어로 주로 FROM 다음으로 나온다. 이후 실행되는 명령어들은 해당 디렉토리 내에서 실행된다.
6) COPY <파일이나 디렉토리 경로> : 호스트 시스템의 파일이나 디렉토리를 컨테이너로 복사하는 명령어.
7) EXPOSE <포트번호> : 컨테이너에서 외부에 노출할 포트번호를 지정하는 명령어.
위 명령어 이외에도 더 많은 명령어가 있는 것 같지만 아직 사용해보지 못했다. 명령어들을 더 찾아보고 동작하는 과정을 살펴봐야겠다.
자필평가
이번주에는 지금까지 배운 내용들로 자필 평가를 실시했다.
평가를 통해 내가 부족한 부분을 알 수 있었다.
틀린 문제 & 오답노트
1. 추상클래스의 특징으로 틀린 것은?
a) 객체생성을 할 수 없다
b) 상위클래스로 쓰기위한 목적으로 만들어진 클래스
c) 추상클래스를 상속받은 클래스에서 추상메소드를 오버라이딩하거나 하위클래스를 추상클래스로 정의해야 사용할 수 있다.
d) 추상클래스는 추상메소드만 정의할 수 있다.
e) 추상클래스는 클래스를 abstract을 선언해서 추상 클래스라는 것을 정의해야 한다.
내가 선택한 답 : c
답: d) 추상클래스는 추상메소드만 정의할 수 있다.
풀이 : 추상클래스는 추상 메서드 뿐만 아니라 구현된 메서드와 멤버변수도 정의가 가능하다. 따라서 부분적으로만 구현하여 사용 가능하다.
2. 다음은 큐(Queue)에 대한 설명이다. 틀린 것은?
a) 큐는 먼저 들어온 데이터가 먼저 나가는 특성인 선입선출(FIFO)의 특징을 가진 선형 자료구조이다
b) 너비우선탐색을 구현하거나 프린터의 인쇄 대기열을 구현할 수 있다.
c) 깊이우선탐색이나 메소드 호출 메모리 구조를 표현할 수 있다.
d) 자바의 LikedList를 이용해서 구현할 수 있다.
e) 삭제연산만 수행되는 곳을 프론트, 삽입연산이 수행되는 곳을 리어로 칭한다.
내가 선택한 답 : d
답: c) 깊이우선탐색이나 메소드 호출 메모리 구조를 표현할 수 있다.
풀이 : 깊이우선탐색이나 메소드 호출 메모리 구조는 Queue가 아닌 Stack 자료구조를 사용한다.
3. devops의 단계가 아닌 것은?
a) 개발
b) 테스트
c) 모니터링
d) 지속적통합
e) 보안
내가 선택한 답 : a
답: e) 보안
풀이 : devops의 라이플 사이클 7단계
1. 지속적인 개발
2. 지속적인 통합
3. 지속적인 테스트
4. 지속적인 모니터링
5. 지속적인 피드백
6. 지속적인 배포
7. 지속적인 운영
4. Stream의 종료 메소드가 아닌 것은?
a) forEach
b) map
c) count
d) collect
e) sum
내가 선택한 답 : a
답: b) map
풀이 : map은 스트링의 요소를 변환하는 중간 메소드로 변환 결과를 새로운 스트림으로 반환한다.
느낀 점
Docker가 배포 및 운영 관리에 굉장히 뛰어나다는 것을 느낄 수 있었다. 이전에 가상머신을 통해 직접 환경을 구축했을 때 보다 더 쉽게 환경을 구축할 수 있었다. 특히, 현재 배우고 있는 MSA에서는 서비스 별로 프로젝트가 나눠져 있고, 이를 배포해야 하는데 Docker를 사용하면 배포 프로세스도 간단해지고 운영할 때 일관성도 보장된다는 점이 엄청난 강점 같다.
앞으로의 계획
다음주에는 쿠버네티스에 대해 학습 할 예정인데, Docker와 함께 어떻게 사용되는지 열심히 공부해야겠다. 정보 처리 기사도 신청 기간이기 때문에 이것도 같이 열심히 공부해서 한 번에 붙고싶당..