도커 이미지 파일 만들어보기
도커컴포즈 : 여러가지 파일을 모아놓은 것
minhee@DESKTOP-68EJ19D:/mnt/c/Users/Playdata$ sudo service docker status
[sudo] password for minhee:
* Docker is running
docker run -d -p 10000:3306 --name encoredb2 -e MYSQL_ROOT_PASSWORD=encore -v
~/data:/var/lib/mysql -v ~/backup:/root mysql:5.7
pem : key를 관리하는 파일 / 인증에 관련된 파일들
공개키, 기본키 : 서로 수학적으로 동일해야 인증이 가능함. -> 인증 방식 RSA
암호화방식 : 중간에 패킷을 가로채도 열지 못함.
인증키 만드는 방식
minhee@DESKTOP-68EJ19D:~/data$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/minhee/.ssh/id_rsa):
minhee@DESKTOP-68EJ19D:~/data$ cd ~/.
// . 숨김 폴더를 의미함.
내 키를 오른쪽으로 집에 넣음
minhee@DESKTOP-68EJ19D:~/.ssh$ cat id_rsa.pub > authorized_keys
나만 읽고 쓸 수 있도록 권한을 변경해줌. 600
minhee@DESKTOP-68EJ19D:~/.ssh$ chmod 600 authorized_keys
minhee@DESKTOP-68EJ19D:~/.ssh$ ll
total 20
drwx------ 2 minhee minhee 4096 Oct 5 09:34 ./
drwxr-x--- 6 minhee minhee 4096 Oct 5 09:30 ../
-rw------- 1 minhee minhee 576 Oct 5 09:34 authorized_keys
-rw------- 1 minhee minhee 2610 Oct 5 09:30 id_rsa
-rw-r--r-- 1 minhee minhee 576 Oct 5 09:30 id_rsa.pub
authorized_keys에 공개키를 넣게 되면 바로 접속이 가능해짐.
예 ) 클러스터를 만들게 되면 클러스터끼리 통신을 할때 파일을 주고 받을 때 서로 키를 공유 (인증을 공유) 그러면 authorized_keys에 공개키가 있는 계정은 인증 안거치고 파일 전송 가능
퍼블릭 키의 저장 위치
minhee@DESKTOP-68EJ19D:~/.ssh$ pwd
/home/minhee/.ssh
컨테이너 이름을 중복 허용을 하지 않음. 같은 이름으로 만들어지지 않음.
파일 검색
minhee@DESKTOP-68EJ19D:~/.ssh$ docker ps -a | grep volume_test
| : 실행한 결과를 오른쪽으로 보냄.
grep 이라는 프로그램이 이를 받아서 패턴으로 찾음. 정규식도 사용가능 (운영체제)
파일 개수 확인
정규식 표현
minhee@DESKTOP-68EJ19D:/etc$ ls -l | grep ^- | wc -l // 일반 파일 개수 조회
75
minhee@DESKTOP-68EJ19D:/etc$ ls -l | grep ^d | wc -l // 폴더 개수 조회
75
^ : 첫 글자
^- : 첫 글자가 - 인 것들 파일
^d : 첫 글자가 d인 것들 폴더 (디렉토리의 약자)
-l : 라인 개수
https://yurimkoo.github.io/analytics/2019/10/26/regular_expression.html
유림's Blog
베짱이가 되고 싶은 개미의 기술 블로그
yurimkoo.github.io
컨트롤, p , q : 컨테이너가 살아있는 상태로 잠시 밖으로 나감
EXIT : 컨테이터가 죽음
볼륨컨테이너 2
root@73029c18f10e:/# minhee@DESKTOP-68EJ19D:/etc$ docker run -it --name vol_from_cont2 \
> --volumes-from volume_overide ubuntu:14.04
명령어를 연결해줌-> \
하나의 명령어라는 의미
docker run -it --name vol_from_cont1 --volumes-from volume_overide
ubuntu:14.04
vol_from_cont1 : volumn_overide 를 바라봄
볼륨 컨테이너는 많이 사용
저장소를 따로 만듬. 저장소 역할만 함.
docker volume create --name myvolume
도커 볼륨 생성
minhee@DESKTOP-68EJ19D:/etc$ docker volume ls
DRIVER VOLUME NAME
local 98760ae510d32a6abcaf0c24fd169c316874cd6149250ca96a332c492c9c478f
local e1d6a2ee4499d14955eefa12cd32f4cd952a75c6c6d7c6251c4d42c08c1a8943
local myvolume
v옵션을 통해서 위에서 만든 볼륨을 공유할 예정
docker run -it --name myvolume_1 -v myvolume:/root ubuntu:14.04
볼륨 컨테이너 공유
minhee@DESKTOP-68EJ19D:/etc$ docker run -it --name myvolume_1 -v myvolume:/root ubuntu:14.04
다른 터미널 열어서 도커 실행 시키면 파일을 공유하고 있는 것을 볼 수 있음 / 두 컨테이너가 똑같은 내용을 바라보고 있음
minhee@DESKTOP-68EJ19D:/mnt/c/Users/Playdata$ docker run -it --name myvolume_2 -v myvolume:/root ubuntu:14.04
root@246ef90f0406:/# ls
예시 )
여러개의 서버를 사용할 때 볼륨에 소스코드를 올려놓고 이를 공유하면 모두 한번에 공유가 가능하다.
로드밸런싱 -> L4단계에서 동작
사용자의 양에 따라서 컨테이너를 올리고 내리고 조절하는 역할 (자원의 양에 따라서)-> 쿠버네티스가 함. (이를 오케스트레이션이라고 함)
예시 ) 구글 서비스 컨테이너 20억개 사용
운영체제 안에서 공간을 할당 받는 것
운영체제의 파일 시스템에 저장해서 사용하는 것 -> 따라서 성능 저하가 없음.
minhee@DESKTOP-68EJ19D:/etc$ sudo su
[sudo] password for minhee:
root@DESKTOP-68EJ19D:/etc# whoami
root
root@DESKTOP-68EJ19D:/etc# cd /var/lib/docker/volumes/myvolume/_data/
root@DESKTOP-68EJ19D:/var/lib/docker/volumes/myvolume/_data# ls
a.txt volume.txt
root@DESKTOP-68EJ19D:/var/lib/docker/volumes/myvolume/_data#
inspect : 상세보기
minhee@DESKTOP-68EJ19D:/etc$ docker inspect myvolume
[
{
"CreatedAt": "2023-10-05T10:26:42+09:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/myvolume/_data",
"Name": "myvolume",
"Options": null,
"Scope": "local"
}
]
도커파일
minhee@DESKTOP-68EJ19D:/mnt/c/Users/Playdata/Downloads/code_1/exam_1$ cat Dockerfile
FROM openjdk:8
LABEL description="Echo IP Java Application"
EXPOSE 60431
COPY ./target/app-in-host.jar /opt/app-in-image.jar
WORKDIR /opt
ENTRYPOINT [ "java", "-jar", "app-in-image.jar" ]
빌드를 진행할 폴더를 비우고(clean) jar (package)를 생성
./mvnw clean package
docker build -t basic-img .
docker images | grep basic // images 파일이 있는지 확인
i : 수정
esc 나옴
:wq 쓰고 나가기 / 저장
-t : 태그 , 이름
. 은 현재 파일에 도커 파일이 있으니 그걸 사용하여 만들어라
minhee@DESKTOP-68EJ19D:/mnt/c/Users/Playdata/Downloads/code_1/exam_1$
docker run -d -p 60000:80 --name basic-run --restart always basic-img
curl : cmd 에서 바로 내용을 볼 수 있는 명령어
minhee@DESKTOP-68EJ19D:/mnt/c/Users/Playdata/Downloads/code_1/exam_1$ curl localhost:60000
src: 172.18.0.1 / dest: localhost
sh 확장자 : 쉘 스크립트
#bash shell script
build-in-host.sh
target 파일 생김 -> 컨테이너 내부의 otp폴더로 복사
minhee@DESKTOP-68EJ19D:~/exam_2$ cat Dockerfile
FROM gcr.io/distroless/java:8 // 가벼운 이미지 파일
LABEL description="Echo IP Java Application"
EXPOSE 60432
COPY ./target/app-in-host.jar /opt/app-in-image.jar
WORKDIR /opt
ENTRYPOINT [ "java", "-jar", "app-in-image.jar" ]minhee@DESKTOP-68EJ19D:~/exam_2$
entrypoint -> 명령어 실행 부분
실행이 되면 서버가 구동이 되는 것
경량화된 이미지로 다운 받음. 용량이 훨씬 적음
minhee@DESKTOP-68EJ19D:~/exam_2$ cat build-in-host.sh
#!/usr/bin/env bash
yum -y install java-1.8.0-openjdk-devel
./mvnw clean package
docker build -t optimal-img .minhee@DESKTOP-68EJ19D:~/exam_2$ ll
total 60
drwx------ 5 minhee minhee 4096 Oct 5 12:12 ./
drwxr-x--- 10 minhee minhee 4096 Oct 5 12:04 ../
drwxr-xr-x 3 minhee minhee 4096 Oct 5 12:04 .mvn/
-rw-r--r-- 1 minhee minhee 202 Oct 5 12:02 Dockerfile
-rw-r--r-- 1 minhee minhee 91 Oct 5 12:02 Dockerfile:Zone.Identifier
-rw-r--r-- 1 minhee minhee 110 Oct 5 12:02 build-in-host.sh
-rw-r--r-- 1 minhee minhee 91 Oct 5 12:02 build-in-host.sh:Zone.Identifier-rwx------ 1 minhee minhee 10070 Oct 5 12:02 mvnw*
-rw-r--r-- 1 minhee minhee 91 Oct 5 12:02 mvnw:Zone.Identifier
-rw-r--r-- 1 minhee minhee 1751 Oct 5 12:02 pom.xml
-rw-r--r-- 1 minhee minhee 91 Oct 5 12:02 pom.xml:Zone.Identifier
drwxr-xr-x 3 minhee minhee 4096 Oct 5 12:04 src/
drwxr-xr-x 6 minhee minhee 4096 Oct 5 12:12 target/
minhee@DESKTOP-68EJ19D:~/exam_2$ cat Dockerfile
FROM gcr.io/distroless/java:8
LABEL description="Echo IP Java Application"
EXPOSE 60432
COPY ./target/app-in-host.jar /opt/app-in-image.jar
WORKDIR /opt
ENTRYPOINT [ "java", "-jar", "app-in-image.jar" ]minhee@DESKTOP-68EJ19D:~/exam_2$
minhee@DESKTOP-68EJ19D:~/exam_2$ docker images | grep optimal-img
optimal-img latest d1a0442415f9 3 minutes ago 148MB
minhee@DESKTOP-68EJ19D:~/exam_2$ docker images | grep basic-img
basic-img latest 31b8f597dffa 38 minutes ago 672MB
minhee@DESKTOP-68EJ19D:~/exam_2$
docker save -o myimage.tar optimal-img
minhee@DESKTOP-68EJ19D:~/exam_2$ ll
total 146444
drwx------ 5 minhee minhee 4096 Oct 5 12:17 ./
drwxr-x--- 10 minhee minhee 4096 Oct 5 12:04 ../
drwxr-xr-x 3 minhee minhee 4096 Oct 5 12:04 .mvn/
-rw-r--r-- 1 minhee minhee 202 Oct 5 12:02 Dockerfile
-rw-r--r-- 1 minhee minhee 91 Oct 5 12:02 Dockerfile:Zone.Identifier
-rw-r--r-- 1 minhee minhee 110 Oct 5 12:02 build-in-host.sh
-rw-r--r-- 1 minhee minhee 91 Oct 5 12:02 build-in-host.sh:Zone.Identifier
-rwx------ 1 minhee minhee 10070 Oct 5 12:02 mvnw*
-rw-r--r-- 1 minhee minhee 91 Oct 5 12:02 mvnw:Zone.Identifier
-rw------- 1 minhee minhee 149895168 Oct 5 12:17 myimage.tar
-rw-r--r-- 1 minhee minhee 1751 Oct 5 12:02 pom.xml
-rw-r--r-- 1 minhee minhee 91 Oct 5 12:02 pom.xml:Zone.Identifier
drwxr-xr-x 3 minhee minhee 4096 Oct 5 12:04 src/
파일이 생김.
복원
minhee@DESKTOP-68EJ19D:~/exam_2$ docker load -i myimage.tar
지웠던 것이 복원되어있음
minhee@DESKTOP-68EJ19D:~/exam_2$ docker rmi optimal-img
Untagged: optimal-img:latest
Deleted: sha256:d1a0442415f991ee2b3e1e0a23b6a0e0932eff7da54de7750a7858af945ec592
minhee@DESKTOP-68EJ19D:~/exam_2$ docker images | grep optimal-img
minhee@DESKTOP-68EJ19D:~/exam_2$ docker load -i myimage.tar
Loaded image: optimal-img:latest
minhee@DESKTOP-68EJ19D:~/exam_2$ docker images | grep optimal-img
optimal-img latest d1a0442415f9 12 minutes ago 148MB
C:\work_springboot\stock>cd target
C:\work_springboot\stock\target>dir
C 드라이브의 볼륨에는 이름이 없습니다.
볼륨 일련 번호: 622A-C008
C:\work_springboot\stock\target 디렉터리
2023-10-05 오후 03:53 <DIR> .
2023-10-05 오후 03:53 <DIR> ..
2023-10-05 오후 03:53 <DIR> classes
2023-10-05 오후 03:53 <DIR> generated-sources
2023-10-05 오후 03:53 <DIR> generated-test-sources
2023-10-05 오후 03:53 <DIR> maven-archiver
2023-10-05 오후 03:53 <DIR> maven-status
2023-10-05 오후 03:53 39,109,395 stock-0.0.1-SNAPSHOT.jar
2023-10-05 오후 03:53 15,472 stock-0.0.1-SNAPSHOT.jar.original
2023-10-05 오후 03:53 <DIR> surefire-reports
2023-10-05 오후 03:53 <DIR> test-classes
2개 파일 39,124,867 바이트
9개 디렉터리 143,632,416,768 바이트 남음
C:\work_springboot\stock\target>java -jar ./stock-0.0.1-SNAPSHOT.jar
'🚀 부트캠프 - PLAYDATA > 📒 수업 내용 정리' 카테고리의 다른 글
작은 쿠버네티스 경험하기 (0) | 2023.10.20 |
---|---|
[Springboot] RestTemplate / 서버간 통신 (0) | 2023.09.12 |
[Springboot]9/6 연관 관계 매핑 (0) | 2023.09.06 |
[SpringBoot] Entity 와 Repository 설계 / Repository 메서드 설계 규칙 (0) | 2023.09.01 |
[Springboot] IntelliJ 프로젝트 생성 / pom.xml 문서 구성 (0) | 2023.08.31 |