-
GitHub 나 Bigbucket과 같은 소스관리 툴과 연계하여 코드를 빌드하는 기능이나 실행 가능한 애플리케이션의 이미지를 관리하는 Docker의 공식 리포지토리 서비스
docker search <image_name>
원하는 이미지를 검색
OFFICIAL
공식 이미지
AUTOMATED
특정 유저가 만든 이미지
-
레지스트리 서버의 IP 주소 또는 도메인 이름 (default
dockerhub)
저장소(registry)
하나 이상의 컨테이너 이미지를 저장하는 장소. official한 repository이름은 library
이미지(image)
컨테이너의 기본이 되는 이미지
태그(tag)
이미지의 버전을 기록. 생략하면 도커 엔진은 이미지의 태그를 latest
로 인식.
-
도커 이미지는 기본적으로 공식적인 Docker hub 등 Docker Registry로부터 Docker 이미지를 다운로드 한다.
docker pull <image_name>
-
이미지 확인
docker images
# no-trunc: 결과 필드 정보를 자르지 않고 모두 출력
docker images --no-trunc
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest sha256:d2c94e258dcb3c5ac2798d32e1249e42ef01cba4841c2234249495f87264ac5a 8 months ago 13.3kB
# --quite, -q 이미지 ID만 출력
docker images -q
d2c94e258dcb
# 이미지 확인
[root@hwi ~]# docker image inspect nginx
[
{
"Id": "sha256:0e901e68141fd02f237cf63eb842529f8a9500636a9419e3cf4fb986b8fe3d5d",
"RepoTags": [
"nginx:latest"
],
"RepoDigests": [
....
-
기존의 imgae id 가 바뀜
docker (container) commit
# --author, -a 작성자 설정 / --message, -m 메시지 지정
# docker commit -m "message" [containerFrom] [REPO/IMG:TAG]
# 커밋으로 이미지 생성
docker commit -a "dazzi" -m "modify: index.html" myweb01 dazzi/myweb:1.0
> sha256:2fd80466d9e4dfc576a2478bfc17af4fed41461c1353da1921c109abaf27dc95
# 생성한 이미지 확인
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dazzi/myweb 1.0 2fd80466d9e4 19 seconds ago 168MB
export
import
-
인터넷이 되지 않는 폐쇄망에서 이미지를 전달하기 위해서는, USB로 압축파일로 전달
# 파일 시스템 형태로 아카이브
docker export [Container name] > [tarName.tar] # container -> tar
cat [tarName.tar] | docker image import - [REPO/IMG:TAG] # tar -> image
# 이미지 레이어 형태로 아카이브
docker image save -o [tarName.tar] # image -> tar
docker image load -i save.tar # tar -> image
-
Dockerfile 은 Docker 에서 인프라 구성을 기술한 파일
FROM 운영체제 이미지
RUN 실행할 명렁어
CMD 컨테이너 명령 실행
명령 | 설명 |
---|---|
FROM | 베이스 이미지 지정 |
RUN | 명령 실행 |
CMD | 컨테이너 명령 실행 |
LABEL | 라벨 설정 |
EXPOSE | 포트 노출 |
ENV | 환경 변수 |
ADD | 파일/디렉토리 추가 |
COPY | 파일 복사 |
ENTRYPOINT | 컨테이너 실행 명령 |
VOLUME | 볼륨 마운트 |
USER | 사용자 지정 |
WORKDIR | 작업 디렉토리 |
ARG | Dockerfile 안의 변수 |
ONBUILD | 빌드 완료 후 실행되는 명령 |
STOPSIGNAL | 종료 시그널 설정 |
HEALTHCHECK | 컨테이너의 상태 체크 |
SHELL | 기본 쉘 설정 |
[ec2-user@hwi dockerfile_dir]$ cat -n Dockerfile.1
1 # 1. 베이스 이미지로부터 시작
2 FROM ubuntu
3
4 # 2. 패키지 업데이트 및 Nginx 설치
5 RUN apt-get update && apt-get install -y -q nginx
6
7 # 3. 호스트의 index.html 파일을 컨테이너 내의 /var/www/html/ 경로로 복사
8 COPY index.html /var/www/html/
9
10 # 4. 컨테이너가 시작될 때 실행할 기본 명령어 설정
11 CMD ["nginx", "-g", "daemon off;"]
dockerfile을 이해하기 위해선 Image Layer
을 이해해야 한다.
컨테이너
는 HostOS에 컨테이너를 만들고 어플리케이션을 작동시키기 위해 필요한 라이브러리나 어플리케이션 등을 하나로 모아서 별도의 서버
처럼 만들 수 있게 한 것이다.
이미지 전송시간을 줄이기 위해 Read-only image layer
를 공유한다.
컨테이너도 레이어를 쌓아서 만든다고 생각하면 된다.
현재 OS
로 사용하는 base image는 read-only
이다.
여기에 파일을 추가한다면 그 위에 레이어가 쌓인다.
upper layer를 하게 되면 Read, Write이고 그 이후 image2 는 전체가 read-only
가 된다.
이렇게 명령어가 하나씩 실행될 때마다
add files로 upper layer(프로그램 설치)가 반복된다.
그렇게 image3가 만들어지면 전체가 다시 read-only
가 된다.
𝙌. 명령어가 많아진다면?
메모리가 많아진다!
방법
이미지 내부 임시 파일 삭제하기
출처: https://tech.cloudmt.co.kr/2022/06/29/도커와-컨테이너의-이해-3-3-docker-image-dockerfile-docker-compose/