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"를 실행한다.
결론적으로 이렇다:
sudo docker run my-image-> CMD가 그대로 실행됨 (echo "This is the default command")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"가 정상적으로 출력된다.
결론적으로 이렇다:
CMD ["echo", "Hello"]이렇게 (명령어와 인자를 분리해서) 써주거나sudo docker run my-image sh -c "echo Hello"/bin/sh -c로 감싸서 실행되거나.