따배도 복습- 도커
본 게시물은 유투브 강의 따배도-도커 강의를 보고 학습한 내용을 정리한 내용입니다.
1. 컨테이너와 도커의 이해
why we should learn it?
- 필요하기 때문에 시대적 요구 : 하드웨어 가격 다운, 성능 높아지고, 서비스는 커지고 무거워져
- 시스템이 커지면서 오토스케일이나 무중단배포등이 필요해졌다.
- 용량이 적은 컨테이너 어플리케이션이 이것을 충족한다.
- 컨테이너가 환경을 다 갖추고 있다 : 컨테이너단위로. 독립. isolation
리눅스위에서 돌리는 이유
- 리눅스 커널이 컨테이너에 필요한 설정을 모두 제공하고 있다.
- 스토리지
- 네임스페이스 : isolation
- 네트워킹
- mac이나 windows에서는 hypervisor 기능을 활성화 해야 한다.
- 결론적으로 돈안주고 리눅스커널위에 따로 기능활성화 없이 바로 컨테이너 사용할 수 있는 리눅스가 된다.
그냥 프로그램 구동과 다른 점.
- e.g
쓰는 이유
- 오토스케일 가능(msa 구조에 유리)
- 데브옵스 적합
- 개발환경,운영환경 차이로 인한 어려움이 없다. 컨테이너 채로 설치하면 됨.
- 기존에서는 스케일업하려면 모든 환경을 복제해야 하지만, 컨테이너구조에서 컨테이너만 복제하면 됨.
2. 도커 설치실습
- 아래 케이스에 맞게 설치하면 된다.
2.1. Virtualbox 환경
- 윈도우 환경에서 hypervisor를 설치하고 hypervisor 내부의 가상머신 2대를 설치한후 각 각의 가상머신에 docker를 설치한다.
1) Virtualbox(hypervisor 중에 하나) 다운로드 설치 2) Virtualbox 네트워크구성(vm간/외부)
2.1.1. Virtualbox 내 가상머신(vm) 만들기
- ubuntu 와 centOS 2개를 만들었음.
- ubuntu 가상머신에 우분투이미지 연결 (본격 설치 임.)
- ubuntu 가상머신에 우분투20.04LTS 버전을 다운받아.
- 설정>저장소> 컨트롤러 IDE에 다운받은 우분투 설치 파일을 등록한다.
- 시작하기 하면 설치 진행됨. 리부팅하기
- 설치 후 환경구성
- ubuntu 가상머신을 시작하면 최초설치에 따른 설정선택이 진행되고 구동된다.
- gui 로그인
- 서버구성 : 네트워크 설정
- text 부팅으로 수정
- root password 설정 : sudo passwd root - 나의패스워드
- 터미널에서 host, hostname 등 설정
- ssh 서버 어플리케이션 설치 : 그 외 필요한 것
apt-get update && apt-get install -y openssh-server curl vim tree
- ssh 툴로 로그인 구성 ( 윈도우(로컬) 터미널에서도 가상머신에 접속가능해짐)
- 스냅샷 찍기 : 최초 상태로 돌아갈 수 있는 포인트를 만듦
- centOS 가상머신에 우분투이미지 연결 (본격 설치 임)
- 웹에서 다운받아 설정>저장소> 컨트롤러 IDE에 다운받은 centOS 설치 파일을 등록
- 시작하기 하면 설치 진행됨.
- 설치 후 환경구성
- centOS 가상머신을 시작하면 최초설치에 따른 설정선택이 진행되고 구동된다.
- 서버구성 : 네트워크 설정
- root 패스워드 설정하기
- 사용자등록
- 리부팅 후 라이센스동의(필수), 환경구성 추가 설정(옵션).
- gui 로그인, 환경구성 추가 설정
- 네트워크 설정 확인
- 터미널에서 host, hostname 등 설정
- reboot
- ssh 이미 설치 되어있음.
- ssh 툴로 로그인 구성 ( 윈도우(로컬) 터미널에서도 가상머신에 접속가능해짐)
- 스냅샷 찍기 : 최초 상태로 돌아갈 수 있는 포인트를 만듦
2.1.2. 가상머신에 도커설치하기
- 준비 1. 가상머신 구동 그리고 ssh툴로 각각 연결해둘 것.
- 도커 문서
https://docs.docker.com
- docker for linux
- 설치 방법의 종류 : 레파지토리 이용/다운로드 직접/script 이용 설치
- Repository를 이용한 설치
2.1.2.1. 우분투에 설치하기(도커공식문서보기 )
- apt 패키지인덱스를 업데이트 하고 apt가 https를 통해 레파지토리를 사용하도록 허락하는 패키지를 설치.
$ sudo apt-get update $ sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release
- 도커 인증서 저장
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- 설치할 안정적인 저장소의 URL 등록
$ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- 도커 설치
$ sudo apt-get update $ sudo apt-get install docker-ce docker-ce-cli containerd.io -y
- 도커 설치 확인
$ sudo docker version
- 도커 설치 확인
2.1.2.2. centOS에 설치하기(도커공식문서보기 )
- 레파지토리 셋업 : yum-utils 패키지 설치와 안정적인 버전의 도커 레파지토리 설정
$ su - // root 로 변경 $ yum install -y yum-utils $ yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
- 도커 설치
$ sudo yum install docker-ce docker-ce-cli containerd.io -y
- 도커 구동(서비스데몬실행) 및 확인
$ systemctl start docker $ docker version
2.1.2.3. 유저에게 도커 명령어를 쓸수 있도록 도커관리자 권한 부여하고 확인하기(Linux계열 동일)
$ su - $ usermod -a -G docker 유저id $ su - 유저id $ docker ps
2.5. windows (dockerDesktop)
- vm 없이 windows에 docker 직접 설치(wsl2 이용)
- dockerDesktop 설치
- Hyper-v 가상화 기능활성화
- WSL2의 리눅스 커널 설치
2.5.1 hub.docker.com 계정 등록
- 윈도우에서 바로 사용을 위해서는 필수임.
- MacOS 도 대동소이함.
2.5.2 DockerDesktop 설치
- hub.docker.com 에서 binary파일 다운로드 : 계정 필수임.
- 다운로드 파일 실행하여 설치하기
- Hyper-v 가상화 기능활성화(cpu 가상화 지원, Bios-cmos-에서 가상화 기능 켜야 함.)
- WSL2의 활성화
- 컴퓨터 리부팅
- 리부팅후 커널 업데이트 경고메세지가 있으면, 커널을 업데이트하자. 링크를 보고 따라하기 : 리부팅필요함
- 도커 실행 확인
- powershell
$ docker version $ docker login .username : .password : $ docker pull nginx // 이미지를 다운받아본다. $ docker images $ docker run -d -p 80:80 --name web nginx // 컨테이너 실행 $ docker rm web // 컨테이너 삭제 $ docker rmi nginx // 이미지 삭제
- powershell
3. 도커 컨테이너 살펴보기 및 직접 해보기
- Docker Host : 리눅스 커널을 가진 os-도커 호스트-에 docker를 설치하여 deamon을 실행한다 -> 도커 데몬이 동작되고 있는 리눅스 커널이 있는 시스템
docker가 컨테이너를 실행할 수 있는 플랫폼을 만들었다라고 표현 가능. 여러 컨테이너가 도커데몬 아래 실행되며, 컨테이너들끼리 독립된 구조. 도커 커널/데몬은 하나.
- e.g ) 노드js 기반 웹서버에 소스코드 그리고 앱을 기동하는 명령어.
- Container Image 는 파일 형태로 저장된 상태의 것, Contaiber 는 Image를 구동한 것 자체.
- 기본 명령어
$ docker search nginx // 컨테이너 찾기 $ docker pull nginx:latest // 이미지 다운로드 아직은 이미지 상태고. 이미지 안에는 레이어별로 파일을 따로 가지고 있음. $ docker run -d --name web -p 80:80 nginx:latest // 이미지를 실행하면, 컨테이너가 동작된다.
4. 도커 컨테이너 만들어보기
4.1. 무엇을 컨테이너로 만들것인가?
- 개발한 애플리케이션과 운영환경이 모두 들어있는 독립된 공간.
- e.g . 운영환경 - node.js + 소스코드 - app.js + 애플리케이션 구동명령어 묶음.
- MSA환경에서 프로그램과 실행환경을 모두 (각) 컨테이너로 만들어서 운영가능.
- nodejs, php, sql, R과 같은 다양한 언어를 사용하여 개발된 프로그램을 운영할 때 유리.
4.2. docker file 로 컨테이너 만들기.
- docker file : Container를 만들 수 있도록 도와주는 명령어 집합 text file
- top-down 해석
- 컨테이너 이미지 생성의 고유 지시어 가짐
- 대소문자 구분 없음 (가독성을 위한 사용 정도)
- 파일명 : dockerfile
- 만들기 예제 ```shell $ mkdir build $ cd build $ vi dockerfile
— vim start— FROM node:12 COPY app.js / CMD [“node”, “app.js”] . . . — vim end—
$ docker build -t 이미지이름:태그 . // 실제 컨테이너 만드는 명령 ‘.’의 의미는 현재 디렉토리라는 의미. $ docker build -t appjs:latest
### 4.3. 배포하는 방법
내 도커호스트의 컨테이너를 도커허브(회사 도커 허브일수도 있고)로 배포하기
```shell
$ docker login
.username :
.password :
$ docker push appjs:latest
Tip : hub.docker.com에서 기존 dockerfile을 많이 읽어보고 해석해보는 연습하면 좋다.
- 실습해보기
- nodejs 에플리케이션 컨테이너 만들기 : hellojs
$ vi hello.js $ cd .. $ docker ps $ docker search node $ cd hellojs $ vi dockerfile $ cat hello.js $ cat dockerfile $ docker build -t hellojs:latest .
- 우분투 기반의 웹 서버 컨테이너 만들기
- 배포하기 : 도커허브의 계정이 앞에 오도록 해야 함.
$ docker login $ docker tag webserver:v1 mockdanjung/webserver:v1 //레파지토리 이름 필수라서 변경함. 계정id임. $ docker tag hellojs:latest mockdanjung/hellojs:latest $ docker push mockdanjung/webserver:v1 // latest외에는 생략이 불가함. $ docker push mockdanjung/hellojs
- 배포확인 : hub.docker.com 로그인 후 확인 가능
- nodejs 에플리케이션 컨테이너 만들기 : hellojs
- 문제풀이 해보기
$ vi dockerfile
------
# dockerfile
FROM debian:latest
COPY webpage.sh /
RUN apt-get update\
&& apt-get install -y fortune
RUN ["chmod", "go+x", "webpage.sh"]
CMD ["./webpage.sh"]
------
$ vi webpage.sh
------
#!/bin/bash
mkdir /htdocs
while :
do
/usr/games/fortune > /htdocs/index.html
sleep 10
done
------
# build
$ docker build -t fortune:21.02 .
# docker run
$ docker run -d --name fortune fortune:21.02
# exec
$ docker exec -it fortune /bin/bash
$ cat /etc/issue
# 결과 : Debian GNU/Linux 11 \n \l
$ cd htdocs
$ cat index.html
# 결과 : Look afar and see the end from the beginning.
Comments