### Docker의 개념
-> 하드웨어의 자원을 모두 가상화 (예시>VM)로 만들지 않고 프로세스만을 격리시켜 빠르게 환경을 구축하는 소프트웨어 플랫폼
-> 서비스 환경을 갖추고 Docker image로 만들어 배포 이후 컨테이너로 간단하게 실행이 가능하다.
(https://www.dongyeon1201.kr/c20f7d07-6f23-4134-ae8e-e730dc7b5af6 참조)
============================================================================================
### Container의 개념
============================================================================================
※※※ 컨테이너가 생겨나게 된 배경 ※※※
1. 하나의 OS에 수많은 어플리케이션을 실행시키고, 각자의 프로세스가 호스트 OS의 리소스를 사용하는 경우
=> 예시로 윈도우 OS에 게임, 인터넷 뱅킹, 업무 프로그램 등등의 어플리케이션을 사용한다.
=> 하나의 OS의 리소스를 사용하기 때문에 각자의 프로세스가 다른 프로세스의 영향(느리거나 심지어 과다 사용으로 종료되는 경우) 을 줄 수 있다.
2. VM
=> 호스트 OS 위에 VM을 생성하여 게스트 OS를 각각 실행시키고, 각기 다른 VM에다가 희망하는 프로세스를 기동시킨다.
=> 서로 다른 게스트 OS에 기동중인 프로세스들은 서로에게 미치는 영향이 적다 (아예 없지는 않음 -> 호스트 OS에 문제가 생길 경우)
=> Hypervisor라는 소프트웨어를 통해 VM을 생성하고 구동시킨다.
3. Docker container
=> 하나의 호스트 OS에 컨테이너를 생성하고, 위 컨테이너에 프로세스를 실행시킨다.
=> 이미지로 실행된 형태이며, 호스트 OS와 이미지 사이에서는 아무런 영향을 주지 않고 Docker 엔진에서 독립적으로 실행된다.
=> 하드웨어의 모든 자원을 복제하는 VM과는 용량과 속도 부분에서 효율성이 월등히 뛰어나다.
============================================================================================
# Docker 설치
https://docs.docker.com/engine/install/rhel/
Install Docker Engine on RHEL
docs.docker.com
위 사이트 (REHL 기준) 의 명령어대로 입력하여 Docker 설치를 진행할 수 있다.
============================================================================================
# Docker 기본 운영법
==> Docker 실행 / 중지
service docker start/stop/status
==> Docker 버전 확인
==> OS 유저에게 docker 명령어 권한 부여
사용하고자 하는 OS user에서 다음과 같은 명령어 기입 -> sudo usermod -aG docker $USER |
==> Base image 생성
# Base image란? : 하위 image들을 만들기 위해 생성하는 OS image 예시> ![]() 해당 OS에 docker를 통해 base image를 생성하고자 한다. 목표하는 base image는 CentOS 7버전 이다. ![]() docker pull ${OS imageName}:${tag} 을 통해 base image를 손쉽게 설치할 수 있다. |
==> 현재 Host OS에 존재하는 Image 리스트 확인
윗 단계에서 설치해준 centos가 보인다.
==> Image 삭제
(https://www.lainyzine.com/ko/article/docker-rmi-removing-docker-images/ 참조)
![]() => nginx:alpine이라는 이미지를 pull 해왔다고 가정. ![]() => docker rmi ${제거하고자 하는 이미지} 명령어를 통해서 이미지를 제거하면, 이미지 내부의 다층의 레이어가 모두 삭제되는 것을 확인이 가능하다. # 컨테이너에서 사용중인 이미지 삭제 ![]() run을 통해서 실행중인 이미지를 삭제하고자 하면 위와 같은 에러가 출력된다. => docker rmi -f ${제거하고자 하는 이미지} : -f 옵션을 통해서 강제 삭제가 가능하나 권장하지 않음. (실제로 이미지가 삭제되는 것이 아닌 이미지 이름이 untagging되는것 뿐) => 해당 이미지를 사용하는 컨테이너를 모두 종료한 이후 이미지를 삭제하는 것이 권장됨 ![]() 현재 실행중인 컨테이너를 확인하는 docker ps 옵션에서 아래 옵션으로 필터 가능. docker ps --filter ancestor=${OS imageName}:${tag} # 응용 ![]() docker rm -f $(docker ps --filter ancestor=${OS imageName}:${tag}) => 괄호 안의 컨테이너들을 실제로 종료시켜주는 쉘 스크립트 ![]() 실제로 docker ps를 다시 확인해도 nginx:alpine 이미지를 사용하는 컨테이너가 현재 없음을 확인할 수 있다. 이후 docker rmi 옵션을 통해 정상적으로 이미지 삭제 |
==> 컨테이너 실행
docker run [OPTIONS] [CONTAINER] 으로 컨테이너 실행 가능
실제로 실행 이후 현재 CentOS의 컨테이너를 사용하고 있음을 확인할 수 있다.
※ 실행 옵션 예시
-i : 표준 입력을 활성화
-t : TTY 모드 사용
-d : 백그라운드로 컨테이너 실행
==> 사용중인 컨테이너를 이미지로 commit
![]() => 생성된 centOS 컨테이너에 임의의 test라는 디렉토리를 생성한 이후 aaa,bbb,ccc 파일들을 생성해보았다. docker commit [Container_name] [new_image_name] > 명령어를 통해 위 컨테이너를 이미지로 commit할 수 있다. >>>>>> Container_name 아는 방법 => run 명령어 사용 시 -name 옵션을 사용하지 않으면 임의의 name이 사용되며, 해당 name은 다음과 같이 확인할 수 있다. ![]() ![]() > 주기적으로 백업을 위해 commit 명령어로 현재 사용중인 컨테이너를 이미지로 만들 수 있다. ![]() >> commit한 test_image가 저장됐음을 확인할 수 있다. ![]() >> commit한 test_image 컨테이너에 접속하면 생성했던 test 디렉토리가 여전히 남아있음을 확인할 수 있다. |
==> Container ~ Host 파일 복사
![]() >> Host의 test.txt 1. Host -> Container docker cp [host_filepath] [container_name]:[container_filepath] ex> ![]() >> 해당 test.txt를 컨테이너의 /test 경로로 복사 ![]() 2. Container -> host docker cp [container_name]:[container_filepath] [host_filepath] |
==> 컨테이너 중지 및 삭제
> Container 중지
docker stop [Container name] 또는 docker stop [Container ID]
> Container 삭제
docker rm -f [Container name] 또는 docker rm -f [Container ID]
==> 컨테이너 사이즈 확인 및 로그 확인
> docker ps --size | grep [container_name]
> docker logs [image name/image ID]
============================================================================================
# Dockerfile을 통해 image 생성 및 빌드
해당 위치에 Dockerfile을 생성. (이름을 Dockerfile 로 저장해야 한다)
Dockerfile에 작성할 수 있는 명령어는 많으나, 위 사진은 단순하게 centos:7 컨테이너에 작업 디렉토리를 /tomcat으로 설정한 다음, 새로운 레이어에서 echo "DockerFile success"를 쌓으면서 새로운 이미지를 생성하는 과정이다.
https://wooono.tistory.com/123
[Docker] Dockerfile 개념 및 작성법
Dockerfile Dockerfile은 DockerImage를 생성하기 위한 스크립트(설정파일)이다. 여러가지 명령어를 토대로 Dockerfile을 작성한 후 빌드하면 Docker는 Dockerfile에 나열된 명령문을 차례대로 수행하며 DockerImage
wooono.tistory.com
=> 위 글은 DockerFile을 작성하는 법 참조 블로그
docker build 옵션을 통해서 이미지 빌드
(work:king을 통해서 이름을 work, tag를 king으로 설정하면서)
(docker build . => Dockerfile이 있는 디렉토리 위치에서 실행해줘야됨)
=> 생성된 이미지 확인
=> 생성한 Docker image를 다른 곳에서 사용할 수 있도록 내보냄
=> 생성된 이미지 로드
============================================================================================
=> 실행 중인 컨테이너 ip 확인 방법
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ${CONTAINER_NAME}
'Open Source > etc' 카테고리의 다른 글
Jenkins로 weblogic 배포하기 (0) | 2023.11.01 |
---|---|
Jenkins install (0) | 2022.07.28 |
WireShark를 통한 Packet 분석 (0) | 2022.04.22 |
IIS 설치 및 Weblogic 연동 (0) | 2022.04.08 |
Python 기본 정리 (0) | 2022.03.27 |