- CLI 가 무엇인지 말할 수 있다
- Docker Hub에서 Docker Image 를 검색한 뒤 사용할 수 있다.
- 한 개의 Docker Image를 이용해서 Container 를 구축할 수 있다.
- 두 개 이상의 Docker Container를 이용해서 Container 를 구축할 수 있다.
- Docker LifeCycle 을 통해 오늘 배우지 않은 부분이 무엇인지를 알 수 있다.
Docker
다른 장치에서 동작하는 게임을 PC 에서 동작시킨다는 것
==> 프로그램 실행을 위해 Linux 환경을 쉽게 구성하기 위한 도구 == docker
#어플리케이션 실행 환경을 코드로 작성할 수 있고 OS를 격리화하여 관리하는 기술#
image = container 실행에 필요한 파일과 설정값들을 포함 ( 변하지않는 파일 Immutable )
- 사용법 : Docker CLI, Docker-Compose CLI, API Reperence
- 환경 및 빌드 파일 구성 : DockerFile, Docker-Compose File
Linux Container란
* 필요한 라이브러리와 어플리케이션을 모아서 마치 별도의 서버처럼 구성한 것
* 컨테이너를 이루는 네트워크 설정, 환경 변수 등의 시스템 자원은 각 컨테이너가 독립적으로 소유
*프로세스의 구획화
- 특정 컨테이너에서 작동하는 프로세스는 기본적으로 그 컨테이너 안에서만 액세스 할 수 있습니다.
- 컨테이너 안에서 실행되는 프로세스는 다른 컨테이너의 프로세스에게 영향을 줄 수 없습니다.
* 네트워크의 구획화
- 기본으로 컨테이너 하나에 IP 주소가 할당되어 있습니다.
* 파일시스템의 구획화
- 컨테이너 안에서 사용되는 파일 시스템은 구획화되어 있습니다. 그렇기 때문에 해당 컨테이너에서의 명령이나 파일 등의 액세스를 제한할 수 있습니다.
==> virtual machine과 비슷하지만 비슷할 뿐 다른 기술(?)
Docker
어플리케이션에 대한 환경을 Docker는 격리성을 중심으로 한 VM의 관점으로 보다는 Container의 관점에서 빠르고, 개발자와 사용자 커뮤니티를 중심으로 혜택을 제공
Problem( 해결하는 방법 = 리눅스 컨테이너(Linux Container) )
1. 환경 표준화 - 환경이 일정하지 않아서 생기는 문제
- 대표적인 운영체제는 Linux, Windows, MacOS로 나뉘고, 엔지니어들은 자신이 개발하는
어플리케이션이 어떤 환경에서 구동될지 생각한 후 개발
* 환경이 다르다면 개발자들이 조정할 문제가 생기며, 수작업으로 환경을 맞추는 일은 그리 쉬운 일이 아니다
2. 수작업으로 일치시키는 환경 구성
- $ echo $HOME == 홈 디렉토리 확인
- ==> 어플리케이션을 설치할 때 컴퓨터에 맞게 변경해줘야함. ex) 방화벽 설정, 사용자 권한 설정, Port 설정
* 컴퓨터에 다양한 설정 작업을 수작업으로 하게된다면 많은 시간이 걸릴뿐만 아니라 설정들이 뒤엉킬 수 있음
3. 리소스 격리성(= 하나의 컴퓨터에서 여러개의 컴퓨터를 이용하는 것처럼 하는 것)
가상화 방법과 도커는 격리성을 제공하기 때문에 각 어플리케이션 마다
다른 컴퓨터에서 실행되는 것처럼 IP, Port 등을 다르게 설정할 수 있다. Virtual Machine , docker
- 웹서버 1 은 IP 는 A 로 하고 포트 번호는 A-1 로 하고, 방화벽 규칙은 a의 규칙을 이용하세요
- 웹서버 2 은 IP 는 B 로 하고 포트 번호는 B-1 로 하고, 방화벽 규칙은 b의 규칙을 이용하세요
* IP주소는 인터넷상에 있는 컴퓨터의 고유한 주소로 이것를 바탕으로 인터넷상의
한 컴퓨터에서 다른 컴퓨터로 데이터를 주고 받을 수 있다.
* ex 우리가 물건을 어떤 사람의 방까지 전달
IP address 는 단지 집주소 까지 알고있고 Port Number 는 방주소까지
인터넷 프로토콜에서 포트(port)는 운영 체제 통신의 종단점이다.
포트 번호로 프로세스(프로그램의 실행)를 식별
- 도커는 Virtual Machine 만큼 견고한 격리성을 제공하지는 않습니다.
- 도커는 리눅스의 컨테이너를 이용한 기술로 OS 위에 다른 OS를 실행하는 것이 아니기 때문에 Virtual Marchine 보다 좋은 성능을 낼 수 있습니다.
- virtual machine은 초기세팅이 필요한대 일정한 양을 할당을 해줘야함(
= 아직은 이해 못함) 독립적으로 운영
Docker CLI
- 레지스트리(Registry)
- Docker Hub : https://hub.docker.com/
- 도커 이미지가 관리되는 공간입니다.
- 특별이 다른 것을 지정하지 않는다면 도커 허브(Docker Hub)를 기본 레지스트리로 설정합니다.
- 레지스트리는 Docker Hub, Private Docker Hub, 회사 내부용 레지스트리 등으로 나뉠 수 있습니다.
- 레포지토리(Repository)
- 레지스트리 내에 도커 이미지가 저장되는 공간입니다.
- 이미지 이름이 사용되기도 합니다.
- GitHub의 레포지토리와 유사하게 생각하시면 됩니다.
- 태그(Tag)
- 같은 이미지라고 할지라도 버전 별로 안의 내용이 조금은 다를 수 있습니다.
- 해당 이미지를 설명하는 버전 정보를 주로 입력합니다.
- 특별히 다른 것을 지정하지 않는다면 latest 태그를 붙힌 이미지를 가져옵니다.
docker/whalesay 이미지 해석
docker Hub라는 레지스트리에서 docker라는 분이 올리신 whalesay 이미지
혹은 레포지토리에서 latest 태그를 가진 이미지(Tag가 없으면 default 최신 이미지)
$ docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]
- {container} run
- 컨테이너를 실행합니다.
- OPTION
- --name : 컨테이너의 이름을 할당합니다.
- COMMAND
- cowsay : 컨테이너에서 cowsay를 호출합니다. (저희가 python을 호출하듯 이용하는 것입니다.)
- ARG..
- boo : COMMAND 인 cowsay 에 넘겨질 파라미터입니다.
$ docker container run --name my_web --rm -p 818:80 httpd
- -p 는 로컬(호스트)의 포트와 컨테이너의 포트와 연결
- --rm Automatically remove the container when it exits / 중지될때 리소스도 중지
- cf. httpd 는 일정시간 연결 기록이 없으면 서버 가동이 중지 됩니다
docker container cp명령을 통해서 로컬(호스트)에 있는 파일을 컨테이너에 전달
- 앞에 인수의 경로를 뒤에 인수의 경로에 복사
$ docker container cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
$ docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
ex ) docker container cp ./ my_web:/usr/local/apache2/htdocs/
웹서버 구축후
해당 컨테이너에 진입
exec my_web pwd ( 현재 해당 폴더 ) 확인
exec my_web ls -al ( 모든 폴더 ) 확인
Docker 이미지 만들기
* docker container commit 명령을 이용
$ docker container commit my_web my_pacman:1.0
* 생성된 이미지를 이용해서 900 포트에 웹서버 구동
$ docker run --name my_web2 -p 900:80 my_pacman:1.0
* docker build 명령은, Dockerfile 을 바탕으로한 도커 이미지 파일을 생성
# --tag 는 name:tag 형식으로 이미지를 생성할 수 있습니다.
# 지정한 경로에 있는 Dockerfile 을 찾아서 빌드합니다.
$ docker build --tag my_pacman:2.0 .
# 해당포트로 구동 확인 901
$ docker run --name my_web3 -p 901:80 my_pacman:2.0
'데이터 엔지니어링(DE) > 환경과 DB' 카테고리의 다른 글
SQL과 NoSQL 차이점 (0) | 2021.07.14 |
---|---|
SQLite3 / DBeaver / ElephantSQL / NoSQL (0) | 2021.07.14 |
git , 가상환경 (0) | 2021.07.14 |
댓글