Docker #3 레지스트리 접속, 이미지 관리

Docker #3 #

#2025-08-04


1. 레지스트리에 접속하고 이미지를 pull/push하기 #

# Docker 로그인
$ docker login https://{실습링크}.com
# ID: *
# Password: *
$ Login Succeeded

# 이미지 Pull (이미지 내려받기): 예를 들어 container-linux:1.1 이미지를 다운로드
$ docker pull {실습링크}.com/{실습id}/container-linux:1.1
# 이미지 Push (Image Push 정보 사용): Push 권한은 일반 계정이 아니라 로봇 계정(CI/CD 용)을 사용합니다.

# 로봇 계정 로그인
$ docker login https://{실습링크}.com
# ID: robot$skala25a
# Password: 1qB9cyusbNComZPHAdjNIFWinf52xaBJ

# 태깅 (Tag local image)
$ docker tag container-linux:1.1 {실습링크}.com/{실습id}/container-linux:1.1

# Push
$ docker push {실습링크}.com/{실습id}/container-linux:1.1

#

2. Docker Hub에서 우분투 이미지 받아보기 #

$ sudo docker pull ubuntu
Password:
Using default tag: latest
2025/08/04 11:36:28 must use ASL logging (which requires CGO) if running as root
latest: Pulling from library/ubuntu
e3bd89a9dac5: Already exists 
Digest: sha256:a08e551cb33850e4740772b38217fc1796a66da2506d312abe51acda354ff061
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

$ sudo docker run -it --name hello ubuntu /bin/bash

root@b42933e7fe33:/# ls
bin  boot  dev  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

# cd, ls 명령으로 컨테이너 내부를 둘러본 뒤 exit를 입력하여 Bash 셸에서 빠져 나오기
root@b42933e7fe33:/# exit
exit

$ sudo docker ps -a
Password:
CONTAINER ID   IMAGE                                                                                                       COMMAND                  CREATED         STATUS                      PORTS                                                                                                                                                      NAMES
b42933e7fe33   ubuntu                                                                                                      "/bin/bash"              5 minutes ago   Exited (0) 44 seconds ago                                                                                                                                                              hello
60fb3d8fbf89   amdp-registry.{실습링크2}.arm64   "/bin/bash -c 'ls -l…"   2 hours ago     Up 2 hours                  0.0.0.0:2222->2222/tcp, 0.0.0.0:5173->5173/tcp, 0.0.0.0:5500->5500/tcp, 0.0.0.0:8080-8081->8080-8081/tcp, 0.0.0.0:8443->8443/tcp, 0.0.0.0:9931->9931/tcp   local-rde
de61e13a85e8   container-linux:1.1                                                                                         "python /mycode/webs…"   2 days ago      Exited (255) 41 hours ago   0.0.0.0:8888->8080/tcp                                                                                                                                     my-first-container
883d6de5ea2c   mariadb:latest                                                                                              "docker-entrypoint.s…"   2 days ago      Exited (255) 2 days ago     0.0.0.0:3306->3306/tcp  
# >> Exited (0) 44 seconds ago인상태.

# 정지한 컨테이너 다시 시작하기
$ sudo docker start hello

#

3. Dockerfile : 명령어 CMD 실습 #

# docker file 빌드
sudo docker build -t my-image .

# 출력 This is the default command
sudo docker run my-image

# 출력 Override CMD
sudo docker run my-image "Override CMD"
#>> Error

sudo docker run my-image sh -c "echo Override CMD"

#

4. 의문점 정리 #

#1 CMD?

Dockerfile에서 CMD는 도커 컨테이너가 실행될 때 자동으로 수행할 기본 명령어를 지정하는 역할인데 예를 들어 CMD echo "This is the default command"는 사용자가 docker run 명령을 통해 별도의 명령을 전달하지 않았을 때 이 기본 명령이 실행된다. 그래서 sudo docker build -t my-image .로 이미지를 만들고, sudo docker run my-image라고 실행하면 This is the default command라는 메시지가 출력됨.

#

#2 Override? (docker run 명령에 인자를 추가로 넘기면?)

docker run 뒤에 인자를 직접 주면 예를 들어 sudo docker run my-image echo "Overridden command" 이렇게 실행하면 CMD ["echo", "This is the default command"]를 쓰지 않고, echo "Overridden command"를 실행한다.

결론적으로 이렇다:

  1. sudo docker run my-image -> CMD가 그대로 실행됨 (echo "This is the default command")

  2. sudo docker run my-image echo "Hello" -> CMD는 무시되고 사용자가 입력한 echo "Hello"만 실행됨

#

#3 CMD 작성 형식?

sudo docker run my-image "Override CMD"처럼 인자를 넘기면 원래 CMD의 echo 명령은 유지되고 "Override CMD"라는 문자열이 인자로 전달되어 echo "Override CMD"가 실행될 것 같지만 Docker가 전달한 문자열을 실행 가능한 명령어로 인식하지 못하기 때문에 오류가난다.

이문장은 sudo docker run my-image sh -c "echo Override CMD"처럼 sh -c를 통해 쉘 명령어로 감싸주면 "Override CMD"가 정상적으로 출력된다.

결론적으로 이렇다:

  1. CMD ["echo", "Hello"] 이렇게 (명령어와 인자를 분리해서) 써주거나
  2. sudo docker run my-image sh -c "echo Hello" /bin/sh -c로 감싸서 실행되거나.

#