- default bridge network
- 간단하게 개발환경에서 테스트 용도로 사용
- user-defined bridge networks
- 같은 docker host 내에서 실행중인 docker container간 연결할 수 있는 사용자 정이 브릿지 네트워크
- overlay networks
// 간단한 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
// mysql 이미지를 다운받는다
$ docker pull mysql
// 받은 이미지로 mysql 컨테이너를 실행시킨다
$ docker run -d --name db -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 --network docker-network 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)