#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 : 인증을 거쳐 접근
- Registry
- 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을 통해 설정된 네트워크가 적용되게 다시 실행
- 첫번째 네트워크와 두번째 네트워크 둘 다 적용
- 바뀐 네트워크를 확인
#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
- 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 |