본문 바로가기
Docker

Docker의 기본개념

by 손영진 2023. 7. 31.
728x90

#1 Docker 정의

  • 하이브리드 클라우드에서 모든 애플리케이션을 처리하는 컨테이너 플랫폼 제공자
  • 운영체제 레벨에서 가상화를 제공하는 컨테이너화 기술
  • 컨테이너 사용, 응용 프로그램보다 쉽게 생성, 배포 및 실행할 수 있도록 설계된 도구
  • 지난 10년간 사용된 LXC에서 진화한 오픈소스 애플리케이션 배포 컨테이너
  • LXC 사용하여 다른 응용 프로그램에서 운영체제(OS) 커널, CPU, RAM 공유

1. 쿠버네티스와의 차이점

  • 규모의 차이
    • Docker보다 쿠버네티스의 규모가 훨씬 크다

2. Docker의 중요성( 순서도 중요 )

  • Build : Image 생성 (여러 언어를 통해 Image 생성)
    • Download : Image를 Registry에서 받아 옴.
    • Dockerfile : 소스 코드를 다운로드 받아 생성 -> 작성이 대문자에 유의
  • Ship = Release : Image 저장 -> Registry ( 저장소 )
    • Registry
      • Public : 누구나 접근하여 다운로드 또는 업로드 가능
      • Private : 인증을 거쳐 접근
  • Run : Image 실행, Container 생성 -> 애플리케이션 생성이 목표
    • Deploy -> Container 생성 (이를 위해 Image 필수)
    • Scale : Container의 규모 조절

=> IP + Port번호를 통해 접근 또는 DNS 이름 사용

=> Layer -> Image -> Container -> Pod 

 

#2 Container 정의

  • 개발자가 라이브러리 및 기타 종속성과 같이 필요한 모든 부분 응용 프로그램으로 패키징하고 하나의 패키지로 모두 전송
  • 여러 컨테이너가 동일한 머신에서 실행 가능, OS 커널 다른 컨테이너와의 공유
  • 각 컨테이너는 사용자 공간에서 격리된 프로세스로 진행
  • 개념 탄생 : 1 + 2
    • 기존 리눅스 환경 : 자원 격리 사용(cgroup) + 특정 디렉토리 권한 제한(chroot) 격리 환경
    • 변경 사항 레이어 형태로 저장하는 파일 시스템
      • Kernel의 필요성 : 하드웨어의 제어

=>  격리된 공간에서 프로세스가 동작하게 해주는 가상화 기술

 

#3 VM 기본 설정

   1. VMware Workstation Pro 16.1.2 버전과 CentOS-Stream-8-x86_64-latest-dvd1 설치 (구글에 검색)

   2. xshell 설치 (평가판으로 설치) -> ssh클라이언트로 명령어 작성에 유리

   3. Workstation에서 다운로드 받은 Centos-Stream-8 버전으로 VM을 설치한다.

  • Location : C드라이브에 생성한 폴더에 VM 설치 -> 해당경로 : C:\vm\newworld\Docker-1
  • 하드웨어 수정 
    • Memory : 3GB
    • Process : 4
    • New CD/DVD : Centos-Stream-8-~ 버전 선택
    • Network Adapter : Custom의 VMnet1(NAT)으로 설정 -> NAT대신 Host-only일 가능성이 높지만 상관없음, 차후 수정

   4. 네트워크 설정

  • Edit -> Virtual Network Editor를 통해 아래의 창을 띄우고 1번을 눌러 네트워크 변경 환경을 만든다.
  • NAT는 1개여야만 하기 때문에 VMnet8 을 host-only로 바꾼 후 VMnet1 을 NAT으로 변경
  • 변경된 VMnet1에서 3, 4, 5번에서 주소를 213.0.113.x로 변경 -> x는 건들지 않는다.
  • 6번의 Add Network로 VMnet2를 만들고 3, 4번에서 192.168.1.x로 변경
  • Apply를 통해 적용 후 생성된 VM에 접속
  • 접속 후 추가 설정은 Linux의 설치와 기본명령어 참조 -> 해당 글 첫번째 글

   5. 아래의 사진에서 우측상단을 클릭하여 1번창을 띄운 후 위에서 만든 VMnet1,2의 네트워크를 Turn On으로 변경

          -> 네트워크를 연결시키는 작업

   6. 2번을 클릭하여 왼쪽 창을 띄우고 3번을 눌러 설정

   7. 6번의 과정을 거치면 아래의 창이 생성

  • 1번을 통해 IP주소를 Custom 해준다. -> 첫번째 네트워크의 IP주소는 아래와 같다.
  • 2번에 만들 IP 주소 작성
  • 3번에 DNS 주소 입력
  • 두번째 네트워크도 IP만 달리하여 설정 
    • IP 주소 : 192.168.1.3
    • Netmask : 255.255.255.0
    • Gateway : 한 개의 VM에는 한개의 Gateway만 존재하기에 두 번째 네트워크는 작성하지 않음
    • DNS : 아래와 같이 작성

   8. 명령어 (순서대로 설명)

  • hostname을 master.example.com으로 설정
  • 방화벽 정지
  • 다시 실행시켜도 방화벽 정지
  • vim을 통해 1-1처럼 변경
  • 관리자 권한으로 실행
  • 현재 사용중인 네트워크를 보여줌
  • nmcli con down을 통해 네트워크를 다운시킴
  • nmcli con up을 통해 설정된 네트워크가 적용되게 다시 실행
    • 첫번째 네트워크와 두번째 네트워크 둘 다 적용
  • 바뀐 네트워크를 확인

1-1

#4 xshell을 통해  Docker와 Container 생성

   1. xshell에 ssh로 생성한 네트워크에 접속

   2. 접속한 VM에 Docker 생성

yum install yum-utils -y
yum remove runc -y
yum-config-manager --add-repo \
> https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce -y
rpm -qa | grep docker
systemctl enable --now docker
systemctl status docker

4-1

  • yum remove runc -y
    • Container를 만들고 실행하는 명령어인 runc가 Docker 설치시 설치되는 runc가 기존에 있던 것과 충돌이 일어날 수 있기에 기존 runc를 삭제
  • url을 다운로드 후 4-1의 박스와 비교

   3. Docker Container 생성

docker pull mariadb //이미지 불러오기
docker images // 이미지 확인
docker run --name mariadb-basic \    // 생성한 이미지에 대한 정보 저장 및 컨테이너 생성
> -e MYSQL_USER=user1 \
> -e MYSQL_PASSWORD=mypassword \
> -e MYSQL_DATABASE=product \
> -e MYSQL_ROOT_PASSWORD=r00tpassword \
> -d mariadb:latest

docker ps  // 생성된 container 확인
docker exec -it mariadb-basic bash  //생성한 mariadb에 접속
> root@9ec2cf06718b:/# mariadb -uroot –pr00tpassword

   4. Container와 이미지 삭제

docker stop mariadb-basic //생성한 이미지 중지
docekr rm -f mariadb-basic // container 삭제
docker rmi -f mariadb // 이미지 삭제

   5. Container 생성 및 확인

docker container create --name webserver -p 8080:80 httpd  // webserver라는 이름을 가진 httpd이미지 생성
docker images // 이미지 확인
docker container ls -a  // 생성된 container에 대한 세부설정 확인
docker container start webserver  // 생성만 되고 실행중이지 않은 container 실행
docker container ls  // 실행 중인 container 확인

   6. Container 생성과 동시에 실행

docker container run --name nginx -d -p 8180:80 nginx
docker container ls -a

#5 Public 인스턴스를 통한 Container 생성

   1. AWS의 EC2 인스턴스 생성 과정 중 사용된 키페어를 VM에 복사

  • 로컬 쉘에서 생성된 키의 파일로 들어가 키페어를 복사한다.

   2. ssh를 통해 인스턴스에 접속 후 관리자 권한으로 변경

   3. Docker 생성 후 Container 생성

dnf install docker -y
systemctl enable --now docker
systemctl status docker

docker pull nginx
docekr container run --name nginx -p 8080:80 nginx
curl localhost:8080

docker container run --name webserver -d -p 8180:80 httpd

   4. 웹 브라우저에서 확인

  • 웹브라우저에 EC2에서 생성된 인스턴스의 Public 주소에 덧붙여 확인
    • nginx : Public ip:8080/index.html
    • httpd : Public ip:8180/index2.html 
echo 'Nginx index file test' > index.html
docker cp index.html nginx:/usr/share/nginx/html/index.html  // nginx의 경로
curl localhost:8080/index.html //nginx가 들어있는 8080포트 확인

echo 'Docker copy test' > index2.html
docker container cp index2.html webserver:/usr/local/apache2/htdocs/  // httpd의 경로
curl localhost:8180/index2.html //httpd가 들어 있는 8180포트 확인

'Docker' 카테고리의 다른 글

Docker 최종 연습  (1) 2023.08.06
Docker Swarm & Monitoring & Podman  (0) 2023.08.06
Docker Network  (0) 2023.08.03
Docker Registry  (0) 2023.08.02
다양한 Container 생성  (0) 2023.08.01