들어가기전
용어 | 무엇인가 |
도커 | 컨테이너 제공 업체 중 가장 보편적인 업체(소프트웨어) |
컨테이너 | 구동하려는 애플리케이션(라이브러리,툴,코드 등등)을 컨테이너라는 단위로 감싸 어디서든 추가 설정없이 쉽게 구동할 수 있도록 해 주는 기술 |
컨테이너 런타임 | 컨테이너를 쉽게 내려받거나 공유하고 구동할 수 있도록 해주는 도구. 이것의 예가 도커 |
쿠버네티스 | 쿠버네티스는 컨테이너에 대한 오케스트레이션 툴임 |
컨테이너?
구동하려는 애플리케이션을 컨테이너라는 단위로 감싸 어디서든 쉽게 구동할 수 있도록 해 주는 기술, 또한 외부 환경으로부터 격리된 공간에서 프로세스가 동작하는 기술이다. 경량화되어있고, 서버나 OS 환경에 종속적이지 않아 진정한 애플리케이션의 이식성이 실현됩니다.
컨테이너로 애플리케이션을 패키징하기 때문에 도커와 같은 컨테이너가 작동하는 환경이라면 어디서든 작동합니다.
VM과의 차이점은 OS위에 OS를 올릴 필요가 없다는 것이고 VM이 하드웨어를 가상화한다면 컨테이너는 서버 운영 체제를 가상화한다.
특징
- 경량화 : 앱 구동을 위해 VM처럼 게스트 OS가 포함되지 않습니다.
- 효율성 : 호스트 OS 커널을 공유하므로, 자원을 미리 할당하지 않고 애플리케이션 동작에 필요한 컴퓨팅 자원만 필요로 합니다.
- 이식성 : 컨테이너가 작동하는 환경이라면 어디든지 작동시킬 수 있습니다.
- 안정성 : 호스트 OS 커널을 공유하는 구조로 장애 발생시 다른 컨테이너들이 영향을 받을 수 있습니다.
도커란 무엇인가
소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하여, 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 가장 보편적인 소프트웨어 플랫폼
컨테이너 vs 이미지
문서들을 보다보면 갑자기 이미지라는 단어가 나오기 시작합니다. 이게 무슨 뜻인지 컨테이너와 무슨 차이인지 헷갈리실 수 있습니다. 이미지는 컨테이너에 올라가는 iso,탬플릿을 말하는 것입니다. 컨테이너는 위에서 말한 것처럼 애플리케이션을 감싸는 단위입니다. 따라서 컨테이너 안에 이미지가 있는 것이고 컨테이너의 이미지화라는 말은 VM을 ova 파일로 저장해 배포하는 것처럼 컨테이너의 구성 자체를 ova 처럼 이미지로 저장해 이미지 처럼 컨테이너에 올릴 수 있다는 얘기입니다.
도커 다운로드
Install Docker Engine on Ubuntu
명령어
기본 형식
#기본 형식
docker [대상] [액션]
# 대상 : container(생략 가능), image, volume, network
# 액션 : ls , inspect, start, run
컨테이너 생성(실행 X)
docker (container) create --name [name] [image]
# docker create는 도커를 생성하지만 자동으로 시작하지 않는다는 명령어
docker create --name testos ubuntu
# ubuntu 이미지를 사용해서 컨테이너를 생성함
docker create -it --name [name] [img]
# 옵션을 붙여주어 컨테이너 생성을 할 수 있음
# 사실 -it 를 붙여주어야지 쉽게 컨테이너에 접근할 수 있습니다. 거의 필수 옵션!
# /bin/bash 쉘을 사용한다고 알려주는 옵션입니다
옵션 | 설명 |
i | 표준 입력을 활성화함, 컨테이너와 attach 되어있지 않더라도 표준 입력을 유지함 |
t | 컨테이너에 pseudo-terminal을 할당 |
—name | 컨테이너 이름 지정 |
컨테이너 실행 & 종료 & 일시 정지
docker -ai start [name]
# 컨테이너 실행
docker stop [name]
# 컨테이너 종료
docker pause/unpause [name]
# 컨테이너 일시 정지, 일시 정지 해제
약간 이런 느낌
컨테이너 종료 없이 나가기
ctrl + p + q
나가고 난 후 docker -ps 확인 해보면 컨테이너 실행이 되고 있는걸 볼 수 있음
docker run
docker run [옵션] --name [name] [img]
docker run [옵션] --name [name] [img] [command]
docker run -it --name -w "디렉토리" -e "SOLO=1" [img]
컨테이너를 만들면서 바로 실행하는 명령어입니다. 또한 컨테이너의 command를 임의로 정의할 수 있는데 옵션 -d를 적어주어 컨테이너에 직접 접속하지 않고 command를 백그라운드로 실행할 수 있다고 합니다.
옵션 설명
-d | 백그라운드에서 command 실행 |
-w | 컨테이너의 작업 디렉토리를 설정 |
-e | 환경 변수 설정 |
—env-file=[파일명] | 정의해야 하는 환경 변수가 많은 경우 특정 파일을 호출해서 설정 가능 |
docker exec
docker exec -it [name] /bin/bash
동작 중인 컨테이너에서 새로운 프로세스를 실행합니다. 따라서 이 프로세스를 종료해도 컨테이너는 계속 실행되고 있습니다. 또한 별도의 명령어를 실행할 수 있습니다. 그리고 node.js 같은 쉘이 없는 컨테이너에 접속할때도 이용한다고 합니다.
컨테이너 이름 재설정
docker rename [original name] [chage name]
위 명령어로 이미 지저오딘 컨테이너의 이름을 변경할 수 있습니다. 이름이 변경되도 컨테이너 ID는 변경되지 않습니다.
실행중인 컨테이너 확인
docker ps
#실행 중인 컨테이너 리스트 확인
지표 | 내용 |
container id | 컨테이너에 할당되는 고유한 컨테이너 id |
전체 id에서 12자리만 출력 | |
image | 컨테이너를 생성할 때 사용된 이미지 |
command | 컨테이너가 시작될때 실행될 명령어 |
created | 컨테이너 생성 후 경과 시간 |
status | 컨태이너의 상태 |
실행 중, 종료, 일시 중지 | |
names | 컨테이너 이름 |
docker ps -a
#실행중이지 않은 컨테이너까지 확인
컨테이너 삭제
docker rm [name]
# 종료된 컨테이너를 삭제하는 명령어
docker rm -f [name]
# 실행중인 컨테이너를 삭제하는 명령어
docker cp & docker diff
docker cp [복사할 대상] [복사시킬 대상]
#컨테이너에
docker diff [name]
#컨테이너가 생성된 시점부터 변경된 이력을 확인
지표 | 설명 |
A | 추가된 이력 |
C | 변경된 이력 |
D | 삭제된 이력 |
이미지 다운로드 및 삭제
docker pull [image]:[version]
# 로컬 리포지토리에 iso 파일 저장
docker images
# 로컬 리포지토리에 존재하는 이미지 확인
docker rmi [이미지명]
# 이미지 삭제
컨테이너에 이미지를 올리기 위해선 로컬 리포지토리에 이미지가 존재해야하며 존재하지 않는다면 기본으로 pull해온다고 합니다. 하지만 pull 명령어를 써서 직접 원하는 특정 이미지를 받아올 수도 있습니다.
'네트워크 > 서버보안' 카테고리의 다른 글
Ubuntu netplan vlan configuration (with VMware workstation) (0) | 2023.10.10 |
---|---|
ubuntu syslog 서버,라우터 (0) | 2023.03.14 |
베어메탈 (0) | 2023.03.10 |
lvm(logical volume manager) (0) | 2023.01.07 |
ftp 상위디렉토리 접근 보안 (0) | 2023.01.03 |