hyperskill - Docker build and docker tag
이번 주제에서는, 도커 컨테이너의 기초를 배우는 첫 번째 단계를 밣을 겁니다.
당신은 간단한 Dockerfile(도커파일)을 생성 할 것이며,
이를 통해 어떻게 이미지들을 빌드하는지 이해할 겁니다.
그 이후에 당신이 배울 것은,
이러한 이미지들을 찾는 것과 그들의 속성들을 탐색하는 것입니다.
마지막에는, 이미지의 이름이 무엇인지 이해하며,
어떻게 설정하고 업데이트하는지 이해하게 될 겁니다.
Creating a simple Dockerfile - 간단한 도커파일 생성하기
컨테이너를 실행하기 위해서는 이미지가 필요합니다.
비슷하게, 만약 당신이 커스텀된 컨테이너를 실행하고 싶다면, 이미지를 생성해야 합니다.
이미지 컨텐츠를 설명하는 평범한 형식은 도커파일(Dockerfile)을 생성하는 겁니다.
Dockerfile을 생성하기 위해서,
어떠한 에디터든 열고, 파일을 생성하세요.
그리고 밑의 코드 스니펫들로 명령어들을 채우세요.
그리고 Dockerfile
이라는 이름으로 파일을 저장하세요.
이 도커파일을 사용함으로서, 당신은 간단한 Ubuntu 22.04 이미지를 생성하게 됩니다.
FROM ubuntu:22.04
LABEL author=HyperUser
ENTRYPOINT ["/bin/bash"]
첫 번째 줄은 꽤 직관적입니다.
당신은 이미지를 빌드 할 때 사용하기 원하는 우분투 버전을 지정합니다.
그 다음 두 줄은 잠깐 보기에는 명확하지는 않을 겁니다.
하지만 어려워 하지 마세요.
이후에, 당신은 그들의 목적이 무엇인지 알아낼 겁니다.
이 주제에서, 당신은 첫 번째 이미지를 빌드하고 실행하여 컨테이너를 가질 수 있습니다 :
---
title : 도커파일 - 이미지 - 컨테이너
---
flowchart LR
Dockerfile -- 빌드 build --> Image -- 실행 run --> Container
Building an image - 이미지 빌드하기
이제 당신은 Dockerfile(도커파일)을 가졌으므로,
당신이 할 것은 이 파일을 실행하고 필요한 이미지를 얻는 겁니다.
당신은 이 임무를 docker build
명령어를 통해 달성할 수 있습니다.
하지만, 서로 다른 상황들에 대해 각자의 플래그와 옵션을 가지고 있습니다.
지금으로선, docker build .
를 사용하여 간단한 이미지를 빌드 해 봅시다.
이는 최소한의 기능적 명령어입니다.
여기에서 .
은 빌드 컨텍스트를 가르키는데,
PATH
혹은 URL
에 지정되어 있는 파일의 그룹이나 폴더를 의미하며,
이는 Docker engine 으로 활성화가 가능합니다.
이 경우, 도커는 Dockerfile이 현재 작업 디렉토리에 있다라고 이해합니다.
하지만, 또 다른 경로를 지정할 수도 있으며, 이러한 스크립트를 사용하면 됩니다 :
$ docker build -f /path/to/my/Dockerfile .
만약 이것이 특정 이미지를 빌드하는 첫 번째 시간이라면,
빌드 과정은 필요한 컴포넌트들을 다운로드 하는 것으로 시작합니다.
만약 당신이 이미 기본 이미지를 가지고 있다면,
도커는 다운로드 하지 않고 해당 기본 이미지를 사용 할 겁니다.
이미지가 성공적으로 빌드되었을 때, 당신은 이러한 출력물을 볼 수 있습니다 :
만약 우분투 이미지를 가지고 있지 않은 경우 :
Sending build context to Docker daemon 12.8kB
Step 1/3 : FROM ubuntu:22.04
22.04: Pulling from library/ubuntu
5887826a0d8b: Pull complete
Digest: sha256:898852f07de8ff57e7810a5c28553e71f10db60ae79c2b7a06acc45bbb03741a
Status: Downloaded newer image for ubuntu:22.04
---> 2793294e6a90
Step 2/3 : LABEL author=HyperUser
Removing intermediate container 68bafd1194fb
---> 4f0e66ff57d5
Step 3/3 : ENTRYPOINT ["/bin/bash"]
Removing intermediate container 9baebdc3a08a
---> 97ac6dc27e4f
Successfully built 97ac6dc27e4f
보다시피, 빌드 과정은 세 가지 단계 를 포함하는데,
이는 Dockerfile 의 각각 세 가지 줄에 반응하는 겁니다.
그리고 마지막 줄은 Successfully built 97ac6dc27e4f
라고 보여줍니다.
마지막 줄의 최종 문자열은 image ID(이미지 ID) 의 결과물을 가르킵니다.
Exploring the image - 이미지 탐색하기
도커는 당신이 빌드한 이미지들을 나열하는 기능을 제공합니다.
만약 당신이 docker images
명령어를 실행한다면,
밑에 보여진 것과 비슷한 결과물을 볼 수 있습니다 :
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 97ac6dc27e4f 28 seconds ago 70.2MB
ubuntu 22.04 63f3a805b672 6 days ago 126MB
이 명령어는 당신의 이미지들을 나열하지만, 오로지 첫 번째 줄에 빌드된 하나의 이미지를 보여줍니다.
당신이 어떠한 것도 가지지 않기 때문입니다.
<none>
은 Dockerfile 로 빌드한 이미지 : 이름을 정해주지 않음.ubuntu
는 Dockerfile 로 가져온 이미지
이 결과물에서, <none>
을 보여주는 두 개의 컬럼이 있습니다.
이는 당신이 이미지를 빌드 할 때 name(이름) 을 말해주지 않았기 때문입니다.
이미지의 이름은 스스로의 repository(레포지토리) 와 tag(태그) 로 구성되어 있습니다.
당신은 오로지 하나의 이미지만을 생성하였는데,
왜 결과물로 두 개의 이미지가 있는지 스스로 물어볼 수도 있습니다.
여기 두 번째 줄은 공식 우분투 이미지를 보여주고 있으며,
이는 우리의 이미지를 사용하는 데 사용되고 있음을 보여주고 있습니다.
이제, 다음 섹션으로 넘어가서, 이미지 이름을 지정하는 법을 배워 봅시다.
Specifying image name - 이미지 이름 지정하기
당신이 이미지 이름 설정을 배우기 전에, 두 가지 주요 컴포넌트를 살펴 봅시다 :
- repository : 당신의 이미지에 대한 서로 다른 버전들을 저장한 장소
- tag : 당신의 Docker image ID 에 대한 별칭
이는 당신의 도커 이미지의 버전을 지정하는 데 사용됩니다.
이미지 이름은 username 과 hostname 을 포함할 수 있습니다.
이들은 Docker Hub 에서 작업하거나, 네트워크를 작업 할 때 중요합니다.
당신은 이에 대한 더 많은 것을 공식 문서 에서 읽을 수 있습니다.
지금으로선, 이러한 속성들에 대해서 집중하지 않을 겁니다.
이미지 이름을 설정하기 위해 당신은 -t
플래그를 사용하여,
repository 와 tag 이름을 결합할 수 있습니다. : [repository]:[tag]
형식
만약 당신이 레포 이름을 ubuntu
로 하고, 태그는 v1
으로 설정하고 싶다면,
명령어는 이와 같습니다 :
$ docker build -t ubuntu:v1 .
이를 적용하고 docker images
명령어로 결과를 확인 합시다.
당신이 이미지 이름을 설정한 이후에 docker images
는,
더 이상 첫 번째 이미지 id 였던 97ac6dc27e4f
로 보여지지 않습니다.
당신이 이름을 할당했던 아님에도 불구하고 모든 이미지를 출력하기 위해서,
docker images -a
명령어를 사용하세요.
나중에 당신은 이 -a
옵션에 대한 목적을 상세히 이해하게 될 겁니다.
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 22.04 d50d2365accc 4 seconds ago 127MB
ubuntu v1 c47d2c2e680e 3 minutes ago 127MB
만약에 당신이 tag 이름을 지정하지 않았다면, lastest
가 자동으로 설정된다는 것을 참고하세요.
이를 테스트해보기 위해서, docker build -t ubuntu .
을 실행해 보세요.
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 7009d4503cec 16 seconds ago 128MB
ubuntu 22.04 d50d2365accc 4 seconds ago 127MB
ubuntu v1 c47d2c2e680e 3 minutes ago 127MB
사실, 당신은 한번에 하나 이상의 태그를 설정 할 수 있습니다.
예를 들어, docker build -t ubuntu:v1 -t ubuntu:latest .
명령어는,
같은 이미지의 두 개 인스턴스를 빌드 할 겁니다. : v1
, 그리고 latest
또한 당신은 이미 존재하는 이미지의 이름을 변경 할 수 있습니다.
이전에 당신은 태그 이름 없이 이미지를 빌드했었습니다.
우리의 이전 이미지 이름을 ubuntu:v0
으로 이름을 변경함으로서 이슈를 고쳐 봅시다.
docker images -a
출력으로 나온 <none>
되어 있는 이미지 ID 를 복사하세요.
docker image tag <id> ubuntu:v0
명령을 실행하고, 결과를 확인하세요.
이 경우, 명령은 docker image tag 97ac6dc27e4f ubuntu:v0
이 됩니다.
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 7009d4503cec 16 seconds ago 128MB
ubuntu 22.04 d50d2365accc 4 seconds ago 127MB
ubuntu v1 c47d2c2e680e 3 minutes ago 127MB
ubuntu v0 7009d4503cec 2 minutes ago 128MB
축하합니다! 당신은 낡은 이미지의 이름을 재설정했습니다.
만약에 당신이 이미지들의 ID 를 가까이 살펴본다면,
두 개의 이미지가 동일하지만, 서로 다른 태그를 가지고 있는 것을 볼 수 있습니다.
Conclusion - 결론
이제 당신은 Dockerfile 을 생성하는 법을 알고 있습니다.
이 주제를 통해서, 당신은 docker build
명령어를 사용하여 각각의 도커파일로부터 이미지를 빌드할 수 있습니다.
또한 도커는 당신이 빌드한 이미지를 나열 할 수 있게 해 줍니다.
이는 docker images
명령어를 사용하여 할 수 있습니다.
이 정보를 사용하여, 당신은 빌드한 이미지를 찾고 식별할 수 있습니다.
docker images
명령어는 이미 존재하는 이미지의 이름 또한 변경할 수 있게 해 줍니다.
docker image tag <image-ID> <new-repository>:<new-tag>
명령어로 가능합니다.
위의 정보는 그저 도커 이미지를 작업하기 위한 소개였습니다.
도커는 이미지를 운용하기 위한 훨씬 더 많은 명령어들을 가지고 있습니다.
이 시점에서, 당신은 컨테이너를 구동하기까지 단 하나의 단계만 떨어져 있습니다.
이 임무를 수행하기 위해서, 당신은 서로 다른 모드로 docker run
명령어를 사용 할 수 있습니다.
하지만, 미래를 위해 이는 아껴 두겠습니다.
words to remember
intuitive : 직관적, 직각인, 직각적인, 직관인
bare minimum yet : 아직은 최소한
'Hyperskill - 컴퓨터 CS 및 영어 독해 > Introduction to Docker' 카테고리의 다른 글
Dockerfile (FROM, LABEL, CMD, ENTRYPOINT) (0) | 2024.09.05 |
---|---|
Basic operations with a container - 도커 컨테이너 기초 명령어 (0) | 2024.08.30 |
Run the "hello-world" docker container - hello-world 이미지로 도커 컨테이너 실행하기 (3) | 2024.08.28 |
Introduction to docker and installation (0) | 2024.08.27 |
Containers - 컨테이너 기초 의미 (0) | 2024.08.23 |