객체지향 프로그래밍(Object-Oriented Programming)은 컴퓨터 프로그래밍 패러다임 중 하나로, 현실 세계를 객체(Object)라는 개념으로 모델링하여 프로그래밍 하는 방법입니다. Python은 객체지향 언어로, 클래스(Class)와 객체(Object)를 중심으로 프로그래밍이 이루어집니다.

클래스(Class)는 객체를 만들기 위한 설계도로, 객체를 만드는데 사용되는 변수와 함수들의 집합입니다. 예를 들어, 동물이라는 클래스를 만들 때, 동물의 특징인 눈, 다리, 꼬리 등의 변수와 움직이기, 먹기 등의 함수를 정의할 수 있습니다.

객체(Object)는 클래스를 기반으로 만들어진 실체입니다. 클래스를 인스턴스화(Instantiate) 하여 객체를 생성하고, 객체는 클래스에서 정의된 변수와 함수를 사용할 수 있습니다. 예를 들어, 동물 클래스를 인스턴스화하여 개, 고양이, 돼지 등의 객체를 생성하고, 이들 객체는 각각 눈, 다리, 꼬리 등의 변수와 움직이기, 먹기 등의 함수를 사용할 수 있습니다.

Python에서 클래스는 다음과 같이 정의됩니다.

class Animal:
    def __init__(self, eyes, legs, tail):
        self.eyes = eyes
        self.legs = legs
        self.tail = tail
        
    def move(self):
        print("I am moving")
        
    def eat(self, food):
        print("I am eating", food)

위의 코드는 Animal 클래스를 정의하는 예시입니다. 클래스는 class 예약어로 시작하며, 클래스 이름은 대문자로 시작하는 것이 관례입니다. __init__ 메서드는 객체가 생성될 때 자동으로 호출되는 생성자(Constructor)로, 클래스에서 정의된 변수들을 초기화합니다. **move**와 eat 메서드는 동물 객체에서 호출할 수 있는 함수입니다.

클래스에서 정의된 변수와 함수를 사용하기 위해서는, 객체를 먼저 생성해야 합니다.

dog = Animal(2, 4, True)
cat = Animal(2, 4, True)

dog.move() # "I am moving" 출력
cat.eat("fish") # "I am eating fish" 출력

위의 코드는 Animal 클래스에서 dog와 cat 객체를 생성한 후, move와 eat 함수를 호출하는 예시입니다. 이렇게 객체지향 프로그래밍에서는, 클래스를 설계하고, 객체를 생성하여 사용함으로써 현실 세계를 모델링하여 프로그래밍할 수 있습니다.

Docker는 컨테이너 간 통신을 위한 다양한 방법을 제공합니다. 이를 위해서는 컨테이너 간 네트워크를 설정해야 합니다.

  1. 사용자 정의 브리지 네트워크 생성 Docker에서는 사용자 정의 브리지 네트워크를 생성하여 두 개 이상의 컨테이너가 동일한 네트워크에서 통신할 수 있습니다. 먼저, 다음 명령어로 사용자 정의 브리지 네트워크를 생성합니다.
docker network create my-network

그리고 컨테이너를 실행할 때, --net 옵션을 사용하여 해당 네트워크에 연결합니다.

docker run --name container1 --net my-network image1
docker run --name container2 --net my-network image2

이제 container1에서 container2로 통신이 가능해집니다.

  1. 호스트 네트워크 사용 컨테이너가 호스트와 동일한 네트워크를 사용하도록 설정할 수 있습니다. 다음과 같이 --net=host 옵션을 사용하여 호스트 네트워크를 사용할 수 있습니다.
docker run --name container1 --net=host image1
docker run --name container2 --net=host image2

이제 container1에서 container2로 바로 통신이 가능합니다.

  1. 링크(Link) 사용 Docker는 --link 옵션을 사용하여 컨테이너 간 통신을 가능하게 합니다. 이 옵션을 사용하면, 명령어에서 컨테이너 이름을 지정할 수 있으며, 그에 따라 해당 컨테이너의 IP 주소 및 환경 변수를 사용할 수 있습니다.
docker run --name container1 --link container2:image2 image1

위의 예시에서 container1은 container2의 IP 주소 및 환경 변수를 사용할 수 있게 됩니다.

Docker는 위와 같은 방법을 통해 컨테이너 간 통신을 가능하게 합니다. 이를 통해 각각의 컨테이너는 독립적으로 실행되면서도 필요한 경우 다른 컨테이너와 연결하여 통신할 수 있습니다.

참고 문헌: [1] https://stackoverflow.com/questions/55862431/how-to-communicate-between-two-containers-using-docker[2] https://www.tutorialworks.com/container-networking/[3] https://stackoverflow.com/questions/30545023/how-to-communicate-between-docker-containers-via-hostname

'개발 > Docker' 카테고리의 다른 글

도커 기본 명령어 설명 (Docker basic commands)  (0) 2023.03.09

컨테이너 기반 가상화 기술인 Docker에서 가장 많이 사용되는 50가지 기본 명령어에 대해 설명하고, 예시를 보여드리겠습니다.

  1. docker run - 컨테이너를 생성하고 실행합니다. 예시: docker run -it ubuntu /bin/bash
  2. docker ps - 실행 중인 컨테이너 목록을 확인합니다. 예시: docker ps
  3. docker stop - 실행 중인 컨테이너를 정지합니다. 예시: docker stop <컨테이너 ID>
  4. docker images - 로컬 이미지 목록을 확인합니다. 예시: docker images
  5. docker rmi - 로컬 이미지를 삭제합니다. 예시: docker rmi <이미지 ID>
  6. docker build - Dockerfile을 사용하여 이미지를 빌드합니다. 예시: docker build -t my-image:latest .
  7. docker logs - 컨테이너 로그를 확인합니다. 예시: docker logs <컨테이너 ID>
  8. docker inspect - 컨테이너 또는 이미지에 대한 세부 정보를 확인합니다. 예시: docker inspect <컨테이너 또는 이미지 ID>
  9. docker exec - 실행 중인 컨테이너에서 명령을 실행합니다. 예시: docker exec -it <컨테이너 ID> /bin/bash
  10. docker push - 이미지를 Docker Hub 또는 다른 Docker 레지스트리에 푸시합니다. 예시: docker push my-image:latest
  11. docker pull - Docker Hub 또는 다른 Docker 레지스트리에서 이미지를 가져옵니다. 예시: docker pull ubuntu:latest
  12. docker network create - Docker 네트워크를 생성합니다. 예시: docker network create my-network
  13. docker network ls - Docker 네트워크 목록을 확인합니다. 예시: docker network ls
  14. docker network connect - 컨테이너를 Docker 네트워크에 연결합니다. 예시: docker network connect my-network <컨테이너 ID>
  15. docker network disconnect - 컨테이너를 Docker 네트워크에서 분리합니다. 예시: docker network disconnect my-network <컨테이너 ID>
  16. docker port - 컨테이너의 포트 매핑 정보를 확인합니다. 예시: docker port <컨테이너 ID>
  17. docker rename - 컨테이너의 이름을 변경합니다. 예시: docker rename old-name new-name
  18. docker rm - 컨테이너를 삭제합니다. 예시: docker rm <컨테이너 ID>
  19. docker attach - 실행 중인 컨테이너에 접속합니다. 예시: docker attach <컨테이너 ID>
  20. docker cp - 컨테이너와 호스트 간에 파일
  21. docker cp - 컨테이너와 호스트 간에 파일을 복사합니다. 예시: docker cp <컨테이너 ID>:<컨테이너 내부 경로> <호스트 경로>
  22. docker commit - 컨테이너에서 새로운 이미지를 생성합니다. 예시: docker commit <컨테이너 ID> my-image:latest
  23. docker save - 이미지를 tar 파일로 저장합니다. 예시: docker save my-image:latest > my-image.tar
  24. docker load - tar 파일에서 이미지를 로드합니다. 예시: docker load < my-image.tar
  25. docker history - 이미지의 빌드 기록을 확인합니다. 예시: docker history my-image:latest
  26. docker tag - 이미지에 새로운 태그를 추가합니다. 예시: docker tag my-image:latest my-image:newtag
  27. docker search - Docker Hub에서 이미지를 검색합니다. 예시: docker search mysql
  28. docker stats - 실행 중인 컨테이너의 리소스 사용량을 확인합니다. 예시: docker stats <컨테이너 ID>
  29. docker top - 실행 중인 컨테이너에서 실행 중인 프로세스를 확인합니다. 예시: docker top <컨테이너 ID>
  30. docker wait - 컨테이너가 종료될 때까지 대기합니다. 예시: docker wait <컨테이너 ID>
  31. docker events - Docker 이벤트를 모니터링합니다. 예시: docker events
  32. docker pause - 실행 중인 컨테이너를 일시 중지합니다. 예시: docker pause <컨테이너 ID>
  33. docker unpause - 일시 중지된 컨테이너를 다시 시작합니다. 예시: docker unpause <컨테이너 ID>
  34. docker update - 실행 중인 컨테이너의 설정을 업데이트합니다. 예시: docker update --cpus 2 <컨테이너 ID>
  35. docker diff - 컨테이너에서 파일 시스템의 변경 사항을 확인합니다. 예시: docker diff <컨테이너 ID>
  36. docker export - 컨테이너를 tar 파일로 내보냅니다. 예시: docker export <컨테이너 ID> > my-container.tar
  37. docker import - tar 파일에서 컨테이너를 생성합니다. 예시: docker import my-container.tar my-image:latest
  38. docker system df - Docker 시스템의 디스크 사용량을 확인합니다. 예시: docker system df
  39. docker system prune - 사용하지 않는 컨테이너, 이미지 등을 삭제합니다. 예시: docker system prune
  40. docker version - Docker 버전 정보를 확인합니다. 예시: docker version
  41. docker info - Docker 시스템 정보를 확인합니다. 예시: docker info
  42. docker login
  43. docker login - Docker Hub 또는 다른 Docker 레지스트리에 로그인합니다. 예시: docker login
  44. docker logout - Docker Hub 또는 다른 Docker 레지스트리에서 로그아웃합니다. 예시: docker logout
  45. docker system events - Docker 시스템 이벤트를 모니터링합니다. 예시: docker system events
  46. docker system info - Docker 시스템 정보를 상세하게 확인합니다. 예시: docker system info
  47. docker system prune - 사용하지 않는 리소스를 삭제합니다. 예시: docker system prune
  48. docker system events --since '2022-01-01' - 특정 날짜 이후의 Docker 이벤트를 모니터링합니다. 예시: docker system events --since '2022-01-01'
  49. docker system events --filter 'event=start' - 특정 이벤트만 모니터링합니다. 예시: docker system events --filter 'event=start'
  50. docker inspect -f '{{.NetworkSettings.IPAddress}}' <컨테이너 ID> - 컨테이너의 IP 주소를 확인합니다. 예시: docker inspect -f '{{.NetworkSettings.IPAddress}}' my-container
  51. docker run -p 80:80 nginx - 호스트의 포트와 컨테이너의 포트를 매핑합니다. 예시: docker run -p 8080:80 nginx
  52. docker run -v /host/path:/container/path - 호스트 경로와 컨테이너 경로를 연결합니다. 예시: docker run -v /data:/app/data my-image:latest
  53. docker run -e <환경 변수> - 컨테이너에서 사용할 환경 변수를 설정합니다. 예시: docker run -e MYSQL_ROOT_PASSWORD=pass1234 mysql:latest
  54. docker run -d - 컨테이너를 백그라운드 모드로 실행합니다. 예시: docker run -d my-image:latest
  55. docker-compose up - Docker Compose를 사용하여 여러 컨테이너를 실행합니다. 예시: docker-compose up
  56. docker-compose down - Docker Compose로 실행한 컨테이너를 정지합니다. 예시: docker-compose down
  57. docker-compose build - Docker Compose에서 정의된 서비스를 빌드합니다. 예시: docker-compose build
  58. docker-compose logs - Docker Compose로 실행한 서비스의 로그를 확인합니다. 예시: docker-compose logs
  59. docker-compose ps - Docker Compose로 실행한 서비스 목록을 확인합니다. 예시: docker-compose ps
  60. docker-compose run - Docker Compose에서 서비스를 실행합니다. 예시: docker-compose run my-service /bin/bash
  61. docker-compose restart - Docker Compose에서 서비스를 재시작합니다. 예시: docker-compose restart my-service
  62. docker-compose stop - Docker Compose에서 서비스를 정지합니다. 예시: docker-compose stop my-service
  63. docker-compose pull - Docker Compose에서 정의된 서비스의 이미지를 가져옵니다. 예시: docker-compose pull
  64. docker-compose exec - Docker Compose에서 실행 중인 서비스에서 명령을 실행합니다. 예시: docker-compose exec my-service /bin/bash
  65. docker-compose up -d - Docker Compose로 여러 서비스를 백그라운드 모드로 실행합니다. 예시: docker-compose up -d
  66. docker-compose down -v - Docker Compose로 실행한 컨테이너와 볼륨을 모두 삭제합니다. 예시: docker-compose down -v
  67. docker swarm init - Docker Swarm 모드를 초기화합니다. 예시: docker swarm init
  68. docker swarm join - 다른 노드를 Docker Swarm 클러스터에 추가합니다. 예시: docker swarm join --token <토큰> <매니저 노드 주소>
  69. docker service create - Docker Swarm 모드에서 서비스를 생성합니다. 예시: docker service create --name my-service my-image:latest
  70. docker service scale - Docker Swarm 모드에서 서비스의 인스턴스 수를 조정합니다. 예시: docker service scale my-service=5
  71. docker service ls - Docker Swarm 모드에서 실행 중인 서비스 목록을 확인합니다. 예시: docker service ls
  72. docker service logs - Docker Swarm 모드에서 실행 중인 서비스의 로그를 확인합니다. 예시: docker service logs my-service
  73. docker service ps - Docker Swarm 모드에서 실행 중인 서비스의 태스크 목록을 확인합니다. 예시: docker service ps my-service
  74. docker service update - Docker Swarm 모드에서 서비스의 설정을 업데이트합니다. 예시: docker service update --image my-image:latest my-service
  75. docker stack deploy - Docker Swarm 모드에서 스택을 배포합니다. 예시: docker stack deploy --compose-file docker-compose.yml my-stack
  76. docker stack rm - Docker Swarm 모드에서 스택을 제거합니다. 예시: docker stack rm my-stack
  77. docker node ls - Docker Swarm 클러스터에 속한 노드 목록을 확인합니다. 예시: docker node ls
  78. docker node inspect - Docker Swarm 클러스터의 노드에 대한 정보를 확인합니다. 예시: docker node inspect <노드 ID>
  79. docker node update - Docker Swarm 클러스터의 노드 설정을 업데이트합니다. 예시: docker node update --availability drain <노드 ID>
  80. docker stack services - Docker Swarm 모드에서 스택에 속한 서비스 목록을 확인합니다. 예시: docker stack services my-stack
  81. docker stack ps - Docker Swarm 모드에서 스택에 속한 태스크 목록을 확인합니다. 예시: docker stack ps my-stack
  82. docker secret create - Docker Swarm 모드에서 시크릿을 생성합니다. 예시: echo "mysecret" | docker secret create my-secret -
  83. docker secret ls - Docker Swarm 모드에서 시크릿 목록을 확인합니다. 예시: docker secret ls
  84. docker secret inspect - Docker Swarm 모드에서 시크릿에 대한 정보를 확인합니다. 예시: docker secret inspect my-secret
  85. docker secret rm - Docker Swarm 모드에서 시크릿을 삭제합니다. 예시: docker secret rm my-secret
  86. docker config create - Docker Swarm 모드에서 설정을 생성합니다. 예시: echo "myconfig" | docker config create my-config -
  87. docker config ls - Docker Swarm 모드에서 설정 목록을 확인합니다. 예시: docker config ls
  88. docker config inspect - Docker Swarm 모드에서 설정에 대한 정보를 확인합니다. 예시: docker config inspect my-config
  89. docker config rm - Docker Swarm 모드에서 설정을 삭제합니다. 예시: docker config rm my-config
  90. docker swarm leave - Docker Swarm 클러스터에서 노드를 제거합니다. 예시: docker swarm leave --force
  91. docker swarm update - Docker Swarm 클러스터의 설정을 업데이트합니다. 예시: docker swarm update --cert-expiry 72h
  92. docker plugin install - Docker 플러그인을 설치합니다. 예시: docker plugin install my-plugin
  93. docker plugin ls - Docker 플러그인 목록을 확인합니다. 예시: docker plugin ls
  94. docker plugin rm - Docker 플러그인을 삭제합니다. 예시: docker plugin rm my-plugin
  95. docker system prune -a - 사용하지 않는 모든 리소스를 삭제합니다. 예시: docker system prune -a
  96. docker system events --filter 'type=container' - 실행 중인 컨테이너 이벤트만 모니터링합니다. 예시: docker system events --filter 'type=container'
  97. docker stats <컨테이너 ID> --no-stream - 컨테이너의 리소스 사용량을 한 번만 확인합니다. 예시: docker stats my-container --no-stream

'개발 > Docker' 카테고리의 다른 글

Docker 컨테이너 통신  (0) 2023.03.09

+ Recent posts