Docker Container Service를 활용하기 위한 Docker 명령어(CLI)에 데하여 알아보겠습니다.
모든 Docker 명령은 키워드로 docker를 앞에 사용하고 기본적인 명령어 사용법은 help 명령을 통해 확인하거나 docker에서 제공하는 문서를 참고합니다.
docker COMMAND -help
Docker image 명령어
도커 image는 docker의 핵심기술이며 코드로 개발된 컨테이너 내부 환경 정보(Binary, Library, 각종 Tool등)을 고스란히 복제해서 사용할 수 있습니다.
Docker Container로 사용할 Docker image는 docker search를 통해 조회하면 Docker Hub 및 개인 사용자들이 공개한 관련 이미지를 살펴볼 수 있습니다. Local Server 및 Desktop에 Docker image를 저장하기 위해서는 Dockerfile을 통해 새로운 image를 생성(Docker Build)하거나 Docker Hub로 부터 이미지를 내려받는 Docker pull 방법이 있습니다.
Dockefile로 생성된 image는 Docker Hub에 Login을 통한 자격 증명후 업로드 (Docker push)하고 공개 및 비공개로 설정할 수 있습니다. 또는 Github를 통해 Dockerfile 코드를 공유하여 관리하는 방법도 있습니다. 이렇게 만들어진 이미지를 실행(Docker run)하면 우리가 서비스하려고 하는 App Container가 됩니다.
Docker Image 내려받기
도커 허브 레지스트로부터 도커 이미지를 내려받거나 레지스트리에 업로드하는 과정을 수행하기 위해 다음 명령을 사용합니다.
- docker pull: 도커 허브 레지스트리에서 로컬로 도커 이미지 내려받기
- docker push: 로컬에 있는 도커 이미지를 도커 허브 레지스트리에 업로드하기
- docker login: 업로드를 하기 전 도커 허브 계정으로 로그인 수행하기
- docker logout: 도커 허브에서 로그아웃하기
도커 이미지 다운로드는 기본적으로 도커 허브 레지스트리로 자동 지정되고 특정 레지스트리를 수동으로 지정해서 받는 방법도 있습니다. 이미지 다운로드를 위해 docker pull 명령을 이용하고 옵션 및 태그 등을 지정하여 세부 사항을 지정할 수 있습니다.
docker [image] pull [OPTIONS] name[:TAG | @IMAGE_DIGEST]
배포된 리눅스 이미지인 debain 다운로드를 통해 자세히 알아보겠습니다.
toby@tobykakao:~$ docker pull debian
Using default tag: latest
latest: Pulling from library/debian
c1e0ef7b956a: Pull complete
Digest: sha256:e11072c1614c08bf88b543fcfe09d75a0426d90896408e926454e88078274fcb
Status: Downloaded newer image for debian:latest
docker.io/library/debian:latest
다운로드한 이미지 조회
toby@tobykakao:~$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
debian latest d36fff645336 10 days ago 139MB
nginx latest 048e09038596 3 weeks ago 197MB
busybox latest 63cd0d5fb10d 4 weeks ago 4.04MB
이제 주의해야 할점에 데하여 설명을 해보면
- 이미지명 뒤에 : 태그를 포함하지 않으면 자동으로 최신 버전(latest)으로 지정되므로 기본 태그값이 latest라고 출력됩니다.
- 만약 특정 버전을 지정하게 되면 latest 대신 지정한 버전명이 포함됩니다.
- 라이브러리 library는 도커 허브가 이미지를 저장하고 있는 네임스페이스로 제공됩니다.
$ docker pull debian:10.3
10.3: Pulling from library/debian
...
도커 이미지명의 기본 형식은 <네임스페이스>/<이미지명>:<태그>이고, 별도로 특정 레지스트리를 지정하지 않으면 자동으로 도커 허브의 라이브러리가 네임스페이스로 지정됩니다.
- 도커 허브에서 제공된 이미지의 분산 해시(distribution hash) 표시는, 다운로드한 이미지는 여러 계층(layer)으로 만들어지는데 각 이미지의 핵심 정보를 바이너리 형태의 정보로 제공하는 것입니다.
- 다이제스트값은 원격 도커 레지스트리(도커 허브)에서 관리하는 이미지의 고유 식별값을 뜻하고, 이 값을 포함한 조회는 docker images --digests 옵션을 사용합니다.
- 다운로드한 이미지 정보가 로컬에 저장되었음을 나타내는 상태 표시.debian:latest와 동일한 값으로 docker.io는 도커 허브의 이미지 저장소 주소를 나타냅니다. 다른 도커 상세 정보를 제공하는 docker info 명령어의 출력 정보 중 Registry: <https://index.docker.io/v1/와> 동일하다.
이렇게 다운로드한 이미지 정보는 docker image ls(또는 docker images)를 통해 조회됩니다. docker pull 명령어는 다음과 같습니다.
docker pull 명령 옵션 표
옵션형 (단축형) | 설명 |
--all-tags, -a | 저장소에 태그로 지정된 여러 이미지를 모두 다운로드함. (다운로드 중 작업 중지를 할 경우 (Ctrl + C) 수행) |
--disable-content-trust | 이미지 검증(verification) 작업 건너뛰기(기본값, true). DCT(Docker Contents Trust)를 이용한 이미지 신뢰성 검증. 작업을 DOCKER_CONTENT_TRUST=1로 활성화(비활성화, 0). |
--platform | 플랫폼 지정. 윈도우 도커에서 리눅스 이미지를 받아야 하는 경우 사용(예: --platform=linux). |
--quiet, -q | 이미지 다운로드 과정에서 화면에 나타나는 상세 출력 숨김. |
아래의 내용은 이미지를 다운로드 하는 방법입니다.
- 명시적으로 최신 버전 지정
$ docker pull debian:latest
- 이미지 식별 정보인 다이제스트 지정.
$ docker pull debian:sha256:2857989334428416...94cc940198258
- 도커 허브 레지스트리 명시적 지정.
$ docker pull library/debian:latest
$ docker pull docker.io/library/debian:latest
$ docker pull index.docker.io/library/debian:latest
- 외부 레지스트리 주소를 이용하는 방법(예를 구글에서 제공하는 샘플 애플리케이션 이미지 지정).
- 주의 해야할 점은 웹 주고 URL에서 도메인 주소의 시작인 http://를 붙이지 말고 이미지 주소를 써야 한다는 점입니다.
$ docker pull gcr.io/google-samples/hello-app:1.0
도커 이미지 세부 정보 조회
도커 오브젝트(이미지, 컨테이너 등)에 대한 세부 정보 조회를 위해 docker image inspect, docker image history, 물리적으로 호스트 운영체제에 저장된 영역을 이용합니다. 먼저, docker inspect에 대해 알아보겠습니다.
docker image inspect [OPTIONS] IMAGE [IMAGE...]
이 명령의 출력 결과는 JSON 언어 형대로 출력되는 정보가 많기 때문에 포맷 옵션을 이용하여 원하는 정보만 출력할 수 있습니다.
docker image inspect 명령 옵션
옵션명(단축형 | 설명 |
--format, -f | JSON 형식의 정보 중 지정한 형식의 정보만 출력할 수 있고, {} 중괄호 형식과 대소문자에 유의해야 한다. |
출력되는 세부 내용 중 몇 가지 주요 정보는 다음과 같습니다.
- image ID: "Id"
- 생성일: "Created"
- Docker 버전: "DockerVersion"
- CPU 아키텍처: "Architecture"
- 이미지 다이제스트 정보: "RootFS"
- 이미지 레이어 저장 정보: "GraphDriver"
테스트를 위해서 아파치 웹 서비스를 할 수 있는 httpd Docker image를 다운로드 해보겠습니다.
toby@tobykakao:~$ docker search httpd
NAME DESCRIPTION STARS OFFICIAL
httpd The Apache HTTP Server Project 4804 [OK]
manageiq/httpd Container with httpd, built on CentOS for Ma\\u2026 1
paketobuildpacks/httpd 0
vulhub/httpd 0
jitesoft/httpd Apache httpd on Alpine linux. 0
openquantumsafe/httpd Demo of post-quantum cryptography in Apache \\u2026 14
openeuler/httpd 0
betterweb/httpd 0
dockerpinata/httpd 1
centos/httpd 36
e2eteam/httpd 0
manasip/httpd 0
futdryt/httpd 0
amd64/httpd The Apache HTTP Server Project 1
ppc64le/httpd The Apache HTTP Server Project 0
9af925e7043/httpd 0
arm64v8/httpd The Apache HTTP Server Project 11
arm32v7/httpd The Apache HTTP Server Project 11
s390x/httpd The Apache HTTP Server Project 1
i386/httpd The Apache HTTP Server Project 1
tugboatqa/httpd The Apache HTTP Server Project 0
signiant/httpd httpd (apache2) base container with a custom\\u2026 0
armhf/httpd The Apache HTTP Server Project 8
inventis/httpd apache container with support for https only 0
vzwingmadomatic/httpd Service frontal de l'application de domotique 0
httpd 최신 버전으로 다운로드.
toby@tobykakao:~$ docker pull httpd:latest
latest: Pulling from library/httpd
83d624c4be2d: Pull complete
95a204763e1f: Pull complete
4f4fb700ef54: Pull complete
04c249b7ebc4: Pull complete
5b5ffa066706: Pull complete
37e153d74605: Pull complete
Digest: sha256:bbea29057f25d9543e6a96a8e3cc7c7c937206d20eab2323f478fdb2469d536d
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest
다운로드한 이미지 조회
toby@tobykakao:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
debian latest d36fff645336 10 days ago 139MB
nginx latest 048e09038596 3 weeks ago 197MB
busybox latest 63cd0d5fb10d 4 weeks ago 4.04MB
httpd latest 721aa0022a96 3 months ago 178MB
다운로드한 이미지 세부 정보 조회.
toby@tobykakao:~$ docker image inspect httpd
[
{
"Id": "sha256:721aa0022a9698cc8600be694b337c307fc98bc12f12097d3c6d1e156930b562",
"RepoTags": [
"httpd:latest"
],
"RepoDigests": [
"httpd@sha256:bbea29057f25d9543e6a96a8e3cc7c7c937206d20eab2323f478fdb2469d536d"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2024-07-17T23:31:14Z",
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"80/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/apache2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"HTTPD_PREFIX=/usr/local/apache2",
"HTTPD_VERSION=2.4.62",
"HTTPD_SHA256=674188e7bf44ced82da8db522da946849e22080d73d16c93f7f4df89e25729ec",
"HTTPD_PATCHES="
],
"Cmd": [
"httpd-foreground"
],
"ArgsEscaped": true,
"Image": "",
"Volumes": null,
"WorkingDir": "/usr/local/apache2",
"Entrypoint": null,
"OnBuild": null,
"Labels": null,
"StopSignal": "SIGWINCH"
},
"Architecture": "arm64",
"Variant": "v8",
"Os": "linux",
"Size": 177748902,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/eb1dd9507f942c5b461b56d0a79321531f299e3faef19292bda6b3e0d9793b19/diff:/var/lib/docker/overlay2/5dfa4fc40a4a6634f7d6635484dcd3805c51a9bbee667c8962e621cb983b707a/diff:/var/lib/docker/overlay2/6ce73c693d5b5ba083dc04f1847dce95578ea472256a150d480bd9b380057cd4/diff:/var/lib/docker/overlay2/004d11ac644c41faeaf168ee87a993ddab9aa7700ff7d863f2f9bdac0a7d99d8/diff:/var/lib/docker/overlay2/97a782e56c7d43650f0e2e36bd1fab4f03d94b014925dec200a615a69633e785/diff",
"MergedDir": "/var/lib/docker/overlay2/d0655e9b879e789e92437302b4f1d9ff1f3edeb6cd10cb12a0fbe4ff419b319b/merged",
"UpperDir": "/var/lib/docker/overlay2/d0655e9b879e789e92437302b4f1d9ff1f3edeb6cd10cb12a0fbe4ff419b319b/diff",
"WorkDir": "/var/lib/docker/overlay2/d0655e9b879e789e92437302b4f1d9ff1f3edeb6cd10cb12a0fbe4ff419b319b/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:f0f039847c0897e41273775d599cc761049c809342ff8362efb4caf561186ada",
"sha256:622b52428873166b166ae6f2602c48f0fbc837001839da8918a11c9a45d2a724",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"sha256:02895f09033b3f95dfa40b904e3cea74e287913e3c1965a61b68419a0cc0e6e3",
"sha256:dd7b9677cc6d24784b5c1580c853e4097acd0d55f6f8d9e37394a825e9d24498",
"sha256:c3e85bca3483fd93393ce8443fa38967ef5de8ace5e82c5e651660290291f098"
]
},
"Metadata": {
"LastTagTime": "0001-01-01T00:00:00Z"
}
}
]
계층 형식으로 되어 있어 하위 정보 조회시, .상위[.하위] 방식으로 조회
toby@tobykakao:~$ docker image inspect --format="{{ .RepoTags }}" httpd
[httpd:latest]
toby@tobykakao:~$ docker image inspect --format="{{ .Os }}" httpd
linux
toby@tobykakao:~$ docker image inspect --format="{{ .Created }}" httpd
2024-07-17T23:31:14Z
toby@tobykakao:~$ docker image inspect --format="{{ .Config.Env }}" httpd
[PATH=/usr/local/apache2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HTTPD_PREFIX=/usr/local/apache2 HTTPD_VERSION=2.4.62 HTTPD_SHA256=674188e7bf44ced82da8db522da946849e22080d73d16c93f7f4df89e25729ec HTTPD_PATCHES=]
toby@tobykakao:~$ docker image inspect --format="{{ .RootFS.Layers }}" httpd
[sha256:f0f039847c0897e41273775d599cc761049c809342ff8362efb4caf561186ada sha256:622b52428873166b166ae6f2602c48f0fbc837001839da8918a11c9a45d2a724 sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef sha256:02895f09033b3f95dfa40b904e3cea74e287913e3c1965a61b68419a0cc0e6e3 sha256:dd7b9677cc6d24784b5c1580c853e4097acd0d55f6f8d9e37394a825e9d24498 sha256:c3e85bca3483fd93393ce8443fa38967ef5de8ace5e82c5e651660290291f098]
toby@tobykakao:~$
Docker Image History 조회
다음은 docker image history를 이용하여 조회해보겠습니다.
docker image history [OPTIONS] IMAGE
이 명령어를 통해 현재 이미지 구성을 위해 사용된 레이블 정보와 각 레이어의 수행명령, 크기등을 조회할 수 있습니다.
이미지를 구성하고 있는 레이어의 실행 정보와 관련된 내용입니다.
toby@tobykakao:~$ docker image history httpd
IMAGE CREATED CREATED BY SIZE COMMENT
721aa0022a96 3 months ago CMD ["httpd-foreground"] 0B buildkit.dockerfile.v0
<missing> 3 months ago EXPOSE map[80/tcp:{}] 0B buildkit.dockerfile.v0
<missing> 3 months ago COPY httpd-foreground /usr/local/bin/ # buil\\u2026 138B buildkit.dockerfile.v0
<missing> 3 months ago STOPSIGNAL SIGWINCH 0B buildkit.dockerfile.v0
<missing> 3 months ago RUN /bin/sh -c set -eux; savedAptMark="$(a\\u2026 69.2MB buildkit.dockerfile.v0
<missing> 3 months ago ENV HTTPD_PATCHES= 0B buildkit.dockerfile.v0
<missing> 3 months ago ENV HTTPD_SHA256=674188e7bf44ced82da8db522da\\u2026 0B buildkit.dockerfile.v0
<missing> 3 months ago ENV HTTPD_VERSION=2.4.62 0B buildkit.dockerfile.v0
<missing> 3 months ago RUN /bin/sh -c set -eux; apt-get update; a\\u2026 11.4MB buildkit.dockerfile.v0
<missing> 3 months ago WORKDIR /usr/local/apache2 0B buildkit.dockerfile.v0
<missing> 3 months ago RUN /bin/sh -c mkdir -p "$HTTPD_PREFIX" && \\u2026 0B buildkit.dockerfile.v0
<missing> 3 months ago ENV PATH=/usr/local/apache2/bin:/usr/local/s\\u2026 0B buildkit.dockerfile.v0
<missing> 3 months ago ENV HTTPD_PREFIX=/usr/local/apache2 0B buildkit.dockerfile.v0
<missing> 3 months ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 3 months ago /bin/sh -c #(nop) ADD file:702193928cded0bce\\u2026 97.1MB
출력 결과 중 CREATED BY 열을 보면 특정 이미지를 구성하기 위해 사용된 명령과 환경 설정 정보 등을 볼 수 있습니다. 정보 중 용량을 가지고 있는 라인이 세 번째로 소개할 레이어입니다. CMD, EXPOSE, ENV, WORKDIR 등의 명령을 통해 베이스 이미지에 필요한 설정 정보를 결합하여 새로운 이미지를 만들게 됩니다. 이러한 메타 데이터에 관련된 명령은 Dockerfile을 통해 배우게 됩니다.
세 번째로 다운로드한 이미지가 호스트 운영체제에 어떤 형태로 저장되어 있는지 살펴보기 위해 이미지가 다운로드되는 과정을 알아보겠습니다. 처음 다운로드한 데비안 리눅스와 달리 아파치 웹 서버 이미지인 httpd는 다운로드한 레이어 수가 더 많은 것을 볼 수 있습니다.
54fec2fa59d0: Pull complete ...... 웹 애플리케이션 소스
8219e18ac492: Pull complete ...... 아파치 httpd 서버
3aeb1816f5e1: Pull complete ...... 레이어3
a5aa59adb85e: Pull complete ...... 레이어4
4f6febfae8db: Pull complete ...... 레이어5 (이미지 내의 운영체제, 데비안)
참고로, 출력된 다이제스트값은 도커 허브에서 관리하는 다이제스트값이 아닌 로컬에 다운로드될 때 생기는 레이어들의 디스트리뷰션 아이디(distribution ID)입니다.
54fec2fa59d0, 8219e18ac492, 3aeb1816f5e1, a5aa59adb85e, 4f6febfae8db
이 이미지 정보는 다음 경로에서 살펴볼 수 있습니다.
root@docker-host:/var/lib/docker/image/overlay2/distribution/diffid-by-digest/sha256# ls
...
2fdf5ac7b6874ed7eaa96ed74593627b81390bbd7990a2a469093853ff1b5374
a50b5ac4a7fb2ab0d00cc3f2d3c1063d9f7751e32fe038b7ad7545bb239027167
3aeb1816f5e1ebc28f7044e1431eb6516bca574739cbf4025816c01a150e4b78
a5aa59adb85e8f77a232f42938287b07f2bb3487a55bc4cabce5b53cdc674f44
4f6febfae8db62875b2841597fb8c07e6da508b9aee3c11ab999a3a44bf4f52b
54fec2fa59d0a0de9cd2dec9850b36c43de451f1fd0ca05bf8f1cf26a61a5da4
...
간단히 표현하면 다음과 같은 구조입니다.
- 도커 이미지 구조의 기본 운영체제 레이어들을 쌓는다.
- 운영체제 베이스 이미지 위에 아파치 웹 서버를 설치한 레이어를 올린다.
- 아파치 웹 서비스에 필요한 리소스 정보 및 환경 정보가 포함된 레이어를 올린다. 이렇게 구성된 이미지는 불변(immutable)의 읽기 전용 레이어들의 집합 구조인 유니언 파일 시스템(union filesystem)이다.
- 도커 이미지를 실행하면 여러 개의 컨테이너를 구동할 수 있다. 각각의 컨테이너에서 발생한 모든 변경 정보를 저장하기 위해 읽고-쓰기 레이어를 두고 저장하게 된다.
이미지 레이어는 불변이지만, 관리자가 권한으로 호스트 운영체제에서 각 레이어에 접근하게 되면 파일 생성 및 변경이 가능합니다.
왜 이런 구조를 사용하는 것일까?
도커 이미지는 수백 MB의 용량을 가지고 있지만, 여러 개의 컨테이너를 구동할 때마다 이미지를 새로 다운로드하지 않고 로컬에 저장된 이미지를 계속 사용할 수 있습니다. 또한, 이미지 레이어의 상단에 있는 앱 소스 레이어의 환경 설정 및 리소스 설정이 변경되어 이미지로 변경되더라도 기존 레이어를 제외한 변경된 앱 소스 레이어만 내려받아 사용하기 때문에 효율적입니다.
도커의 저장소 확인 방법
- 도커 저장소에 사용되는 스토리지 드라이버 확인:
$ docker info | grep Storage
Storage Driver: overlay2
- 도커의 모든 데이터 및 로그 경로 확인 (관리자 권한 필요):
toby@tobykakao:~$ sudo su -
root@tobykakao:~# cd /var/lib/docker
root@tobykakao:/var/lib/docker# ls
buildkit containers engine-id image network overlay2 plugins runtimes swarm tmp volumes
- 이미지 레이어 데이터 경로 확인:
# cd image/overlay2/layerdb/sha256/
# ls
출력된 데이터 이름은 다이제스트 값이다. 이는 httpd 이미지의 레이어와 동일하다.
레이어의 상세 확인 및 비교
- 도커 명령으로 특정 정보 필터링:
toby@tobykakao:~$ docker image inspect --format="{{ .RootFS.Layers }}" httpd
[sha256:f0f039847c0897e41273775d599cc761049c809342ff8362efb4caf561186ada sha256:622b52428873166b166ae6f2602c48f0fbc837001839da8918a11c9a45d2a724 sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef sha256:02895f09033b3f95dfa40b904e3cea74e287913e3c1965a61b68419a0cc0e6e3 sha256:dd7b9677cc6d24784b5c1580c853e4097acd0d55f6f8d9e37394a825e9d24498 sha256:c3e85bca3483fd93393ce8443fa38967ef5de8ace5e82c5e651660290291f098]
- 실제 파일 저장 경로 확인:
# cd /var/lib/docker/overlay2
레이어의 효율적 사용 이유
- 이미지를 다운로드하면 여러 컨테이너에서 계속 재사용이 가능합니다.
- 수정된 레이어만 추가 다운로드하므로 기존 레이어를 계속 사용하여 저장 공간이 절약됩니다.
도커는 이러한 특징을 통해 이미지의 가상화와 효율적인 파일 시스템 관리가 가능합니다.
다른 터미널을 이용하여 컨테이너 실행
httpd 이미지를 사용하여 webserver라는 이름의 컨테이너를 실행하고, bash 명령으로 내부 셸에 접속해 보겠습니다.
toby@tobykakao:~$ docker run -it -p 80:80 --name=webserver httpd:latest /bin/bash
- 컨테이너 내부:
toby@tobykakao:~$ docker run -it -p 80:80 --name=webserver httpd:latest /bin/bash
root@da6c698a2077:/usr/local/apache2# cd /
root@da6c698a2077:/# ls
bin dev home media opt root sbin sys usr
boot etc lib mnt proc run srv tmp var
root@da6c698a2077:/#
호스트에서 임시 파일 생성 및 확인
다른 터미널에서 관리자 권한으로 임시 파일 생성:
toby@tobykakao-host:/var/lib/docker/overlay2/7c035467b164248bc7f33be59a4d528fc69fe67d0ac740423d2bd7d34abc83db/diff# touch Hello-docker
toby@tobykakao-host:/var/lib/docker/overlay2/7c035467b164248bc7f33be59a4d528fc69fe67d0ac740423d2bd7d34abc83db/diff# ls
Hello Hello-docker bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
컨테이너에서 파일 생성 확인
컨테이너 셸로 돌아가 파일 생성 확인:
toby@tobykakao:/# ls
Hello Hello-docker bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
이 예제는 도커 컨테이너와 이미지 레이어의 관계를 보여줍니다. 여러 레이어로 구성된 이미지는 여러 개의 컨테이너에서 독립적으로 읽기-쓰기가 가능하며, 상위 레이어가 추가되더라도 하위 레이어의 데이터는 변경되지 않으면서 동작하는 것이 도커 컨테이너의 가상화의 핵심 특징입니다.
ps. Docker Login 하는 내용이 담긴 다음글로 돌아오겠습니다.
'☁️ Cloud' 카테고리의 다른 글
[Docker] Docker Container 명령어 (with Ngnix Container 실행) (0) | 2024.11.05 |
---|---|
[Docker] Docker 명령어 활용 Part.2 (0) | 2024.10.31 |
[Cloud] Docker Installation Check (도커 설치 확인) (0) | 2024.10.11 |
[Cloud] Ubuntu에 Docker Community Edition (CE) 설치 (0) | 2024.10.08 |
[Cloud] Docker Install (도커 설치 with UTM, Ubuntu install) (0) | 2024.10.07 |