Docker 도커란?
Docker는 애플리케이션 개발, 배송 및 실행을 위한 개방형 플랫폼입니다. Docker를 사용하면 애플리케이션을 인프라에서 분리하여 소프트웨어를 신속하게 제공할 수 있습니다. Docker를 사용하면 애플리케이션을 관리하는 것과 동일한 방식으로 인프라를 관리할 수 있습니다. 코드를 신속하게 배송, 테스트 및 배포하기 위한 Docker의 방법론을 활용하면 코드를 작성하고 프로덕션에서 실행하는 사이의 지연 시간을 크게 줄일 수 있습니다.
도커 공식 문서 참고 https://docs.docker.com/get-started/overview
💡 도커의 특징
- open platform이다.
- 어플리케이션을 인프라에서 분리해준다.
- 신속하다.
- 인프라를 어플리케이션을 관리하는 것처럼 관리 할 수 있다.
- 코드 배포에 용이하다.
즉, 도커는 컨테이너 기반 가상화 도구이다. 애플리케이션을 컨테이너라는 단위로 격리하여 실행하고 배포하는 기술이다.
💡 컨테이너란?
- 컨테이너는 가상화 기술 중 하나이다.
- 호스트 운영체제 위에 여러 개의 격리된 환경을 생성
- 각각의 컨테이너 안에서 애플리케이션을 실행한다.
💡 가상화 기술(Virtual Machine)이란?
- 하나의 물리적인 컴퓨터 자원을 가상적으로 분할하여 여러 개의 가상 컴퓨터 환경을 만들어 내는 기술, 이를 통해 물리적인 컴퓨터 자원을 더욱 효율적으로 사용할 수 있으며, 서버나 애플리케이션 등을 운영하는데 있어 유연성과 안정성을 제공한다.
컨테이너 기반 특징
- 리눅스 커널의 기능을 사용하여 만들어짐
- chroot : 파일 시스템을 격리
- namespace : 프로세스 격리
- cgroup : 하드웨어 자원 격리
- 프로세스 단위의 격리 환경
정리) 도커란?
- 컨테이너 기반 가상화 도구
- 리눅스 컨테이너 기술인 LXC(Linux Containers) 기반
- 애플리케이션을 컨테이너라는 단위로 격리하여 실행하고 배포하는 기술
- 다양한 운영체제에서 사용할 수 있으며, 컨테이너화된 애플리케이션을 손쉽게 빌드, 배포, 관리할 수 있는 다양한 기능을 제공
- 위 기능들을 통해 애플리케이션을 빠르게 개발하고, 효율적으로 배포, 관리할 수 있음
도커 구조
💡도커 용어 알아보기
✅ 도커 데몬
도커 엔진의 핵심 구성 요소로 도커 호스트에서 컨테이너를 관리하고 실행하는 역할입니다.
컨테이너를 생성, 시작, 중지, 삭제하는 등의 작업을 수행할 수 있습니다.
도커 데몬은 도커API 요청을 수신하고 이미지, 컨테이너, 네트워크 및 볼륨과 같은 Docker 객체를 관리합니다.
데몬은 다른 데몬과 통신하여 도커 서비스를 관리할 수도 있습니다. 외부에서 이미지를 다운로드하고 빌드하는 작업을 수행합니다.
✅ 도커 클라이언트
도커 클라이언트는 많은 도커 사용자가 도커와 상호 작용하는 기본 방법입니다. 이와 같은 명령을 사용하면 docker run 클라이언트는 이러한 명령을 전송하여 도커를 수행합니다. 이 도커 명령은 Docker API를 사용하고 도커 클라이언트는 둘 이상의 데몬과 통신할 수 있습니다.
✅ 도커 레지스트리
도커 레지스트리는 도커 이미지를 저장합니다.
docker pull 또는 명령을 사용하면 docker run구성된 레지스트리에서 필수 이미지를 가져옵니다. 명령 을 사용하면 docker push이미지가 구성된 레지스트리로 푸시됩니다.
- Docker hub : 디폴트 레지스트리, 누구나 접근가능한 공개형 저장소
✅ 도커 이미지
도커 이미지는 도커 컨테이너 생성 지침이 포함된 읽기 전용 템플릿입니다. 자신의 이미지를 만들 수도 있고 다른 사람이 만들고 레지스트리에 게시한 이미지만 사용할 수도 있습니다.
✅ 도커 컨테이너
컨테이너는 이미지의 실행 가능한 인스턴스 입니다. 도커 API 또는 CLI를 사용하여 컨테이너를 생성, 시작, 중지, 이동 또는 삭제할 수 있습니다. 컨테이너를 하나 이상의 네트워크에 연결하거나 스토리지를 연결하거나 현재 상태를 기반으로 새 이미지를 생성할 수도 있습니다.
도커 허브에서 이미지를 다운 받는걸 docker pull이라고 한다.
이미지를 컨테이너에 실행하는 걸 docker run이라고 한다.
(2) 도커 실습
1. 도커허브에서 원하는 images 검색 후 명령어 복사 -> 이미지 Pull
Docker
hub.docker.com
2. 도커 이미지 & 컨테이너 실행, 중지, 삭제 명령어
1️⃣ cmd에서 실행할 경우 명령어
// 도커 이미지 실행
docker run <이미지이름>
ex) docker run httpd
// 실행중인 컨테이너 확인
docker images
// 도커 목록 확인
docker ps
// 새로운 컨테이너 생성하기
docker run --name <컨테이너이름> <이미지 이름>
ex) docker run --name ws2 httpd
// 실행중인 컨테이너 중지
docker stop <컨테이너 이름>
// 중지시킨 컨테이너 포함 모든 컨테이너 목록 확인
docker ps -a
// 중지시킨 컨테이너 다시 실행
docker start <컨테이너 이름>
// 로그 출력
docker logs <컨테이너 이름>
// 로그 실시간 출력
docker logs -f <컨테이너 이름>
// 컨테이너 삭제(실행중이면 먼저 stop해주어야함)
docker rm <컨테이너 이름>
// 컨테이너 stop 없이 강제 삭제
docker rm --force <컨테이너 이름>
// docker 이미지 삭제
docker rmi <이미지이름>
2️⃣ Docker Desktop에서 실행할 경우
1. 도커 run (이름 지정 가능)
2. 실행중인 ws1 컨테이너 stop, run, delete, log 확인 가능
(3) 명령어 실행
docker exec ws3 pwd
docker exec ws3 ls
docker exec ws3 /bin/sh
docker exec -it ws3 /bin/sh
docker exec -it ws3 /bin/bash
// 밖으로 나올 때
exit
cd /usr/local/apache2/htdocs/
ls -al
// nano 설치
apt update
// index.html 파일 접속
nano index.html
// 접속되면 html 파일을 수정할 수 있다.
// 수정 후 ctrl+x -> ctrl+y 한 후 저장하고 나오기
http://localhost:8081/index.html
(4). 호스트와 컨테이너의 파일시스템 연결
// index.html 만들기
$ echo "Hello World" > index.html
// 홈에 있는 test 폴더를 마운트 시킬것임
$ docker run -p 8888:80 -v ~/test:/usr/local/apache2/htdocs httpd
// 현재 실행중인 도커 컨테이너 보기
$ docker ps
// 나온 컨테이너 id 로 exec 한다 (/bin/sh는 exec 명령어로 접속시 사용하는 로그인쉘을 지정하는 명령어)
// exec 도커 컨테이너의 터미널로 접속하기
$ docker exec -it {{컨테이너ID}} /bin/sh
// 도커 파일 만들기
$ echo "FROM httpd:latest
COPY index.html /usr/local/apache2/htdocs/index.html
EXPOSE 80" > Dockerfile
// 도커 이미지 만들기
$ docker build -t my-httpd .
// 도커 이미지 만들어졌는지 확인하기
$ docker images
// 빌드한 이미지 실행하기
// 로컬 컴퓨터의 8888번 포트를 도커컨테이너의 80번 포트로 연결한다
$ docker run -p 8888:80 my-httpd
원티드 Docker 수업 및 생활코딩 Docker 입문 강의 참조
'AWS & Docker' 카테고리의 다른 글
[Docker] 도커 활용 클라우드 서비스 (0) | 2023.08.08 |
---|---|
[Docker] 도커 image, compose, file (0) | 2023.08.03 |
[Docker] 도커 이미지 (0) | 2023.08.03 |
[AWS & Docker] AWS, Docker 실행 하기 (0) | 2023.05.30 |