강의 내용과 개인적으로 실습하면서 작성한 내용을 정리한 내용입니다.
교육 날짜: 10/28 ~ 10/30(총 3일)
교육 시간: 09:00 ~ 18:00
예시) 개발은 python으로 하고 고객사 서버는 python3만 사용하도록 하면 어떻게 진행할 것인가?
Q: 패널티를 감수하고 다시 python 코드를 python3 문법으로 수정할 것인가?
A: 이러한 문제를 해결하기 위해 DevOps 로 처리했다.
여러 상황이 있겠지만, 도커 같은 컨테이너를 사용하는 이유에 대해 설명해주시려고 한 것 같다..!!
Docker
1. Container VS Virtual Machine
Simply put, containers are isolated processes for each of your app's components. Each component - the frontend React app, the Python API engine, and the database - runs in its own isolated environment, completely isolated from everything else on your machine.
Here's what makes them awesome. Containers are:
- Self-contained. Each container has everything it needs to function with no reliance on any pre-installed dependencies on the host machine.
- Isolated. Since containers are run in isolation, they have minimal influence on the host and other containers, increasing the security of your applications.
- Independent. Each container is independently managed. Deleting one container won't affect any others.
- Portable. Containers can run anywhere! The container that runs on your development machine will work the same way in a data center or anywhere in the cloud!
2. Image
3. Docker 개요
컨테이너 개념을 사용하여 애플리케이션 생성과 배포 과정을 단순화하는데 사용되는 오픈 소스 컨테이너화 도구.
3.1) 리눅스 명령어
파일 및 디렉터리를 나열하는 명령어
- ls -l
- 현재 디렉터리의 모든 파일과 디렉터리의 상세 정보를 나열한다.
- 파일에 대해 권한이 없이 없으면 명령어를 사용할 수 없다.
- ls -ld
- 지정한 디렉터리의 정보만 보여주고, 내부 파일 목록은 표시하지 않는다.
- 출력 결과
- d는 해당 파일이 디렉토리를 의미
- r(읽기), w(쓰기), x(실행) 권한을 의미한다.
- 첫 rwx는 소유자의 권한
- 두 번째 rwx는 소유 그룹의 권한
- x 실행 권한만 있다.
- 세 번째 rwx는 기타 사용자의 권한
- --- 는 아무 권한이 없다.
- 12는 디렉터리에 있는 하위 파일과 디렉터리의 수입
명령어: ls -ld /var/lib/docker
결과: drwx--x--- 12 root(소유자) root(소유 그룹) [프로세스번호] [시간] [디렉토리 경로]
3.2) Docker가 사용하는 리눅스 기술
- namespace
- 프로세스가 시스템 리소스의 특정 그룹에 대해 독립적인 환경을 갖도록 하여 격리된 작업을 수행할 수 있게 하는 기능입니다.
- 커널 리소스의 범위를 제한하여 프로세스가 서로 영향을 미치지 않도록 합니다. 네임스페이스로 격리된 프로세스는 격리된 리소스만 볼 수 있기 때문에 마치 별도의 운영 환경이 있는 것처럼 동작합니다.
- cgroups(Control groups)
- 각 프로세스가 사용할 수 있는 자원에 대한 제어를 가능하게 해주는 리눅스 커널 (fs → systemd)
- 리소스 제한, 우선순위 설정, 격리 및 모니터링을 통해 개별 프로세스나 프로세스 그룹이 시스템 자원을 지나치게 점유하는 것을 방지하고, 각 프로세스가 필요한 만큼의 자원을 안정적으로 확보할 수 있도록 돕습니다.
- Union filesystem
- 리소스 제한, 우선순위 설정, 격리 및 모니터링을 통해 개별 프로세스나 프로세스 그룹이 시스템 자원을 지나치게 점유하는 것을 방지하고, 각 프로세스가 필요한 만큼의 자원을 안정적으로 확보할 수 있도록 돕습니다.
3.3) Docker Architecture
docker cli
→ dockerd
→ containerd (Container Runtime Interface, CRI)
→ containerd-shim, runc (Open Container Initiative, OCI)
3.4) Docker Command
docker --help 명령어를 작성하면 아래와 같이 나온다.
[educafe@docker2614:~]$ docker --help
Usage: docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
Common Commands:
run Create and run a new container from an image
exec Execute a command in a running container
ps List containers
build Build an image from a Dockerfile
pull Download an image from a registry
push Upload an image to a registry
images List images
login Log in to a registry
logout Log out from a registry
search Search Docker Hub for images
version Show the Docker version information
info Display system-wide information
이하 생략...
명령어 예시
- image build는 명령어 그대로 이미지를 빌드하겠다는 의미
- . 은 현재 디렉터리를 의미하며, 디렉터리 내에서 Dockerfile과 관련된 파일을 참조
- -t 는 태그 옵션으로, 빌드하는 이미지에 이름을 붙이는 역할
docker image build . -t educafe/myapp:v1
4. Docker Image Build
Dockerfile
주요 명령어 예시
FROM python:3.12
WORKDIR /usr/local/app
# Install the application dependencies
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
# Copy in the source code
COPY src ./src
EXPOSE 5000
# Setup an app user so the container doesn't run as the root user
RUN useradd app
USER app
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8080"]
FROM
WORKDIR
COPY
RUN
EXPOSE
메모
resolv.conf 가 있다는 것은 DNS 사용이 가능하다는 것이다.
overlay????
diff 는 이전 레이어하고 차이가 있다는 것을 의미한다.
파일 마지막에 -init 으로 되어 있는 것은 무엇일까
컨테이너를 실행시키면 init layer를 똑같은거 두 개를 만든다?????
도커 내의 모든 명령어는 root 가 실행시키고 있다.
→RUN useradd -m educafe -s /bin/bash 로 해줘야 한다.
→ USER educafe
→ -it 라는 플래그가 필요하다.
merged 라는 곳에서 확인했는데 컨테이너를 지우면 사라진다.
→ 그래서 볼륨을 사용해서 data를 처리한다/
overlay
-----------
29일 화요일
호스트에서 데이터를 만들면 컨테이너 모델이 동시에 호스트 데이터를 사용해서 여러 번 학습시킬 수 있다.
'교육 > [온라인] KOSTA EDU' 카테고리의 다른 글
컨테이너 기반의 Jenkins CI/CD 파이프라인 (0) | 2024.10.21 |
---|---|
Prometheus + Grafana + OpenTelemetry를 이용한 Kubernetes 모니터링 (0) | 2024.10.18 |
[KOSTA] Spring-boot를 활용한 MSA 아키텍처 적용하기 (0) | 2024.08.24 |
[KOSTA] Kafka를 이용한 서비스와 데이터 통합 - 2편 (0) | 2024.07.19 |
[KOSTA] Kafka를 이용한 서비스와 데이터 통합 - 1편 (0) | 2024.07.19 |