1. image 생성 : docker build . -t <image name>

  2. image 확인 : doocker images

  3. container 실행 : docker run <옵션> <이름>
  4. container 실행 : docker run <옵션> --name=<continer이름> <유명 이미지>:<tag>
    • 이미 dockerhub에 올라와있는 유명한 image 들은 image를 빌드하지 않고 container를 다음과 같이 실행시키면 자동으로 image를 받아와 container를 형성함

docker container network

  1. docker는 container에 내부 IP를 할당하는데, 종료시 변경될 수 있음.

  2. container의 내부 IP는 container 끼리 통신 가능하고 외부망과 연결되려면 설정이 필요.

  3. 요소 3가지 (ifconfig로 확인)

    1. etho0 : 외부와 연결할 때 사용하는 IP가 할당된 Host network interface

    2. docker0 : Docker가 설치되면 host에 기본으로 생성되는 bridge
      • host의 network(etho0)와 conainer의 network(veth)를 연결해줌
      • 1개의 bridge 안에서 다수의 container와 연결해 줄 수 있음
      • 다양한 bridge를 생성하는 것도 가능
    3. veth : container 내부 IP를 외부와 연결해 주는 가상 network interface
      • container와 동시 생성
      • veth와 etho0가 연걸됨으로써 외부와 통신이 가능해짐
      • 둘의 연결을 bridge인 2번의 docker0가 담당

          docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
                  inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
                  inet6 fe80::42:6eff:fe85:4458  prefixlen 64  scopeid 0x20<link>
                  ether 02:42:6e:85:44:58  txqueuelen 0  (Ethernet)
                  RX packets 205  bytes 11588 (11.5 KB)
                  RX errors 0  dropped 0  overruns 0  frame 0
                  TX packets 39  bytes 3110 (3.1 KB)
                  TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        

container network 관련 command

  1. 목록 확인 : docker network ls

  2. 네트워크 상세 : docker inspect <network name>
    • subnet 확인 : “Subnet”: “172.17.0.0/16”
  3. 새로운 bridge network 생성 : docker network create <option> <network name>
    • docker network create --driver bridge new_bridge
  4. network 삭제 : docker network rm <network name>
    • docker network rm new_bridge
  5. 특정 network로 container 생성 : docker run -d -it --name=ubuntu2 --net new_bridge ubuntu

  6. 특정 container로 접속 : docker exec -it <container_id_or_name> /bin/bash
  7. container에 새로운 network 적용 : docker network connect <network name> <container name>
    • docker network connect new_bridge ubuntu1
  8. container에 network 삭제 : docker network disconnect <network name> <container name>
    • docker network disconnect bridge ubuntu1

host network

  1. host의 network 환경을 그대로 사용할 수 있음
  2. 새로운 내부 IP를 할당 받을 필요 없음
  3. --net host를 사용
  4. host 내부에서 application을 실행한 것과 같음
  5. 별도의 port forwarding 없이 localhost를 통해 접속할 수 있음

cf

  1. --net 옵션에 특정 container의 이름을 넣어주면, 해당 container의 network를 공유