wonder
정보보안 스터디 - 10주차 2일 - docker 이미지 생성 본문
☞ 컨테이너 명령어
포트 매핑, 구동 확인 docker continaer port myweb 포트매핑이 안되어있다면 아무것도 뜨지 않습니다. |
docker top myweb 이용중인 리소스 상태가 뜹니다. top 명령어가 없는 컨테이너도 있기 때문에 밖에서 확인합니다. |
docker rename myweb testweb 이름변경 |
attach vs exec
centos의 경우 command가 bash쉘이므로
docker attach로 실행하면 bash쉘로 이용가능합니다.
docker exec -it centos /bin/bash 도 역시 가능합니다.
여기서 /bin/bash 제외하고도 단순명령어로 /bin/date, cat 등 이용합니다.
nginx는 command가 bash쉘이 아니므로
docker attach 로 실행하면 이상한하게 뜹니다.
이럴 경우에는 exec를 실행해야 쉘을 사용가능합니다.
☞ 메모리 리소스 제한
한 컨테이너에 리소스를 너무 많이 차지 한다면 다른 컨테이너에 영향을 끼칠 것이기 때문에
리소스 제한을 하여 배분합니다.
lscpu cpu정보를 확인합니다. - 4코어 |
lsmem 메모리 정보를 확인합니다. - 3기가 |
epel-release.noarch 외부패키지 다운가능
> stress,htop 설치
htop 리눅스 시스템 전체 리소스 사용량을 확인합니다. |
docker container stats 컨테이너 별로 리소스 사용량이 어떤지 확인합니다. |
메모리의 단위는 순서대로 B K M G 이며
기본적으로 메모리를 100m으로 설정한다면 스왑메모리= 메모리+여분메모리 는 2배입니다.
하지만 임의로 스왑메모리는 변경 가능합니다.
기본적으로 ubuntu에 stress를 설치해 만든 이미지 stress를 사용합니다.
메모리 100m + 스왑메모리는 100m 이지만 cpu에 90m의 부하를 줄 때
time docker run -m 100m --memory-swap 100m stress stress --vm 1 --vm-bytes 90m -t 5s
--vm은 프로세스 개수
--vm bytes는 부과할 용량입니다.
-t 부하 시간
100을 넘지 않았기 때문에 5초가 나옵니다.
100m 이지만 150m을 줄 때
time docker run -m 100m --memory-swap 100m stress stress --vm 1 --vm-bytes 150m -t 5s
100을 넘었기 때문에 서비스가 5초를 못넘기고 자동 중단됩니다.
기본값은 제한을 넘기면 서비스가 종료됩니다.
200m이지만 150m을 줄 때
time docker run -m 100m stress stress --vm 1 --vm-bytes 150m -t 5s
전체 리소스 200을 넘지 않았기 때문에 중단되지 않습니다.
--oom-kill-disable=true
부하되더라도 강제종료 해제
☞ cpu 리소스 제한
cpu번호로 cpu에 부하를 줄 수 있습니다.
docker run --cpuset-cpus (0~3) --name cpu1 -d stress stress --cpu 1
0~3번째 cpu에 cpu에 부하를줍니다
htop으로 100%를 확인합니다.
컨테이너 별로 cpu 가중치 다르게 할당
docker run -c 2048 --name cload1 -d stress
docker run -c 1024 --name cload2 -d stress
..
docker stats 로 확인
iops
읽기, 쓰기속도 상승
☞ 이미지 생성 방법
1. 작업하면서 추가한 레이어를 쌓은 상태로 이미지 생성이 가능합니다.
예를 들어 유저를 추가하고, 파일을 추가하엿을 때
docker container run -dit --name test centos docker exec -it centos /bin/bash useradd test1 touch file |
docker container commit -a "hong gil dong" -m "centos-img" test wonder/test:1.0
현재 컨테이너를 저자, 주석을 추가해 이미지로 만듭니다.
컨테이너를 삭제하고 다시 구동시켰을 때 생성한 파일이 유지되는 것을 확인할 수 있습니다.
diff를 이용해 원본과 비교합니다.
또한 inspect로도 레이어가 쌓여있는 것을 확인할 수 있습니다.
도커 로그
nginx 누가 80포트로 접속하였을 때 응답을 하면서 logs에 남습니다.
centos 쉘로 설정한 명령어들이 logs에 남습니다.
2. github에 있는 파일을 컨테이너에 설치하고 이미지를 생성이 가능합니다.
apt update > jdk 자바 개발 키트 > git 설치
3. tar 압축파일에서 바로 이미지 생성합니다.
cat testweb.tar | docker image import - wonder/testweb:1.0
컨테이너 백업
컨테이너 파일을 tar로 백업하기 위해 압축파일 tar로 만듭니다.
docker container export testweb > testweb1.tar
☞ Docker 파일을 이용한 이미지 생성
nginx 이미지의 설정파일만 바꿔서 이미지를 만들고 싶을 때
물론 nginx 를 컨테이너로 다운받아서 안에서 conf 설정 변경한 뒤
commit으로 이미지를 만들 수가 있지만 더 간단하게 하기 위해 Dockerfile 방법을 사용합니다.
docker container run -itd nginx cat /etc/~.conf > /test/.conf |
Dockerfile을 작성 FROM apache:4 COPY /test/file.conf /usr/lib/share ~ (이외에도 RUN, CMD가능) |
build -t sample:1.0 . 로 이미지를 생성하면서 리눅스에 있는 파일을 공유할 수 가 있습니다. |
압축 파일로 생성하는 방법도 있습니다.
tar czvf image.tar.gz dockerfile file1 dockerfile, file1 을 압축합니다. |
tar tvf image.tar.gz tar 내용물 확인 |
build -t sample:2.0 - < image.tar.gz tar.gz 압축된 것을 풀면서 이미지 생성이 가능합니다. |
'Security > 리눅스' 카테고리의 다른 글
정보보안 스터디 - 10주차 6일 - Docker-compose 컨테이너 관리 (0) | 2022.12.20 |
---|---|
정보보안 스터디 - 10주차 5일 - Docker 레지스트리 (0) | 2022.12.19 |
정보보안 스터디 - 10주차 1일 - Docker 네트워크 구성 (0) | 2022.12.16 |
정보보안 스터디 - 9주차 7일 - Docker 사용법 (0) | 2022.12.14 |
정보보안 스터디 - 9주차 5일 - 리눅스 디스크분할, 파일 공유 서버 (2) | 2022.12.12 |