docker network 설정

docker network란

  • docker host 내에서 실행중인 container간에 연결할 수 있도록 하는 논리적 네트워크 개념이다.
  • docker network의 종류 (2번을 사용할 것이다.)
  1. default bridge network
    • 간단하게 개발환경에서 테스트 용도로 사용
  2. user-defined bridge networks
    • 같은 docker host 내에서 실행중인 docker container간 연결할 수 있는 사용자 정이 브릿지 네트워크
  3. overlay networks

docker network 만들기

// 간단한 Apline linux를 도커 이미지로 받아온다
// java11-alpine라는 도커 이미지가 존재하는지 검색해야한다.
  $ docker search java11-alpine
  $ docker pull java11-alpine

// docker network 생성
// 'docker-network'라는 이름의 네트워크를 생성한다.
  $ docker network create docker-network

// docker-network 네트워크에 컨테이너를 연결하여 실행한다
  $ docker run -dit --name test1 --network docker-network lpicanco/java11-alpine ash
  $ docker run -dit --name test2 --network docker-network lpicanco/java11-alpine ash
  $ docker run -dit --name test3 lpicanco/java11-alpine ash
  • docker run 명령으로 다운받은 이미지(lpicanco/java11-alpine)를 이용하여 3개의 컨테이너(test1,test2,test3)를 띄운다.

    • -d : 컨테이너를 백그라운드에서 실행하도록 하는 옵션
    • -i : 컨테이너가 detach된 상태에서도 표준 입력을 유지하도록 하는 옵션
    • -t : 가상 터미널을 연결하는 옵션
    • --name test1: 컨테이너의 이름(test1)을 부여하는 옵션
    • --network docker-network : 컨테이너를 docker-network라는 네트워크에 연결하는 옵션
      • docker run으로는 단 하나의 네트워크만 연결할 수 있으므로, docker network connect 명령어를 사용하여 여러 네트워크를 연결할 수 있다
    • lpicanco/java11-alpine : lpicanco/java11-alpine라는 이미지로 컨테이너를 생성한다
    • ash : alpine 리눅스의 기본 쉘로 지정한다.
// inspect 명령어로 docker-network에 연결된 컨테이너를 확인한다
  $ docker network inspect docker-network

// 결과
  "Containers": {
              "6274c8ed1dff10720b91723bf0bb3c6cc05ff22d2cccc97bab2d50c42ed415c6": {
                  "Name": "test1",
                  "EndpointID": "c0c913146498a4bcbdd5b3c738f5b5dd39044c9d1f22a56a52d1d37d92742579",
                  "MacAddress": "02:42:ac:12:00:02",
                  "IPv4Address": "172.18.0.2/16",
                  "IPv6Address": ""
              },
              "876a3aaa98df4bda2e73038bf93ba60cf5d86c7d5c54c6a1aed618b10804feed": {
                  "Name": "test2",
                  "EndpointID": "097071e69079251dc11a71a763ce391122c92907c1e3237e7058e5a0ccddc866",
                  "MacAddress": "02:42:ac:12:00:03",
                  "IPv4Address": "172.18.0.3/16",
                  "IPv6Address": ""
              }
          }
          
// 동작중인 컨테이너를 network에 연결한다
// test3라는 컨테이너를 docker-network 라는 네트워크에 연결한다.
// run 대신 connect로 여러 네트워크에 연결할 수 있다.
  $ docker network connect docker-network test3

// inspect 명령어로 다시 docker-network에 연결된 컨테이너를 확인한다
  $ docker network inspect docker-network

// 결과
  "Containers": {
              "6274c8ed1dff10720b91723bf0bb3c6cc05ff22d2cccc97bab2d50c42ed415c6": {
                  "Name": "test1",
              },
              "876a3aaa98df4bda2e73038bf93ba60cf5d86c7d5c54c6a1aed618b10804feed": {
                  "Name": "test2",
              },
              "876a3aaa98df4bdsf47848sfdsdfd5d86c7d5c54c6a1aed618b10a80as4fhhy": {
                  "Name": "test3",
              },
          }
        
        
// 컨테이너의 이름을 통해 통신을 시도한다.
// 먼저 컨테이너 터미널에 들어간다
  $ docker attach test1

// test2, test3라는 컨테이너 이름으로 통신이 가능하다.
  /# ping test2
  /# ping test3

docker에 mysql 띄우기

// mysql 이미지를 다운받는다
  $ docker pull mysql

// 받은 이미지로 mysql 컨테이너를 실행시킨다
  $ docker run -d --name db -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 --network docker-network mysql 
  • mysql 컨테이너 실행
  • -d : 해당 컨테이너를 백그라운드로 실행시킨다.
  • --name db : 컨테이너의 이름을 db로 설정한다.
  • -e : 환경 변수를 설정한다
    • MYSQL_ROOT_PASSWORD=password123 : mysql root user의 패스워드를 password123으로 설정한다.
  • -p 3306:3306 : 컨테이너가 외부에 노출할 포트번호를 지정한다.
  • --network docker-network : docker-network로 네트워크를 지정한다.
// mysql 컨테이너를 bash쉘로 tty를 실행한다
  $ docker exec -it db bash

// root 계정으로 mysql에 접속하여 spring_example이라는 데이터베이스를 생성한다
  root@876a3aaa98df:/# mysql -u root -p
  Enter password: 
  Welcome to the MySQL monitor.  Commands end with ; or \g.
  Your MySQL connection id is 8
  Server version: 8.0.23 MySQL Community Server - GPL

  Copyright (c) 2000, 2021, Oracle and/or its affiliates.

  Oracle is a registered trademark of Oracle Corporation and/or its
  affiliates. Other names may be trademarks of their respective
  owners.

  Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

  mysql> create database spring_example;
  Query OK, 1 row affected (0.02 sec)

  mysql> show databases;
  +--------------------+
  | Database           |
  +--------------------+
  | information_schema |
  | mysql              |
  | performance_schema |
  | spring_example     |
  | sys                |
  | testdb             |
  +--------------------+
  6 rows in set (0.00 sec)
  

  • intellij에서 mysql 컨테이너에 연결할 수 있다.
    • user = root, password = password123, port=3306 으로 기입하고 test connection을 누른다
    • bash 쉘에서 생성한 spring_example 데이터베이스가 보인다.

0개의 댓글