참고
도커(컨테이너 기술)는 왜쓰지?
NOTE
도커없이 프로그램을 다운받고 실행한다면 갖고 있는 서버, 패키지 버전, 운영체제 등에 따라 많은 에러가 발생할 수 있다. 이러한 설치 과정을 단순하게 해주는 것이 도커다.
각 프로그램의 OS, 의존성 관리가 너무 힘듬…
도커(컨테이너)기술로 각자 격리화 시킨다!
•
도커가 없다..
◦
홈페이지 이동 ->인스톨러 다운 -> 인스톨러 실행 -> 설치완료
◦
과정도 복잡하고, 서버, 패키지 버전, 운영체제 등에 따라 설치과정에서 에러가 발생함
•
도커를 쓴다!
◦
docker run -it redis 명령어를 이용하면 바로 설치한다!
◦
도커를 이용해서 프로그램을 설치하면 예상치 못한 에러도 덜 발생하고 과정도 간단해진다!
도커
NOTE
컨테이너 기반의 오픈소스 가상화 플랫폼
도커 이미지 분석.. (등뒤에 있는게 컨테이너다)
도커를 사용하는 흐름
•
하나의 큰 애플리케이션을 서비스 단위로 분할하여 빠른 배포가 가능하다.
•
컨테이너끼리 서로에게 영향을 끼치지 않는다.
•
도커는 기술적인 개념이자 도구이며, 이미지를 컨테이너에 뛰우고 실행하는 기술!
도커 구성요소
NOTE
•
Dokcer Engine
◦
도커를 이용한 애플리케이션 실행 환경 제공을 위한 핵심
•
Docker Hub
◦
전 세계 도커 사용자들과 함께 도커 컨테이너 이미지를 공유하는 클라우드 서비스
•
Docker Register
◦
도커 허브 사이트를 공개된 Registry라고 생각하자, 사내에 도커 컨테이너 이미지를 push/pull 할 수 있는 독립된 레지스트리 구성
•
Docker Machine
◦
가상머신 프로그램 및, AWS, EC2 도커 실행 환경을 생성하기 위한 도구
•
Dokcer Swam
◦
여러 도커 호스트를 클러스트로 구축하여 관리할 수 있는 도커
컨테이너
NOTE
다양한 프로그램들과 실행환경을 컨테이너로 규격화시켜 프로그램의 배포 및 관리를 단순화 시킬 수 있다
도커 컨테이너
•
화물선에 담는 컨테이너 처럼, 딱 맞는 규격에 여러 화물을 실어 쉽게 운송하는 개념이다.
•
컨테이너 안에 다양한 프로그램, 실행환경을 추상화하고 동일한 인터페이스를 제공해 프로그램의 배포 및 관리를 단순하게 해준다
도커 이미지( = 컨테이너 이미지)
NOTE
도커 이미지란 응용 프로그램을 실행하는 데 필요한 모든 것을 포함하는 가볍고, 독립적이며 실행가능한 소프트웨어 패키지다!
도커 이미지
카카오톡 예시
•
도커 이미지 안에는 카카오톡을 실행할 때 필요한 모든 설정이나 종속성을 가지고 있다.
•
이 이미지를 사용해서 컨테이너를 만든다.
•
컨테이너를 실행하면 어플리케이션이 컨테이너 안에서 실행된다.
•
컨테이너는 이미지의 인스턴스다.
요약
•
즉, 도커 이미지를 이용해 컨테이너를 생성하고, 도커 컨테이너를 이용해 프로그램을 실행하는 것이다.
도커 설치
NOTE
uname -a
# 업데이트
sudp apt update
# docker ce 다운로드, https 경로로 다운받아야함
sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
# gpg관련 값 업데이트, 키링개
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# key값 확인
sudo apt-key fingerprint
sudo apt-key fingerprint 0EBFCD88
# apt repository source에 docker repo 추가 (keyring 포함)
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
# docker repo 추가이후 update 수행
sudo apt update
# docker에서 제공하는 docker-ce 버전 확인
sudo apt-cache policy docker-ce
# 최신 docker version 설치
sudo apt -y install docker-ce
# df -h를 치면 root경로 확인가능 (sudo가 필요함)
# /var/lib/docker의 경우 sudo가 필요하다.
df -h
sudo docker version
Bash
복사
도커 설치 방법 1
# docker에서 제공하는 shell script을 이용한 자동설치
curl -fsSl https://get.docker.com -o get-docker.sh
# shell scirpt 내용 확인 후 변경가능
sudo vi get-docker.sh
# 실행 권한 부여
sudo sh get-docker.sh
Bash
복사
도커 설치 방법 2
sudo apt-get update
sudo apt-get install docker.io -y
sudo systemctl status docker
sudo chmod 666 /var/run/docker.sock
Java
복사
도커 설치 방법 3
# docker 그룹에 현재 사용중인 계정(scofe)를 등록해서 sudo없이 사용시킨다.
sudo usermod -aG docker scofe
sudo systemctl daemon-reload
sudo systemctl enable docker
sudo systemctl restart docker
# 재접속해야 됨
sudo reboot
Shell
복사
도커 sudo 설정
•
도커 파일시스템 xfs
•
저장 드라이버 overlay2
•
Cgroup이 2로 올라가면서 이전버전 이미지가 사용안될 수 있음
Nginx 올리기 - 직접 pull받기
NOTE
nginx, nginx-alpine 용량비교
•
ctrl + p ⇒ ctrl + q (docker container exec접속시 종료하지 않고 나옴)
•
alphine은 무엇인가?
◦
경량 이미지, 대부분 alphine, slim을 사용하는걸 추천
설치이후 8081포트로 연결시켜서 접속가능
54177 포트를 보면 8081- > 80 포트변환을 해주는기능이 있음
172.17.0.4 정보 (nginx 도커 정보)
8081포트로 도커 접속
•
IPtables에서도 조회가능하며, 현재 54177포트가 8081의 접속을 80으로 처리해줌
•
NAT, NATP 기술을 가지고 있는것이, docker-proxy
간단한 도커 실습
Nginx 올리기 - 기존 파일변경
NOTE
docker cp를 이용해서 ngnix내부의 html을 변경한다!
html과 이미지를 넣어서 변경한 페이지
<html>
<head>
<title>Docker Container App</title>
<style>body {margin-top: 40px; background-color: #87CEEB; background-image: url("docker_logo.png");}
</style>
</head>
<body>
<div style=color:black;text-align:center>
<h1> Docker Container Sample Application. </h1>
<h2> "fastcampus" </h2>
<p>Your application is now running on a container in Docker Container.</p>
</div>
</body>
</html>
HTML
복사
Nginx 올리기 - 이미지 빌드
NOTE
FROM nginx:1.25.0-alpine
COPY index-image.html /usr/share/nginx/html/index.html
COPY docker_logo.png /usr/share/nginx/html/docker_logo.png
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Docker
복사
기존 ngnix를 받아서 html과 image를 바꿔서 다시 빌드함!
docker run -d --name=webserver2 -p 8002:80 myweb:v1.0
Docker
복사