"15단계로 배우는 도커와 쿠버네티스"를 참조하여 작성하였습니다.
< Docker 살펴보기 >
- 컨테이너 파기 - docker container prune [옵션]
$ docker container prune
- 실행 중이 아닌 컨테이너들도 저장공간 차지
- 컨테이너에서 변경된 파일 확인 - docker container diff <컨테이너명>
$ docker container diff hello-bash
수정이나 다른 작업을 했으면
이미지 만들어진 시점부터 바뀐 것을 확인할 수 있다.
- 컨테이너/이미지의 세부 정보 확인하기 - docker container instpect <컨테이너명>
- docker image inspect <이미지명>
$ docker container inspect hello-bash
- 이미지 파기 - docker image prune
$ docker image prune
- 컨테이너의 변경사항을 이미지로 생성 - docker container commit <옵션> <컨테이너명 > 이미지
명>:<태그>
$ docker container commit -a "hodoo" -m "apt update & apt install nim" ubuntu-bash ubuntu:vim
- -a : Author
- -m : Commit 메세지
- 이미지 히스토리 살펴보기 - docker image history <이미지명>:<태그>
$ docker image history ubuntu:vim
-위쪽 내용이 최신 변경 내역
-이미지는 layer로 이루어져 있음(Image !=Layer)
- 이미지 빌드시 특정 파일 무시하기
$ cat .dockerignore
- 특정 파일이나 디렉토리를 빌드할 이미지에서 제외하고 싶을 경우 .dockerignore 파일 활용 ( .gitignore와 비슷)
< 컨테이너 개발 >
이미지 빌드의 개요
- 베이스 이미지 선택(리포지토리에서 )
-Docker Hub 참조 (사용해서 커스터마이징 해서 이미지를 만들 수 있다.)
(alpine,busybox는 최소한의 명령어를 가지고 있음->전체적인 이미지를 경량화할 수 있다. 그래서 현업에서 많이 사용한다.)
- 소프트웨어 패키지 설치
- 애플리케이션 실행에 필요한 소프트웨어 패키지 설치
- 패키지 매니저 활용
- apt(ubuntu) ,yum(CentOS)
- pip(python), npm(Node.js)
- 애플리케이션 소스 코드
- Github이나 로컬에 있는 소스코드를 이미지에 복사
- Dockerfile 작성
- Dockerfile에 설정된 대로 이미지를 생성하게 됨
1) 베이스 이미지의 리포지토리
2) 설치할 패키지
3) 애플리케이션 코드와 설정 파일
4) 컨테이너 기동 시
- 빌드 실행 순서
1) 디렉토리를 준비하여 이미지에 포함시킬 파일을 모음
2) Dockerfile을 작성
3) 컨테이너에서 실행할 애플리케이션 코드를 작성하고 유닛 테스트를 실행
4) 이미지를 빌드
5) 컨테이너를 실행하고 동작을 확인
이미지 빌드 및 컨테이너 실행 실습
- 샘플 코드 참조
$ git clone https://github.com/Jpub/15_DandK
$ cd 15_DandK/step03
- message 파일에 있는 문자열을 아스키 아트로 출력
1) 디렉토리를 준비하여 이미지에 포함시킬 파일을 모음
#디렉토리 준비
$ mkdir example
$ cd example
#필요한 파일 준비
$ echo “Hello World” > message
$ cat message
Hello World
2) Dockerfile 작성
FROM alpine:latest
RUN apk update && apk add figlet
ADD ./message /message
CMD cat /message |figlet
- alpine은 경량 이미지
- RUN 명령어 : 빌드하는 과정에서 실행되는 명령어 리스트 ->빌드 할때
- ADD: 경로상에서 /message파일을 호스트 파일을 나의 경로로 넣어준다
- CMD : message를 실행시켜 출력한것을 figlet에 전달한다는 의미 , 이미지로 부터 컨테이너가 실행을 할 때 실행되는 명령어 ->컨테이너가 실행할 때
3) 애플리케이션 준비
-여기서는 figlet이라는 애플리케이션을 활용
4) 이미지 빌드
$ docker image build --tag hello:1.0 .
docker image build <옵션> <Dockerfile 경로>
-Dockerfile이 저장된 example 이렉토리에서 명령 실행
- --tag 옵션으로 이미지 이름과 태그를 설정할 수 있음
5) 컨테이너를 실행하고 동작을 확인
$ docker container run --name hello con hello:1.0
<컨테이너와 네트워크>
- 컨테이너 네트워크의 종류
- 기본 Bridge 네트워크
- 컨테이너 실행 시 기본으로 연결되는 네트워크
- 각 컨테이너에 할당된 IP 주소를 활용해서 서로 접근 가능 But! IP 주소는 바뀔수있기 때문에 IP주소로 접근하는 것은 좋지 않다.
- 사용자 정의 Bridge 네트워크->더 추천
- 사용자가 새롭게 생성하는 Bridge 네트워크
- IP주소 또는 컨테이너 이름을 가지고 서로 접근 가능(컨테이너가 멈추더라도 접근 가능)
-->다른 네트워크에서는 접근 할 수 없다.
- 컨테이너 네트워크 커맨드
컨테이너 네트워크 커맨드 | 설명 |
docker network ls | 컨테이너 네트워크를 리스트로 표시 |
docker network inpect | 네트워크명을 지정해서 자세한 내용을 표시 |
docker network create | 컨테이너 네트워크를 생성 |
docker network rm | 컨테이너 네트워크를 삭제 |
docker network connect | 컨테이너를 컨테이너 네트워크에 접속 |
docker network disconnect | 컨테이너를 컨에티어 네트워크에서 분리 |
직접 실행한 ssh화면
'Programmer > Cloud' 카테고리의 다른 글
[Docker] 6.컨테이너 오케스트레이션과 쿠버네티스 (0) | 2021.08.24 |
---|---|
[Docker] 5 컨테이너 API (0) | 2021.08.13 |
[Docker] 3 도커 환경 구축 & 명령어 (0) | 2021.08.12 |
[Docker] 2 도커란? (0) | 2021.08.12 |
[Docker] 1-2 클라우드와 컨테이너 (0) | 2021.08.12 |