실습환경 초기화 명령
docker container rm -f $(docker container ls -aq)
이미지 차지 디스크 용량 회수 명령
docker image rm -f $(docker image ls -f reference='diamol/*' -q)
- 도커 플랫폼은 SW 배포기능을 내장하고 있다.
- 로컬에 없더라도 도커 레지스트리에서 자동으로 내려받아 준다. -> 대부분 도커 허브라는 레지스트리에서 받아진다. (디폴트)
- 도커 이미지 구조
- (도메인)/(계정)/(image name):(tag)
docker.io/diamol/golang:latest
- 구조 설명
- docker.io : 이미지가 저장된 레지스트리 도메인(default는 도커 허브)
- diamol : 작성자의 계정 이름(개인 혹은 단체)
- golang : 이미지 리포지터리 이름(보통 어플리케이션 이름, 하나의 리포지터리는 여러 버전의 이미지를 담을 수 있다)
- latest : 이미지 태그(어플리케이션의 버전 혹은 변종, default는 latest) -> 따로 지정하지 않아도 도커가 정해진 기본값을 사용한다.
- 도커 레지스토리는 큰 기업의 경우 사내 내트워크나 전용 클라우드 환경에서 별도로 꾸미는 경우가 많다.
도커 허브에 빌드 이미지 푸시하기
#도커 아이디 환경변수 선언
export dockerId="도커 허브 계정"
#도커 로그인
user@DESKTOP-KU8L7UV:~$ sudo docker login --username $dockerId
[sudo] password for user:
Password:
Login Succeeded
#이미지 참조 구성
sudo docker image tag image-gllery $dockerId/image-gallery:v1
#참조 목록 확인(타겟 지정)
user@DESKTOP-KU8L7UV:~/080258/ch04/exercises/image-gallery$ sudo docker image ls --filter reference=image-gllery
--filter reference='*/image-gallery'
REPOSITORY TAG IMAGE ID CREATED SIZE
(dockerId)/image-gallery v1 28777ea04ecd 3 minutes ago 27.1MB
image-gllery latest 28777ea04ecd 3 minutes ago 27.1MB
#푸쉬하기
user@DESKTOP-KU8L7UV:~/080258/ch04/exercises/image-gallery$ sudo docker image push $dockerId/image-gallery:v1
The push refers to repository [docker.io/kidant/image-gallery]
46e7cbabc8ac: Pushed
9020e48cee8c: Pushed
3e13bec545cd: Pushed
2c797558a2a6: Pushed
f87269b94a71: Mounted from diamol/base
89ae5c4ee501: Mounted from diamol/base
v1: digest: sha256:d5e9f50449ff1624828d48c7d25d692d628ea8bc82c1467015a8b499c0fca4f6 size: 1573
개인 도커 레지스트리 운영하기
#도커 레지스트리 시행
user@DESKTOP-KU8L7UV:~/080258/ch04/exercises/image-gallery$ sudo docker container run -d -p 5000:5000 --restart
always diamol/registry
Unable to find image 'diamol/registry:latest' locally
latest: Pulling from diamol/registry
(중략)
Status: Downloaded newer image for diamol/registry:latest
8430757afa3968a52efedf95cfe92f13df9084fe28a6ec6009a22ab6a570bb55
#--restart 플래그를 부여하면 도커를 재시작했을때 -> 해당 컨테이너도 자동으로 재시작
echo $'\n127.0.0.1 registry.local' | sudo tee -a /etc/hosts
c/hosts
127.0.0.1 registry.local
#hosts
#연결확인
user@DESKTOP-KU8L7UV:~/080258/ch04/exercises/image-gallery$ ping registry.local
PING registry.local (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.044 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.027 ms
#새로만든 iregistry.loacl:5000 레지스토리 도메인 네임 추가해 image-gallery 이미지 참조 부여
user@DESKTOP-KU8L7UV:~/080258/ch04/exercises/image-gallery$ sudo docker image tag image-gllery registry.local:50
00/gallery/ui:v1
#같은 방법으로 api랑 log도 image-gllery 아래에 두기
user@DESKTOP-KU8L7UV:~/080258/ch04/exercises/image-gallery$ sudo docker image tag image-gllery registry.local:5000/gallery/api:v1
user@DESKTOP-KU8L7UV:~/080258/ch04/exercises/image-gallery$ sudo docker image tag image-gllery registry.local:5000/gallery/logs:v1
#푸쉬하기
docker image push registry.local:5000/gallery/ui:vi
- 태그를 효율적으로 이용하기 위해선 기본적으로 [major].[minor].[patch]형태의 소수점을 따르는게 좋다.
- patch: 버그수정 뿐이고 기능은 지난버전과 같을 때 변동
- minor: 추가된 기능은 있으되 기존 기능은 모두 유지 시 변동
- major: 완전히 다른 기능을 가졌을때 변동
- patch: 버그수정 뿐이고 기능은 지난버전과 같을 때 변동
- 도커 허브는 검증된 퍼블리셔(verified publisher)와 공식 이미지(official image)제도를 통해 레지스트리로 인한 피해를 방지한다.
- 검증된 퍼블리셔 예) MS, Oracle, IBM ...
- 공식이미지 예) 오픈소스 스프트웨어
- 골든 이미지(golden image): 공식 이미지를 기반 이미지로 삼아 인증서나 환경 설정 값 등 자신이 필요한 설정을 추가한 것
(도커 허브의 기업 리포지터리나 자체 리포지터리에서 관리된다.)
이미지 빌드
user@DESKTOP-KU8L7UV:~$ cd 080258/ch05/exercises/dotnet-sdk/
user@DESKTOP-KU8L7UV:~/080258/ch05/exercises/dotnet-sdk$ sudo docker image build -t golden/dotnetcore-sdk:3.0 .
[sudo] password for user:
[+] Building 50.7s (8/8) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
...(중략)
=> [2/3] WORKDIR src 0.4s
=> [3/3] COPY global.json . 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => naming to docker.io/golden/dotnetcore-sdk:3.0
user@DESKTOP-KU8L7UV:~$ cd 080258/ch05/exercises/aspnet-runtime/
user@DESKTOP-KU8L7UV:~/080258/ch05/exercises/aspnet-runtime$ sudo docker image build -t golden/aspnet-core:3.0 .
[sudo] password for user:
[+] Building 19.3s (5/5) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
...(중략)
=> => naming to docker.io/golden/aspnet-core:3.0
#골든이미지를 사용한 닷넷 코어 어플리케이션 멀티 스테이지 빌드 스크립트
cd 080258/ch05/exercises/dotnet-sdk/
vi Dockerfile
FROM mcr.microsoft.com/dotnet/core/sdk:3.0.100
LABEL framework="dotnet"
LABEL version="3.0"
LABEL description=".NET Core 3.0 SDK"
LABEL owner="golden-images@sixeyed.com"
WORKDIR src
COPY global.json .
- 일반적으로 여느 멀티 스테이지 빌드 스크립트와 같은 구조체
- 기반 이미지를 우리가 만들었다는 차이점이 있으며 이로 인해 업데이트 주기를 우리가 마음대로 선택가능하다.
- 지속적 통합 파이프리인으로 스크립트를 확인하는 방법으로 골든 이미지 사용하는 것도 좋은 방책
'공부 > docker' 카테고리의 다른 글
도커 교과서 ch07 (도커 컴포즈) (1) | 2023.12.22 |
---|---|
도커 교과서 ch06 (도커 볼륨) (1) | 2023.12.20 |
도커 교과서 ch04 (도커 이미지 2) (1) | 2023.12.18 |
도커 교과서 ch03 (도커 이미지 1) (1) | 2023.12.18 |
도커 교과서 ch01~02 (도커 설치 및 기본명령어) (0) | 2023.12.18 |