나는매일가운데

Docker (1) docker 기본 본문

Docker & Kubernetes/Docker

Docker (1) docker 기본

전로찡 2023. 4. 13. 17:53
반응형

01. Docker

(1) MSA (Micro Service Architecture)

 => 개별 기능을 하는 작은 서비스를 각각 개발, 연결하여 운영하는 WEB Architecture

 => 복잡성의 증가, 다양한 언어로 개발, 빠른 개발 및 배포 주기로 인해 즉각적인 대응이 필요하다.

 => 장점 :

 1.시스템의 확장성 증가

 2.독립적인 서비스의 개발로 즉각 대응 가능

 3. 하나의 서비스가 다운되더라도 전체 시스템이 영향 받지 않음

 4. 대형 프로젝트에서 적합함

 

=> 단점 :

 1. 다수의 서비스들이 분산되어 있기 때문에 개발 및 배포 복잡

 2. 분산 시스템에 대한 이해도 필요

 3. 테스트 및 디버깅 어려움

 

 

(2) 모놀리식 아키텍쳐

모놀리식 아키텍쳐

-> 하나의 어플리케이션에 여러 기능이 통합되어 있는 구조

-> 장점 : 개발이 편리하다 / 작은 프로젝트의 경우 모놀리식 아키텍쳐를 구현하는게 편할 수 있다.

-> 단점 : 유지, 보수에 어려움

 

 

2. Container 기술

컨테이너 아키텍쳐

(1) Container : SW개발, 배포, 실행을 위해 가상화한 기술로 호스트의 OS를 사용하여 여러 독립된 컨테이너를 활용할 수 있다. 컨테이너는 격리된 환경에서 APP, lib, 설정 파일 등을 함께 패키징하여 App이 돌아가는 환경을 동일하게 유지시켜준다. 또한 OS는 포함하지 않으므로 가볍고 빠르게 시작된다.

 

- 컨테이너간 통신은 사설IP로 통신하기 때문에 포트포워딩을 잘 해줘야 한다.

VM과 Container의 차이

 

(2) 이미지 : 컨테이너를 이미지화 시켜 배포를 쉽게 하는 기술. 이미지는 그대로 실행 될 수 없고 CRI로 불러 run 명령어로 컨테이너를 실행 시킬 수 있다. 

Docker의 아키텍쳐

 

3. Docker

- docker는 컨테이너를 만들고 관리하는 것을 도와주는 도구이다.

- 한개의 컨테이너에 하나의 프로그램을 담는것이 적당하다.

 

(1) Docker에서 컨테이너 생애 주기

컨테이너의 생애 주기

 

(2) Docker volume

 - 컨테이너의 데이터를 저장하고 관리하는 공간

 - 여러 개의 컨테이너에서 동일한 볼륨을 공유하여 사용이 가능하다

 - 컨테이너가 지워져도 볼륨은 지워지지 않는다.


02. Dodcker 실습

(1) Docker 명령어

docker ps –a //Docker container 목록 조회

docker images // Docker image 목록 조회

docker run -–name ex001 –d –p <Host port>:<Container img port>
<옵션>
 1. --name : 생성할 컨테이너의 이름 지정
 
 2. -d (--detach) : 컨테이너를 백그라운드에서 구동한다는 의미 
 => 이를 생략하면 컨테이너 내부에서 실행하는 앱의 상태 로그가 계속 화면에 표시됨
 
 3. -p : 컨테이너의 포트 설정 (포트 포워딩 설정 가능)
 	=> 외부에서 <Host Port>로 접근하면 <컨테이너 이미지 포트>로 포트포워딩 해준다.
    => 정해진 포트가 존재할 시 (mySQL : 3306 / tomcat : 8080 ...) 이에 맞게 맵핑 시켜줘야 연결할 수 있다.
    
    
docker run --name mysql001 -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.6
	=> mySQL의 경우 3306 포트로 접근해야 한다.
	=>  MYSQL_ROOT_PASSWORD=root : mySQL의 접근하려면 root계정의 비밀번호를 지정해줘야한다.
    => mysql:5.6 : 이미지 이름과 태그

docker exec -it <컨테이너이름> bash
	=> 실행 중인 컨테이너를 사용

(2) Docker 컨테이너간 네트워크 연결

 

docker network create <네트워크 이름>
	-> 도커에서 컨테이너간 통신 할 네트워크 생성
    
    
docker run --name mysql00ex1 
-dit		// d, i, t 옵션이 합쳐진것 i: interactive (네트워크 통신) t: tty (콘솔창 출력) 
--net=test_net 	// 네트워크 연결
-e MYSQL_ROOT_PASSWORD=root 
-e -MYSQL_DATABASE=wp00db 
-e MYSQL_USER=wp00kim 
-e MYSQL_PASSWORD=wppass  // DB에 접근할 정보 입력 
mysql // 이미지 이름
--character-set-server=utf8mb4 
--collation-server=utf8mb4_unicode_ci 
--default-authentication-plugin=mysql_native_password // 컨테이너 환경 변수 설정


docker run --name wp00ex2 
-dit 
--net=test_net 
-p 8080:80 	// 포트 포워딩 즉, 호스트의 8080포트로 접근 하면 맵핑 되어있는 80 포트로 연결시켜 준다.
-e WORDPRESS_DB_HOST=mysql00ex1 //wordpress 컨테이너에서 사용할 DB컨테이너 이름
-e WORDPRESS_DB_NAME=wp00db 	// 사용할 DB이름
-e WORDPRESS_DB_USER=wp00kim 	// DB 접근 정보
-e WORDPRESS_DB_PASSWORD=wppass // DB 접근 정보
wordpress //wordpress 이미지 이름


docker container inspect mysql00ex1		//컨테이너의 정보 확인 (네트워크 등등)
반응형