컨테이너는 가상 머신과 마찬가지로 가상 IP를 할당받는다. 대역대는 172.17.0.0/24이고 순차적으로 할당을 받는다.
컨테이너를 생성하고 ifconfig 명령어를 사용하면 할당받은 IP를 확인할 수 있다.
[root@localhost ~]# docker run -it --name network_test ubuntu:14.04
root@166ba94fe653:/# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:02
inet addr:172.17.0.2 Bcast:172.17.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:516 (516.0 B) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
위 IP는 가상 IP이므로 따로 설정을 하지 않으면 외부에서 접근할 수 없다. 외부에 노출하기 위해서는
eth0의 IP와포트를 호스트OS의 IP와 포트와 바인딩해야 한다.
# docker run -it -p $HOST_OS_PORT:$CONTAINER_PORT
[root@localhost ~]# docker run -it --name web_server -p 80:80 ubuntu:14.04
#호스트 OS와 특정IP의 포트와 연결한 경우 및 여러 포트를 바인한 경우
[root@localhost ~]# docker run -it --name ftp_server -p 3306:3306 -p 192.168.0.10:7777:21 ubuntu:14.04
이제 우분투에 아파치 웹서버를 설치해보자
[root@localhost ~]# docker run -it --name mywebserver -p 192.168.23.143:80:80 ubuntu:14.04
root@fdedf23ffee3:/# apt-get update
root@fdedf23ffee3:/# apt-get -y install apache2
root@fdedf23ffee3:/# service apache2 start
한 컨테이너에 프로세스 하나만 실행하는 것이 도커의 철학이다.
이번에는 DB와 워드프레스 웹 서버를 연동해 워드프레스 기반 블로그 서비스를 만들어보자.
이번엔 -d 옵션과 -e옵션을 사용한다.
-d 옵션은 컨테이너가 detached 모드에서 실행되며, 실행 결과로 컨테이너 ID만을 출력한다.
-e 옵션은 Docker 컨테이너의 환경변수를 설정한다.
[root@localhost ~]# docker run -d \
> --name wordpressdb \
> -e MYSQL_ROOT_PASSWORD=password \
> -e MYSQL_DATABASE=wordpress \
> -e MYSQL_USER=wordpress \
> -e MYSQL_PASSWORD=wordpress \
> mysql:5.7
[root@localhost ~]# docker run -d \
> --name wordpress \
> -e WORDPRESS_DB_USER=wordpress \
> -e WORDPRESS_DB_PASSWORD=wordpress \
> --link wordpressdb:mysql \
> -p 80 \
> wordpress
위 명령어에서는 -p 옵션으로 포트 바인딩을 따로 지정해서 해주지 않았다.
이러면 호스트 OS의 아무포트와 자동으로 연결되기 때문에 docker ps명령어로 확인해주거나 docker port $name으로 확인할 수 있다.
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
44191c04452a wordpress "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:49153->80/tcp, :::49153->80/tcp wordpress
2470fb92a3ba mysql:5.7 "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 3306/tcp, 33060/tcp wordpressdb
[root@localhost ~]# docker port wordpress
80/tcp -> 0.0.0.0:49153
80/tcp -> :::49153
'Cloud > Doker' 카테고리의 다른 글
[docker] docker 볼륨 사용법 3가지 (0) | 2021.07.12 |
---|---|
[docker] docker -it 와 -d 옵션의 차이점 (0) | 2021.06.23 |
[docker] Docker 시작 (0) | 2021.06.21 |