Docker 사용법

문승기·2025년 4월 18일
0

※ Docker

- 도커에서 이미지 및 컨테이너 실습 (Basic)

1. 도커 환경 확인

먼저 도커가 제대로 설치되어 있는지 확인합니다. docker --version 명령어를 통해 도커 버전을 확인하고, wsl -l -v 명령어를 사용해 WSL(Windows Subsystem for Linux)에서 활성화된 리눅스 배포판을 확인할 수 있습니다.

PS C:\Users\Playdata> docker --version
Docker version 27.4.0, build bde2b89
  • docker --version: 현재 시스템에 설치된 도커의 버전 정보를 출력합니다. 도커가 정상적으로 설치되어 있는지 확인하는데 사용됩니다.
PS C:\Users\Playdata> wsl -l -v
  NAME              STATE           VERSION
* Ubuntu            Running         2
  docker-desktop    Running         2
  • wsl -l -v: WSL(Windows Subsystem for Linux)에 설치된 리눅스 배포판을 확인합니다. 이 명령어는 리눅스 배포판이 정상적으로 활성화되어 있는지 확인하는 데 사용됩니다.

2. 우분투 이미지 검색 및 다운로드

도커에서 우분투 이미지를 검색하고 다운로드하는 과정입니다.

PS C:\Users\Playdata> docker search ubuntu
NAME                             DESCRIPTION                                      STARS     OFFICIAL
ubuntu                           Ubuntu is a Debian-based Linux operating sys…   17538     [OK]
  • docker search ubuntu: 도커에서 ubuntu라는 이름으로 이미지를 검색합니다. 검색 결과에서 OFFICIAL은 공식 이미지를 의미합니다. STARS는 이미지에 대한 사용자 평점을 나타냅니다.

이미지를 다운로드하려면 docker pull 명령어를 사용합니다.

PS C:\Users\Playdata> docker pull ubuntu:latest
latest: Pulling from library/ubuntu
2726e237d1a3: Pull complete
Digest: sha256:1e622c5f073b4f6bfad6632f2616c7f59ef256e96fe78bf6a595d1dc4376ac02
Status: Downloaded newer image for ubuntu:latest
  • docker pull ubuntu:latest: 도커 허브에서 ubuntu의 최신 버전(latest) 이미지를 다운로드합니다. Digest는 다운로드된 이미지의 고유 식별자입니다.

3. 컨테이너 생성 및 실행

도커에서 우분투 컨테이너를 생성하려면 docker run 명령어를 사용합니다. -i는 인터랙티브 모드를, -t는 터미널을 할당하는 옵션입니다.

PS C:\Users\Playdata> docker run -i -t --name ubuntu-hello ubuntu /bin/bash
root@7a7b4c83ef65:/#
  • docker run -i -t --name ubuntu-hello ubuntu /bin/bash:
    • -i: 이 옵션은 컨테이너를 인터랙티브 모드로 실행합니다. 즉, 입력을 지속적으로 받을 수 있게 합니다.
    • -t: 터미널을 할당하여 셸을 사용할 수 있게 합니다.
    • --name ubuntu-hello: 생성될 컨테이너의 이름을 ubuntu-hello로 지정합니다.
    • ubuntu: 사용할 도커 이미지를 지정합니다. 여기서는 ubuntu 이미지를 사용합니다.
    • /bin/bash: 컨테이너 내에서 실행할 명령어입니다. 여기서는 bash 셸을 실행합니다.

4. 실행 중인 컨테이너 확인

현재 실행 중인 컨테이너는 docker ps 명령어로 확인할 수 있습니다.

PS C:\Users\Playdata> docker ps
CONTAINER ID   IMAGE                    COMMAND                   CREATED         STATUS             PORTS                               NAMES
7a7b4c83ef65   ubuntu                   "/bin/bash"               6 minutes ago   Up 6 minutes                                           ubuntu-hello
  • docker ps: 실행 중인 모든 컨테이너를 확인하는 명령어입니다. CONTAINER ID는 컨테이너의 고유 ID이며, STATUS는 컨테이너의 실행 상태를 나타냅니다. PORTS는 외부와 연결된 포트를 보여줍니다.

5. 모든 컨테이너 조회

docker ps -a 명령어를 사용하면 종료된 컨테이너까지 포함한 모든 컨테이너를 확인할 수 있습니다.

PS C:\Users\Playdata> docker ps -a
CONTAINER ID   IMAGE                    COMMAND                   CREATED          STATUS                            PORTS                               NAMES
7a7b4c83ef65   ubuntu                   "/bin/bash"               14 minutes ago   Exited (137) About a minute ago                                       ubuntu-hello
  • docker ps -a: 종료된 컨테이너를 포함하여 모든 컨테이너의 상태를 조회하는 명령어입니다. Exited 상태는 해당 컨테이너가 종료되었음을 의미합니다.

6. 컨테이너 종료 및 시작

컨테이너를 종료하려면 docker stop 명령어를 사용하고, 다시 시작하려면 docker start 명령어를 사용합니다.

PS C:\Users\Playdata> docker stop ubuntu-hello
ubuntu-hello
  • docker stop ubuntu-hello: ubuntu-hello 컨테이너를 종료합니다. 종료된 컨테이너는 다시 시작할 수 있습니다.
PS C:\Users\Playdata> docker start ubuntu-hello
ubuntu-hello
  • docker start ubuntu-hello: 이미 종료된 ubuntu-hello 컨테이너를 다시 시작합니다.

7. 컨테이너 접속 및 명령어 실행

컨테이너에 접속하여 명령어를 실행하려면 docker attach를 사용하거나, 접속하지 않고 명령어를 실행하려면 docker exec를 사용합니다.

PS C:\Users\Playdata> docker attach ubuntu-hello
root@7a7b4c83ef65:/#
  • docker attach ubuntu-hello: 실행 중인 컨테이너에 접속하여 셸을 실행합니다. 이 명령은 컨테이너의 터미널에 직접 연결하여, 셸을 통해 명령을 실행할 수 있습니다.
PS C:\Users\Playdata> docker exec ubuntu-hello echo "hello world"
hello world
  • docker exec ubuntu-hello echo "hello world": exec 명령어는 컨테이너에 접속하지 않고도 명령어를 실행할 수 있습니다. 여기서는 echo "hello world" 명령어를 실행하여 hello world를 출력합니다.

8. 컨테이너 삭제 및 이미지 삭제

컨테이너를 삭제하려면 docker rm 명령어를 사용하고, 이미지 삭제는 docker rmi를 사용합니다.

PS C:\Users\Playdata> docker rm ubuntu-hello
ubuntu-hello
  • docker rm ubuntu-hello: 종료된 컨테이너를 삭제합니다. 삭제된 컨테이너는 복구할 수 없으며, 새로운 컨테이너를 생성해야 합니다.
PS C:\Users\Playdata> docker rmi ubuntu
Untagged: ubuntu:latest
Deleted: sha256:602eb6fb314b5fafad376a32ab55194e535e533dec6552f82b70d7ac0e554b1c
  • docker rmi ubuntu: ubuntu 이미지를 삭제합니다. 이 명령은 해당 이미지를 사용하여 생성된 모든 컨테이너가 삭제된 후에 실행해야 합니다.

9. 도커 파일을 활용해서 이미지 생성하기

도커 파일(Dockerfile)은 도커 이미지를 만들기 위한 스크립트 파일로, 각 단계별로 실행할 명령어들이 포함되어 있습니다. 이 파일을 사용하여 이미지를 생성할 수 있습니다. 도커 파일을 사용할 때는 docker build 명령어를 이용하여 이미지를 빌드합니다.

PS C:\workspace\docker> docker build -t apache-img . 
  • docker build -t apache-img .:
    • -t: 이미지를 빌드할 때 태그를 지정하는 옵션입니다. apache-img라는 태그를 지정하여 이미지를 생성합니다.
    • .: 현재 디렉토리에서 도커 파일을 찾고 이미지를 빌드합니다.

10. 컨테이너 실행 및 포트 매핑

도커에서 이미지를 실행하려면 docker run 명령어를 사용하여 컨테이너를 실행하고, 필요한 포트를 매핑할 수 있습니다.

PS C:\workspace\docker> docker run -d -p 80:80 --name apache-container apache-img
0f8e6ac5c7155a8b979253afdb6913b05527bbdb70b06dac5cf41b6ef022a25f
  • docker run -d -p 80:80 --name apache-container apache-img:
    • -d: 컨테이너를 백그라운드에서 실행합니다.
    • -p 80:80: 호스트 시스템의 80번 포트를 컨테이너의 80번 포트에 매핑합니다. 이는 웹 애플리케이션에 접근할 때 필요한 포트 매핑입니다.
    • --name apache-container: 컨테이너의 이름을 apache-container로 지정합니다.

컨테이너가 실행되면 docker ps -a 명령어로 확인할 수 있습니다.

PS C:\workspace\docker> docker ps -a
CONTAINER ID   IMAGE                    COMMAND                   CREATED         STATUS         PORTS                               NAMES
0f8e6ac5c715   apache-img               "apachectl -D FOREGR…"   6 seconds ago   Up 6 seconds   0.0.0.0:80->80/tcp                
  apache-container

11. 웹 브라우저에서 확인

최종적으로 크롬 창을 열고 localhost를 입력하면 Apache 서버가 성공적으로 실행된 화면을 확인할 수 있습니다.

그리고 localhost/hello.html을 입력하면 아래와 같은 화면이 나타납니다.


12. Dockerfile 수정 후 빌드 진행 (재배포)

배포할 파일이 수정되었을 경우, 기존의 컨테이너는 삭제해야 하지만 이미지는 삭제하지 않고 새로 빌드를 진행할 수 있습니다.

# 컨테이너를 삭제합니다
PS C:\workspace\docker> docker rm apache-container

# 이미지를 다시 빌드합니다 (새로운 태그를 붙임)
PS C:\workspace\docker> docker build -t apache-img:v2 .

# 새로운 이미지로 컨테이너를 실행합니다
PS C:\workspace\docker> docker run -d -p 80:80 --name apache-container apache-img:v2

- 도커 로그인 및 로그아웃

13. 도커 로그인

도커 로그인은 docker login 명령어로 이루어집니다. 웹 기반 로그인으로 인증 코드를 입력하고 브라우저에서 인증을 완료할 수 있습니다.

PS C:\workspace\docker> docker login

USING WEB-BASED LOGIN
To sign in with credentials on the command line, use 'docker login -u <username>'

Your one-time device confirmation code is: GJQG-WPLV
Press ENTER to open your browser or submit your device code here: https://login.docker.com/activate

Waiting for authentication in the browser…
Login Succeeded
PS C:\workspace\docker>

  • docker login: 도커 레지스트리에서 로그인합니다. 인증을 위해 브라우저에서 인증을 진행하거나 명령어에서 직접 인증 코드를 입력할 수 있습니다.

14. 도커 로그아웃

도커 로그아웃은 docker logout 명령어로 이루어집니다. 이는 현재 로그인된 도커 계정의 자격 증명을 제거합니다.

PS C:\workspace\docker> docker logout
Removing login credentials for https://index.docker.io/v1/
PS C:\workspace\docker>
  • docker logout: 도커에서 로그아웃합니다. 이는 도커 레지스트리에서 로그아웃하고 자격 증명을 삭제합니다.

물론입니다! 아래는 계속 이어서 작성한 내용으로, 명령어나 옵션, 파라미터에 대한 구체적인 설명을 포함하였습니다.


- MySQL 컨테이너 실습

15. MySQL 컨테이너 생성 및 실행

MySQL 이미지를 기반으로 컨테이너를 실행하려면 아래와 같은 명령어를 사용합니다. 먼저, database라는 폴더를 생성한 후 실행합니다.

PS C:\workspace\docker> docker run --name mysql-container -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=r1234 -v ./database:/var/lib/mysql mysql:latest
138612f83fe90fb47407576922fc2dfda6d4b385f1778185e00a1fc5ff954ebf
  • docker run: 새로운 컨테이너를 생성하고 실행하는 명령어입니다.
    • --name mysql-container: 컨테이너의 이름을 mysql-container로 지정합니다. 컨테이너 이름을 통해 나중에 해당 컨테이너를 쉽게 참조할 수 있습니다.
    • -d: 이 옵션은 컨테이너를 백그라운드에서 실행합니다. 컨테이너의 출력이 터미널에 표시되지 않게 하며, 계속해서 쉘을 사용할 수 있습니다.
    • -p 3306:3306: 호스트 시스템의 3306번 포트를 컨테이너의 3306번 포트와 매핑합니다. 이렇게 하면 호스트 시스템에서 MySQL 데이터베이스에 접속할 수 있습니다.
    • -e MYSQL_ROOT_PASSWORD=r1234: MySQL의 root 계정에 대해 비밀번호를 설정합니다. 이 예제에서는 비밀번호를 r1234로 설정합니다.
    • -v ./database:/var/lib/mysql: ./database 디렉토리를 MySQL 컨테이너의 데이터 디렉토리(/var/lib/mysql)로 마운트합니다. 이렇게 하면 컨테이너가 종료되거나 삭제되어도 데이터가 호스트 시스템에 보존됩니다.
    • mysql:latest: 사용할 이미지를 지정합니다. 여기서는 mysql 이미지를 사용하며, latest 태그는 최신 버전의 이미지를 사용한다는 의미입니다.

컨테이너 실행 후 docker ps 명령어로 확인할 수 있습니다.

PS C:\workspace\docker> docker ps 
CONTAINER ID   IMAGE                    COMMAND                   CREATED         STATUS         PORTS                               NAMES
138612f83fe9   mysql:latest             "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:3306->3306/tcp, 33060/tcp   mysql-container
  • docker ps: 현재 실행 중인 모든 컨테이너를 보여주는 명령어입니다. 컨테이너 ID, 사용된 이미지, 상태 및 포트 매핑 등의 정보를 확인할 수 있습니다.

16. MySQL 접속

컨테이너에 접속하여 MySQL 명령어를 실행하려면 docker exec 명령어를 사용합니다.

PS C:\workspace\docker> docker exec -it mysql-container /bin/bash
bash-5.1#
  • docker exec: 실행 중인 컨테이너에서 명령어를 실행할 수 있게 해주는 명령어입니다.
    • -it: 이 옵션은 두 가지 옵션을 결합합니다.
      • -i: 인터랙티브 모드로 실행하여 터미널 입력을 받을 수 있도록 합니다.
      • -t: 터미널을 할당하여 셸 환경을 제공합니다.
    • mysql-container: 실행할 컨테이너의 이름입니다. 여기서는 mysql-container라는 이름을 사용합니다.
    • /bin/bash: 컨테이너 내에서 실행할 명령어입니다. bash 셸을 실행하여 MySQL 컨테이너에 접속합니다.

MySQL에 접속하려면 아래와 같이 명령어를 입력합니다.

bash-5.1# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 9.3.0 MySQL Community Server - GPL
...
mysql>
  • mysql -u root -p: MySQL 서버에 접속하는 명령어입니다. -u rootroot 사용자로 로그인하는 것을 의미하며, -p는 비밀번호를 입력하라는 옵션입니다.
    • Enter password:: -p 옵션이 지정되었으므로 비밀번호를 입력해야 합니다.

17. Nginx 컨테이너 실행 및 볼륨 매핑

Nginx 이미지를 실행할 때, 웹 파일을 호스트 시스템의 디렉토리에서 가져오고 컨테이너의 웹 서버 디렉토리로 매핑할 수 있습니다. 이 경우, -v 옵션을 사용하여 호스트 시스템의 web 디렉토리를 Nginx 컨테이너의 /usr/share/nginx/html로 마운트합니다.

PS C:\workspace\docker> docker run ` 
>> -d -p 80:80 ` 
>> --name web ` 
>> -v C:\workspace\docker\web:/usr/share/nginx/html ` 
>> nginx:1.14
  • docker run: 새로운 컨테이너를 실행하는 명령어입니다.
    • -d: 백그라운드에서 실행됩니다.
    • -p 80:80: 호스트 시스템의 80번 포트를 컨테이너의 80번 포트와 매핑합니다. 이는 HTTP 웹 서버의 기본 포트입니다.
    • --name web: 컨테이너 이름을 web으로 지정합니다.
    • -v C:\workspace\docker\web:/usr/share/nginx/html: 호스트 시스템의 C:\workspace\docker\web 디렉토리를 Nginx 컨테이너 내 /usr/share/nginx/html 디렉토리로 마운트합니다. 이 디렉토리는 Nginx가 제공하는 웹 페이지의 루트 디렉토리입니다.
    • nginx:1.14: 사용할 이미지를 nginx로 지정하며, 1.14는 해당 이미지의 태그입니다.

이미지 다운로드 및 실행 과정

만약 Nginx 이미지를 로컬에 찾을 수 없으면 도커가 자동으로 이미지를 다운로드합니다.

Unable to find image 'nginx:1.14' locally
1.14: Pulling from library/nginx
27833a3ba0a5: Pull complete
0f23e58bd0b7: Pull complete
8ca774778e85: Pull complete
Digest: sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d
Status: Downloaded newer image for nginx:1.14
  • docker pull nginx:1.14: 도커가 로컬에 이미지를 찾을 수 없으면, 도커 허브에서 이미지를 다운로드합니다.

- 도커 네트워크 실습

19. 네트워크 생성 및 확인

docker network ls 명령어로 현재 시스템에 있는 네트워크를 확인할 수 있습니다.

PS C:\workspace\docker> docker network ls
NETWORK ID     NAME                      DRIVER    SCOPE
fe464af69f37   bridge                    bridge    local
ddeda87089d6   database_default          bridge    local
cf6bf9386425   docker_default            bridge    local
95849cc77a10   host                      host      local
2ac381bfb4e0   mysql_installed_default   bridge    local
1fe2efd877f1   none                      null      local
  • docker network ls: 시스템에 존재하는 모든 네트워크를 조회합니다. 네트워크 이름과 그 종류(예: bridge, host)가 출력됩니다.

20. 새 네트워크 생성

docker network create 명령어로 새로운 네트워크를 생성할 수 있습니다.

PS C:\workspace\docker> docker network create my-net
06450ec6a29f74a3fa7aba4653ed3b89b0bedc9865697630e4e5c3ccbba38148
  • docker network create my-net: my-net이라는 이름의 새로운 네트워크를 생성합니다.

21. 컨테이너를 네트워크에 연결

docker network connect 명령어로 컨테이너를 네트워크에 연결할 수 있습니다.

PS C:\workspace\docker> docker network connect my-net nginx-container
  • docker network connect my-net nginx-container: nginx-containermy-net 네트워크에 연결합니다. 이 명령을 사용하여 컨테이너 간의 네트워크 연결을 설정할 수 있습니다.

22. 네트워크에서 컨테이너 제거

docker network disconnect 명령어로 네트워크에서 컨테이너를 제거할 수 있습니다.

PS C:\workspace\docker> docker network disconnect my-net nginx-container
  • docker network disconnect my-net nginx-container: nginx-containermy-net 네트워크에서 제거합니다.

23. 네트워크 삭제

docker network rm 명령어로 네트워크를 삭제할 수 있습니다.

PS C:\workspace\docker> docker network rm my-net
my-net
  • docker network rm my-net: my-net 네트워크를 삭제합니다.

24. 사용하지 않는 네트워크 청소

docker network prune 명령어로 사용되지 않는 네트워크들을 한 번에 제거할 수 있습니다.

PS C:\workspace\docker> docker network prune  
WARNING! This will remove all custom networks not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Networks:
mysql_installed_default
docker_default
  • docker network prune: 사용되지 않는 모든 네트워크를 제거합니다.

- 한 네트워크에 두 컨테이너 올려서 접속 실습

25. 네트워크 생성

컨테이너들이 서로 통신할 수 있도록 네트워크를 생성합니다. docker network create 명령어로 새로운 네트워크를 만들 수 있습니다.

PS C:\workspace\docker> docker network create my-net
aa76f0cef052411cdd62a3af2e4bbabe23e7d81ffb0ad2f314957007f061c1db
  • docker network create my-net: my-net이라는 이름으로 새 네트워크를 생성합니다.

26. MySQL 컨테이너 실행

MySQL 컨테이너를 실행할 때, 데이터베이스 파일을 호스트 시스템에 저장하고, 컨테이너 포트를 호스트와 매핑합니다.

PS C:\workspace\docker> docker run -d --name db-container -e MYSQL_ROOT_PASSWORD=r1234 mysql
  • docker run -d --name db-container -e MYSQL_ROOT_PASSWORD=r1234 mysql:
    • --name db-container: 컨테이너 이름을 db-container로 지정합니다.
    • -e MYSQL_ROOT_PASSWORD=r1234: MySQL root 계정의 비밀번호를 설정합니다.
    • mysql: 사용할 이미지를 mysql로 지정합니다.

27. Streamlit 컨테이너 실행

Streamlit을 사용하여 웹 애플리케이션을 실행할 수 있는 컨테이너를 실행합니다.

PS C:\workspace\docker> docker run -d -p 8501:8501 --name streamlit-container streamlit-image
80231da5fc0927487cab1b991e485fc2fdc2acf17459541ee27f1c421e16bd9b
  • docker run -d -p 8501:8501 --name streamlit-container streamlit-image:
    • -d: 백그라운드에서 컨테이너를 실행합니다.
    • -p 8501:8501: 호스트 시스템의 8501번 포트를 컨테이너의 8501번 포트와 매핑하여, 웹 애플리케이션에 접속할 수 있도록 합니다.

28. 컨테이너를 네트워크에 연결

Streamlit과 MySQL 컨테이너를 동일한 네트워크에 연결하여 서로 통신할 수 있도록 설정합니다.

PS C:\workspace\docker> docker network connect my-net streamlit-container
  • docker network connect my-net streamlit-container: streamlit-containermy-net 네트워크에 연결하여, 다른 컨테이너와의 네트워크 연결을 허용합니다.

29. 컨테이너 연결 확인

docker network inspect 명령어를 사용하여 네트워크 내 컨테이너들의 연결 상태를 확인할 수 있습니다.

PS C:\workspace\docker> docker network inspect my-net
  • docker network inspect my-net: my-net 네트워크에 연결된 컨테이너들의 정보를 출력하여, 서로 연결되어 있는지 확인할 수 있습니다.

30. Streamlit 애플리케이션 확인

웹 브라우저에서 localhost:8501로 접속하여 Streamlit 애플리케이션이 정상적으로 실행되고 있는지 확인할 수 있습니다. 이때, MySQL 컨테이너와 Streamlit 컨테이너가 동일한 네트워크에 있기 때문에 데이터베이스 연결이 가능합니다.


31. docker-compose.yml 파일을 사용하여 이미지, 컨테이너, 네트워크 설정을 한번에 지우기

docker-compose down 명령어를 사용하여 docker-compose.yml 파일로 생성된 이미지, 컨테이너, 네트워크 설정을 한번에 삭제할 수 있습니다. 아래는 해당 명령어를 실행한 예시입니다.

PS C:\workspace\docker_compose> docker-compose down
  • docker-compose down: docker-compose.yml 파일을 사용하여 생성된 모든 컨테이너, 네트워크 및 이미지 설정을 한 번에 제거하는 명령어입니다.

32. 이미지 상태 확인

docker images 명령어를 사용하여 현재 시스템에 남아있는 이미지를 확인할 수 있습니다. 이미지는 여전히 남아있는 것을 확인할 수 있습니다.

PS C:\workspace\docker_compose> docker images
REPOSITORY                          TAG       IMAGE ID       CREATED             SIZE
docker_compose-streamlit-services   latest    b685bcba23dd   About an hour ago   1.54GB
mysql                               latest    4b2d796bebc2   2 days ago          859MB
pgvector/pgvector                   pg17      c4291a5abe08   6 weeks ago         447MB
  • docker images: 현재 도커 시스템에 존재하는 모든 이미지를 나열합니다. 각 이미지의 이름, 태그, 이미지 ID 및 생성된 날짜 등을 확인할 수 있습니다.

33. 컨테이너 상태 확인

docker ps -a 명령어를 사용하여 삭제된 컨테이너를 확인할 수 있습니다. 컨테이너는 삭제된 상태이지만, 여전히 기타 컨테이너가 실행 중인 것을 확인할 수 있습니다.

PS C:\workspace\docker_compose> docker ps -a
CONTAINER ID   IMAGE                    COMMAND                   CREATED       STATUS       PORTS                    NAMES
a07eaa2a5e2f   pgvector/pgvector:pg17   "docker-entrypoint.s…"   2 weeks ago   Up 3 hours   0.0.0.0:5432->5432/tcp   my-postgresql

34. 네트워크 상태 확인

docker network ls 명령어를 사용하여 네트워크 목록을 확인할 수 있습니다. docker-compose down 명령어로 생성된 네트워크도 삭제되었음을 확인할 수 있습니다.

PS C:\workspace\docker_compose> docker network ls
NETWORK ID     NAME               DRIVER    SCOPE
fe464af69f37   bridge             bridge    local
ddeda87089d6   database_default   bridge    local
95849cc77a10   host               host      local
1fe2efd877f1   none               null      local

35. Streamlit 애플리케이션 확인

웹 브라우저에서 localhost:8501로 접속하여 Streamlit 애플리케이션이 정상적으로 실행되고 있는지 확인할 수 있습니다. 이때, MySQL 컨테이너와 Streamlit 컨테이너가 동일한 네트워크에 있기 때문에 데이터베이스 연결이 가능합니다.

PS C:\workspace\docker_compose> docker network inspect my-net
[
    {
        "Name": "my-net",
        "Id": "4e7c77500fde1451f08beda6c3bf8cce26d9e14dc526585b5224e71cc8627fe7",
        "Created": "2025-04-17T07:31:26.665515455Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "22f06ac555a8153f043356e04e4b7efd88160d24f7bd56bcb8dda45dc5ea17aa": {
                "Name": "streamlit-container",
                "EndpointID": "ff36faf38805f8b3756736010fea43853695793a5387bff1b397bec6f02cac54",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            },
            "cf77388f2ef93bbda1b993cafbdd82518cd77d8a458d4678cf9a5e64c81fede4": {
                "Name": "db-container",
                "EndpointID": "11a0ab7e48a0f7d28d4a5ebe7bdbc5c6b480e6d09abe7ea1a1006aea8571cdc7",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.config-hash": "0a413f0519614e47e8917fd02b9ee30e4816d4e6caa357cce90e09515e2f4cc2",
            "com.docker.compose.network": "my_network",
            "com.docker.compose.project": "docker_compose",
            "com.docker.compose.version": "2.31.0"
        }
    }
]
PS C:\workspace\docker_compose>
  • docker network inspect my-net: my-net 네트워크에 연결된 컨테이너들을 점검하는 명령어입니다. 컨테이너 streamlit-containerdb-container가 동일한 네트워크에 연결되어 있음을 보여줍니다. 이 명령어는 네트워크와 관련된 세부 사항을 확인할 때 유용합니다.

36. docker-compose.yml 파일을 사용하여 이미지, 컨테이너, 네트워크 설정을 한번에 지우기

docker-compose down 명령어를 사용하여 docker-compose.yml 파일로 생성된 이미지, 컨테이너, 네트워크 설정을 한 번에 삭제할 수 있습니다.

PS C:\workspace\docker_compose> docker-compose down
  • docker-compose down: docker-compose.yml을 통해 생성된 모든 컨테이너, 네트워크, 볼륨 등을 한 번에 삭제합니다. 이 명령어는 docker-compose up 명령어로 생성한 환경을 정리하는 데 사용됩니다.

37. 이미지 상태 확인

docker images 명령어를 사용하여 현재 시스템에 남아있는 이미지를 확인할 수 있습니다. 이미지는 여전히 남아있는 것을 확인할 수 있습니다.

PS C:\workspace\docker_compose> docker images
REPOSITORY                          TAG       IMAGE ID       CREATED             SIZE
docker_compose-streamlit-services   latest    b685bcba23dd   About an hour ago   1.54GB
mysql                               latest    4b2d796bebc2   2 days ago          859MB
pgvector/pgvector                   pg17      c4291a5abe08   6 weeks ago         447MB
  • docker images: 로컬 시스템에 저장된 도커 이미지를 모두 나열합니다. 이 명령어로 이미지 ID, 이름, 생성 일자, 크기 등을 확인할 수 있습니다. 불필요한 이미지는 docker rmi 명령어로 삭제할 수 있습니다.

38. 컨테이너 상태 확인

docker ps -a 명령어를 사용하여 삭제된 컨테이너를 확인할 수 있습니다. 컨테이너는 삭제된 상태이지만, 여전히 기타 컨테이너가 실행 중인 것을 확인할 수 있습니다.

PS C:\workspace\docker_compose> docker ps -a
CONTAINER ID   IMAGE                    COMMAND                   CREATED       STATUS       PORTS                    NAMES
a07eaa2a5e2f   pgvector/pgvector:pg17   "docker-entrypoint.s…"   2 weeks ago   Up 3 hours   0.0.0.0:5432->5432/tcp   my-postgresql
  • docker ps -a: 종료된 컨테이너를 포함하여 모든 컨테이너를 확인할 수 있습니다. STATUS 필드를 통해 각 컨테이너의 상태가 출력되며, Exited로 표시된 컨테이너는 이미 종료된 상태입니다.

39. 네트워크 상태 확인

docker network ls 명령어를 사용하여 네트워크 목록을 확인할 수 있습니다. docker-compose down 명령어로 생성된 네트워크도 삭제되었음을 확인할 수 있습니다.

PS C:\workspace\docker_compose> docker network ls
NETWORK ID     NAME               DRIVER    SCOPE
fe464af69f37   bridge             bridge    local
ddeda87089d6   database_default   bridge    local
95849cc77a10   host               host      local
1fe2efd877f1   none               null      local
  • docker network ls: 시스템에 존재하는 모든 네트워크를 나열합니다. bridge는 기본 네트워크 드라이버이며, hostnone 네트워크는 각각 다른 용도로 사용됩니다.

profile
AI 모델을 개발하여 이를 활용한 서비스를 개발하고 운영하는 개발자가 되기 위해 꾸준히 노력하겠습니다!

0개의 댓글