Docker Hub는 Docker 이미지의 중앙 저장소로, 다양한 소프트웨어의 미리 빌드된 이미지를 제공합니다.
개발자는 필요한 이미지를 검색하고 docker pull 명령어로 로컬 환경에 다운로드하여 사용할 수 있습니다. 이를 통해 개발 및 배포 시간을 줄이고, 신뢰성 있는 이미지를 기반으로 환경을 구성할 수 있습니다.
# docker pull 이미지명
# 최신 nginx 이미지 다운로드 (latest는 기본값)
$ docker pull nginx # docker pull nginx:latest와 동일하게 작동 / tag를 적지 않으면 기본값은 latest


이미지의 특정 버전을 나타내는 이름을 태그명이라고 합니다. 태그명은 도커 허브에서 확인할 수 있습니다.
Docker 이미지는 태그(tag)를 통해 버전이나 상태를 구분합니다.
태그는 이미지의 버전이나 특정 상태를 나타내며, 이를 통해 사용자는 어떤 버전의 이미지를 다운로드할지 선택할 수 있습니다.

도커 특정 버전 이미지를 다운로드하는 명령어는 다음과 같습니다.
# docker pull 이미지명:태그
# nginx의 stable-alpine3.20-perl 버전 다운로드
$ docker pull nginx:stable-alpine3.20-perl\

# 이미지 목록 확인
$ docker image ls
이 명령어는 현재 로컬에 다운로드된 모든 도커 이미지를 목록으로 보여줍니다. 이미지 이름, 태그, 이미지 ID, 생성 날짜, 이미지 크기 등을 확인할 수 있습니다.


$ docker image rm [이미지 ID 또는 이미지명]
rm 은 remove의 약자이며, 해당 이미지를 삭제하는 역할을 합니다.$ docker image rm -f [이미지 ID 또는 이미지명]
-f 는 force의 약자로, 강제로 이미지를 삭제합니다.# 컨테이너에서 사용하고 있지 않은 모든 이미지 삭제
$ docker image rm $(docker images -q)
docker images -q 는 이미지 ID 목록을 반환하며, 이를 docker image rm에 전달하여 이미지들을 한 번에 삭제합니다.# 컨테이너에서 사용하고 있는 이미지를 포함해서 전체 삭제
$ docker image rm -f $(docker images -q)
# docker create 이미지명[:태그명]
$ docker create nginx
docker create 명령어는 자주 사용되지 않습니다.# 모든 컨테이너 조회
$ docker ps -a
$ docker start [컨테이너 이름 또는 ID]
# 실행 중인 컨테이너 조회
$ docker ps
# 포그라운드 실행 (터미널 점유)
$ docker run nginx
# 백그라운드 실행 (-d 옵션 사용)
$ docker run -d nginx
docker run 명령어는 컨테이너를 생성함과 동시에 실행합니다.# docker run 이미지명[:태그명]
$ docker run nginx # 포그라운드에서 실행 (추가적인 명령어 조작을 할 수 없음)
# Ctrl + C로 종료할 수 있음

# docker run -d --name [컨테이너이름] [이미지명]
$ docker run -d --name webserver nginx
--name 옵션으로 컨테이너에 이름을 지정할 수 있습니다.컨테이너를 생성할 때, 이름을 지정하면 나중에 컨테이너를 관리할 때 더 쉽게 식별하고 조작할 수 있습니다. 이름을 지정하지 않으면 도커는 임의의 이름을 부여하는데, 이름을 직접 지정하면 컨테이너를 더 쉽게 다룰 수 있습니다.
컨테이너에 이름을 부여하면 나중에 컨테이너 ID 대신 이름을 사용해 컨테이너를 중단하거나 삭제할 수 있습니다.
$ docker run -d --name [컨테이너 이름] [이미지명[:태그명]]
-d : 백그라운드에서 실행--name : 컨테이너에 원하는 이름을 부여
# 호스트의 4000번 포트를 컨테이너의 80번 포트에 연결
$ docker run -d -p 4000:80 nginx
http://호스트_IP:4000으로 컨테이너의 웹 서버에 접근할 수 있습니다.
$ docker ps -a
-a 옵션을 사용하면 모든 컨테이너(실행 중인 컨테이너 + 중지된 컨테이너)를 조회할 수 있습니다.-a는 all의 약자입니다.
$ docker ps
docker ps 명령어는 현재 실행 중인 컨테이너 목록을 보여줍니다.ps는 process status의 약자입니다.
$ docker stop [컨테이너명 또는 컨테이너 ID]
docker stop 명령어는 컨테이너를 정상적으로 중지합니다. 이는 시스템 종료와 비슷한 개념으로, 컨테이너 내 프로세스가 안전하게 중지됩니다.
$ docker kill [컨테이너명 또는 컨테이너 ID]
docker kill 명령어는 컨테이너를 즉시 강제 중지시킵니다. 이는 컴퓨터의 전원 버튼을 눌러 갑작스럽게 종료하는 것과 유사합니다.stop은 컨테이너 내의 프로세스를 정상적으로 종료시키는 반면, kill은 프로세스를 즉시 중단시킵니다.
도커에서는 여러 컨테이너를 한 번에 중지할 수 있습니다.
컨테이너를 중지할 때는 컨테이너의 ID 또는 이름을 사용하며, ID의 일부만 입력해도 고유하게 식별되는 경우 해당 컨테이너가 중지됩니다. 이를 통해 여러 컨테이너를 한 번에 쉽게 중지할 수 있습니다.
$ docker stop [컨테이너명 또는 컨테이너 ID] [컨테이너명 또는 컨테이너 ID] [컨테이너명 또는 컨테이너 ID] ...

$ docker rm [컨테이너명 또는 컨테이너 ID]

$ docker rm -f [컨테이너명 또는 컨테이너 ID]
-f 옵션은 강제 삭제를 의미하며, 실행 중인 컨테이너도 이 명령어를 통해 바로 삭제할 수 있습니다.
$ docker rm $(docker ps -qa)
docker ps -qa는 모든 컨테이너 ID를 가져오는 명령어이며, 이를 docker rm에 전달하여 모든 컨테이너를 삭제할 수 있습니다.q: quiet의 약자로, 컨테이너의 ID만 출력하도록 하는 옵션입니다. 이 옵션을 사용하면 각 컨테이너의 자세한 정보 대신 컨테이너 ID만 리스트로 반환됩니다.a: all의 약자로, 모든 컨테이너(실행 중인 컨테이너와 중지된 컨테이너 모두)를 포함해서 출력하는 옵션입니다.
$ docker rm -f $(docker ps -qa)

컨테이너를 실행한 후, 정상적으로 실행되고 있는지, 또는 에러가 발생했는지 확인하기 위해 로그를 조회하는 것은 매우 중요합니다. 특히, 디버깅 시 로그는 필수적으로 확인해야 할 요소입니다.
$ docker logs [컨테이너 ID 또는 컨테이너명]

$ docker logs --tail [로그 끝부터 표시할 줄 수] [컨테이너 ID 또는 컨테이너명]
--tail 옵션을 사용하면 최근에 생성된 로그 중 지정한 줄 수만큼 조회할 수 있습니다.$ docker logs --tail 10 [컨테이너 ID 또는 컨테이너명]

$ docker logs -f [컨테이너 ID 또는 컨테이너명]
-f는 follow의 약자입니다. 이 옵션은 실시간으로 로그를 모니터링할 수 있게 해줍니다.


$ docker logs --tail 0 -f [컨테이너 ID 또는 컨테이너명]

exec -it)컨테이너는 쉽게 말해 호스트 컴퓨터 내의 작은 컴퓨터와 같습니다. 즉, 여러 개의 컨테이너는 각기 독립적인 컴퓨터처럼 자신만의 운영체제(OS), 저장 공간, 프로그램을 가지고 실행됩니다. 도커 컨테이너는 이런 식으로 호스트 시스템과 격리된 상태에서 동작합니다.
도커 컨테이너가 실행 중일 때, 해당 컨테이너 내부로 들어가 명령어를 실행하거나 파일을 확인하고 싶을 수 있습니다. 이때 사용하는 명령어가 docker exec -it입니다.
$ docker exec -it [컨테이너명 또는 컨테이너 ID] bash
$ docker run -d nginx # Nginx 컨테이너 실행
$ docker exec -it [Nginx 컨테이너 ID] bash # Nginx 컨테이너 내부로 접속
$ ls # 컨테이너 내부의 파일 목록 확인
$ cd /etc/nginx # Nginx 설정 파일이 위치한 디렉토리로 이동
$ cat nginx.conf # Nginx 설정 파일 내용 확인
bash: Bourne Again Shell의 약자로, 리눅스 시스템에서 많이 사용되는 쉘(Shell)입니다. 이 명령어를 통해 컨테이너 내부의 명령어를 입력할 수 있는 환경으로 진입하게 됩니다.
-it:
-i: interactive 모드로, 터미널이 명령어 입력을 받아들이는 상호작용 모드를 활성화합니다.-t: pseudo-TTY를 활성화해, 터미널 환경을 제공합니다. 즉, 화면 상에서 명령어를 지속적으로 입력하고 결과를 확인할 수 있게 합니다.❗️
-it옵션을 사용하지 않으면, 단 한 번의 명령어만 실행되고 즉시 컨테이너와의 연결이 끊깁니다. 따라서 지속적으로 명령어를 입력하고 실행 결과를 확인하려면-it옵션을 반드시 사용해야 합니다.

Ctrl + D 또는 exit 명령어를 입력하여 컨테이너에서 빠져나올 수 있습니다.
포그라운드는 프로그램이 화면에서 직접 실행되고 출력되는 상태를 의미합니다. 예를 들어, docker run 명령어로 컨테이너를 실행하면, 그 실행 과정과 로그가 터미널에 실시간으로 출력됩니다.
포그라운드 상태에서는 해당 프로그램에 터미널이 완전히 점유되어, 다른 명령어나 작업을 동시에 할 수 없습니다.
컨테이너 실행 중에는 터미널에서 추가 조작이 불가능하며, 컨테이너를 종료하려면 Ctrl + C로 직접 중단해야 합니다.
$ docker run nginx
Ctrl + c로 컨테이너를 중단할 수 있습니다.백그라운드는 프로그램이 컴퓨터 내부적으로 실행되는 상태로, 실행 중인 프로그램의 세부 내용을 터미널에서 바로 확인할 수 없습니다.
백그라운드 실행의 장점은 터미널을 점유하지 않으므로, 다른 명령어를 입력하거나 프로그램을 추가로 실행할 수 있다는 것입니다.
도커에서 컨테이너를 백그라운드로 실행하려면 -d(detach) 옵션을 사용합니다.
$ docker run -d nginx
