본문 바로가기
GOORM

GOORM: Kubernetes-33

by hxunz 2021. 12. 25.
  1. Facts 
    : Docker 컨테이너 네트워크 / 가동중인 Docker 컨테이너 조작 / Docker 이미지 생성 / Dockerfile을 사용한 구성 관리에 대해서 배움

  2. Findings
    :
    Docker 컨테이너 네트워크
    Docker 컨테이너 네트워크
    docker network ls 네트워크 목록 표시
    --no-trunc : 표시할 네트워크의 상세 정보 확인
    -q,--quiet : 네트워크 ID만 확인
    -f,--filter : 필터링
    docker network connect / docker network disconnect 네트워크 연결/해제
    docker container inspect : 도커 컨테이너에 속한 네트워크 확인
    docker container attach 가동 컨테이너 연결
    docker container exec 가동 컨테이너에서 프로세스 실행 / 실행 중인 컨테이너에서만 실행
    docker container port 가동 컨테이너의 포트 전송 확인
    docker container diff 컨테이너 조작의 처분 확인

    Docker 이미지 생성
    Docker 이미지 생성
    docker container commit 컨테이너로부터 이미지 작성
    docker container export 컨테이너를 tar 파일로 출력
    docker image save 이미지 저장
    -o : 저장할 파일명 지정
    docker image load 이미지 읽어 들이기 / 불필요한 이미지 정리 시에 유리
    docker system prune 불필요한 이미지/컨테이너를 일괄 삭제

    Dockerfile
     - 베이스가 되는 이미지에 각종 미들웨어를 설치 및 설정하고 개발한 애플리케이션의 실행 모듈을 전개하기 위한 애플리케이션의 실행 기반의 모든 구성 정보를 기술
     - 인프라 구성을 기술한 파일
     - docker build : Dockerfile에 기술된 구성 정보를 바탕으로 Docker 이미지를 작성
     - 다이제스트 : Docker Hub에 업로드하면 자동으로 부여되는 식별자

 

<수업 필기>

도커 네트워크 
 - 컨테이너 간의 또는 컨테이너와 호스트 간의 연결 구성
 - 같은 네트워크 (브릿지)에 연결한 컨테이너 끼리만 통신 가능 (-> IP 주소 사용)
 - 이름으로도 통신 가능 (—link / —add-hosts / 직접 / etc/hosts 파일을 수정)

종류
 - bridge :내부 밑 외부 연결이 가능한 네트워크 (docker0) -> 추가 생성 가능
 - host : 호스트의 네트워크 스택을 공유 (IP /포트 등 공유) -> 추가 생성 불가
 - null : 네트워크 사용 하지 않음 -> 추가 생성 불가
 - macvlan :컨테이너에 별도의 mac 주소를 사용해서 네트워크를 할당하는 방식 (실제 IP 주소를 할당)
 - overlay : docker swarm 사용 시 사용

docker network create : 새로운 네트워크 생성 (브릿지만 사용)
                          rm / prune : 네트워크 삭제 (컨테이너에 연결이 안된 경우)
                          connect : 기존의 컨테이너에 네트워크를 추가 연결
                          disconnect : 컨테이너와 네트워크의 연결을 해제

docker run —network 옵션 사용 시 컨테이너를 연결할 네트워크를 직접 지정 (기본은 bridge)
                    -p 옵션으로 호스트의 포트와 컨테이너 포트를 매핑 (bridge 타입인 경우)
                            -> host 타입이건 bridge 타입에서 포트 매핑을 사용하건 호스트의 포트는 겹치면 안된다

도커 볼륨
 - 컨테이너는 별도로 저장을 하지 않음 (컨테이너 삭제 시 내부 데이터는 모두 사라진다)
 - 컨테이너에 추가적인 볼륨을 연결해서 데이터를 영구 저장
 - 호스트와 컨테이너 / 컨테이너 간의 데이터 공유

docker volume create : 볼륨을 생성 (컨테이너 생성 시 자동 생성되는 경우도 있다)
                         ls / inspect : 확인
                         rm / prune : 삭제 (prune은 컨테이너에 연결하지 않은 볼륨을 전부 삭제)

docker run -v 볼륨이름 : 컨테이너 디렉토리 : 권한    방식으로 설정

이미지 생성
docker container commit : 컨테이너를 이미지로 변환 (CMD 부분 등의 수정이 안된다)
docker container export : 컨테이너를 아카이브 파일로 변환 
docker container import : 아카이브 파일을 이미지로 변환 (파일 시스템 구조만 구성하므로 추가 설정이 불가능)

Dockerfile
 - 이미지를 만들 때 사용하는 파일 양식
 - CMD 등의 설정 값을 지정


<실습>

1. httpd:latest 이미지를 컨테이너로 만드세요.
이름 : web_bridge , 네트워크 : bridge
docker run —name web_bridge —network bridge -d httpd:latest

2. 새로운 브릿지 타입의 네트워크를 만드세요. ( IP대역은 192.168.10.0/24 로 이름은 second_br )
docker network create -d bridge —subnet 192.168.10.0/24 second_br

3. second_br 네트워크를 사용하는 web_second 컨테이너를 만드세요. (단, 호스트의 8080 포트로 접근 가능하게)
docker container run -d —network second_br -p 8080:80 —name web_second httpd:latest

4. centos:7 이미지로 web_second 컨테이너에만 네트워크 접근이 가능하게 os1 컨테이너를 만드세요.
docker container run -itd —network second_br —name os1 centos:7

5. 4번에서 만든 os1 컨테이너로 web_bridge 컨테이너에도 접근 가능하게 네트워크 설정을 변경하세요.
docker exec os1 ping 192.168.10.2
docker network connect bridge os1
docker exec os1 ping 172.17.0.2

6. os2 컨테이너를 만드는데, web_bridge 컨테이너를 IP주소 뿐만 아니라 컨테이너ID 및 이름으로도 접근할 수 있게 만드세요.
docker run -it —name os2 —link web_bridge centos:7

7. httpd:latest 이미지로 컨테이너를 만드는데 host 네트워크를 사용하도록 만드세요.
docker container run —network host -d —name web_host httpd:latest

8. 볼륨을 하나 만들어서 os_vol 이라는 컨테이너에 /mnt 디렉토리에 연결합니다. (읽기/쓰기)
docker volume create vol101
docker container run -itd -v vol101:/mnt:rw —name os_vol centos:7

9. web_vol 컨테이너에는 읽기만 가능하게 연결합니다. ( /usr/local/apache2/htdocs/ )
docker container run -d —name web_vol -v vol101:/usr/local/apache2/htdocs:ro httpd:latest

10. os_vol 컨테이너 내부에서 index.html 파일을 수정하고 curl 명령어로 web_vol 컨테이너에 접근해보세요.
docker exec -it web_vol bash
docker attach os_vol
docker inspect web_vol
curl 172.17.0.6

11. mysql 이미지와 wordpress 컨테이너를 연동
1) 이미지 다운로드 (latest로)
2) 사용해야하는 환경변수 확인
3) 컨테이너 실행 시 mysql 먼저 생성
4) 서로 다른 브릿지 네트워크 선택
5) wordpress 컨테이너 생성 시 포트 매핑 설정 
6) wordpress 컨테이너에 mysql이 사용한 브릿지 네트워크 추가 연결 (mysql 컨테이너에 이름으로 접근 가능하게 설정)

# docker container run -d -v wp-db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1234 \
> -e MYSQL_DATABASE=wp-db -e MYSQL_USER=wp-user -e MYSQL_PASSWORD=1234  --name mysql --network second_br mysql:latest

# vim wp_env
WORDPRESS_DB_USER=wp-user
WORDPRESS_DB_PASSWORD=1234
WORDPRESS_DB_NAME=wp-db
WORDPRESS_DB_HOST=mysql

# docker run -d --env-file wp_env --network bridge -p 8888:80 \
  -v wp-web:/var/www/html --name wp_web wordpress:latest

# docker network connect --link mysql second_br wp_web

12. centos:7 이미지를 컨테이너로 실행하고 수정한 후 centos:custom2 이미지로 변환
수정내용 : testuser 사용자 추가, httpd 패키지 설치, 호스트의 /etc/passwd 파일을 /mnt 디렉토리에 복사
docker cp /etc/hosts
docker cp /etc/hosts 0b86:/mnt
docker exec 0b86 ls /mnt
docker container commit 0b86 centos:custom2

13. 12번에서 작업한 컨테이너를 아카이브 파일로 변환한 후 이미지로 복원
docker container export 0b86 -0 exam.tar
docker image import exam.tar centos:custom3

14. centos:7 이미지로 etc_vol 라는 이름의 컨테이너를 실행하면서 호스트의 /etc 디렉토리를 컨테이너의 /etc 디렉토리에 읽기 전용으로 연결하세요.
docker run -v /etc:/etc:ro -it —name test_dir centos:7

15. centos:7 이미지로 네트워크로 접근할 수 없는 컨테이너를 만드세요. (private 이라는 이름으로)
docker run —network none centos:7

'GOORM' 카테고리의 다른 글

GOORM: Kubernetes-35  (0) 2021.12.25
GOORM: Kubernetes-34  (0) 2021.12.25
GOORM: Kubernetes-32  (0) 2021.12.25
GOORM: Kubernetes-31  (0) 2021.12.25
GOORM: Kubernetes-30  (0) 2021.12.06

댓글