Docker

22.05.31

가로선 2022. 5. 31. 16:32

 

   목차   

 

1. sed 명령어

2. 스크립트 작성

    - 설치 및 서비스 실행 스크립트

    - 삭제 스크립트

3. 실행중인 컨테이너를 이미지 파일로 만들기

    - Commit

    - Save & Load

    - Export & Import(CentOS, httpd)

4. PATH


 

   sed 명령어   

 - sed는 데이터를 출력해주는 명령어이다

    - i 옵션을 추가하게 되면 내용 수정이 가능해진다

    - sed의 i옵션을 사용하여 index.html파일을 직접 들어가 수정할 필요없이 밖에서 수정이 가능

        - 스크립트 짤 때 매우 유용하다

 

WEBSERVER-1을 WEBSERVER-2로 수정

    - vi편집기에서 s의 역할은 대체하는 명령어 / g는 문서 끝까지

        - :%s /WEBSERVER-1/WEBSERVER-2/g와 동일하다

 

웹 서버 이름 수정 및 사진 변경

 

 

   스크립트 작성   

 - 스크립트 : 명령어의 모음

 

문제

 

   설치 및 서비스 실행 스크립트   

 

모든 작업들 스크립트로 작성

    - Docker 설치를 위해 먼저 yum-utils를 설치해 yum-config-manger 사용가능 상태로 만듬

    - yum-config-manager을 통해 docker repository를 받아옴

    - Docker 관련 패키지 설치 진행

    - 이미지 가져오기(httpd, nginx, alpine, centos7)

    - 받아온 이미지 확인 후, 네트워크 드라이버 생성(N1, N2)

    - cat의 입력전환을 통해 index.html, index1.html 내용 작성

    - 웹서버 접속을 위해 80번 포트 개방

    - 각각의 지정된 네트워크 카드에 맞춰 컨테이너 생성(h1, n1)

    - 미리 만들어 놓은 index.html, index1.html을 각각의 컨테이너의 index.html에 밀어넣기

    - 로드밸런싱을 위해 haproxy 설치

    - sed 명령어를 통해 haproxy 구성파일 내용 수정

    - haproxy 시작 후, curl을 통해 설정내용이 확인되는지 까지 확인

 

다른점 찾기

    - diff 명령어를 통해 파일 내용의 다른점을 찾을 수 있다

 

root 사용자에게 실행권한 부여

    - 실행권한 주게 되면 sh(강제 실행) 명령어 없이 실행가능

 

네트워크 카드(N1, N2) 생성 확인

 

문제에 주어진 대로 이미지 파일 가져온 것 확인

 

이미지 파일을 사용하여 n1, h1 컨테이너 생성된 것 확인

 

curl을 통해 작성한 정보 확인

 

haproxy 구성파일 수정된 것 확인

 

웹서버 접속 확인

 

Refresh 후 웹서버 접속 확인

    - 로드밸런싱이 이뤄지고 있는 것을 확인

 

   삭제 스크립트   

 

HAProxy를 삭제하게 되면 백업파일이 남게된다

 

삭제시 생기는 경고메세지 확인

 

yum-utils을 삭제해도 가져온 Repository는 남아있는 것을 확인

 

삭제 스크립트 작성

    - HAProxy 삭제

    - Docker에서 생성한 컨테이너 삭제

    - Docker에서 생성한 bridge 네트워크 삭제

    - index.html, index1.html 삭제

    - Docker Hub에서 받아온 이미지 삭제

    - Docker 패키지 삭제 및 yum-utils 삭제

    - HAProxy 백업파일 삭제

    - 방화벽 80번 포트개방 삭제

    - Docker Repository 삭제

    - 삭제되었는지 확인

 

패키지를 삭제하여도 남아있는 파일까지 삭제한 것을 확인

 

 

   실행중인 컨테이너를 이미지 파일로 만들기   

 - 컨테이너와 이미지 파일의 구분을 더 명확히 하자!

    - 컨테이너는 이미지 파일이 실행된 것이다

    - 엄연히 컨테이너와 이미지는 다른 것

 

   Commit   

 - 가장 편하고 좋은 방법

 - 초기 설정까지 전부 가져간다

 - 테스트를 위해 h1이라는 컨테이너 미리 생성

    - httpd 이미지파일 사용 및 8080포트 사용

 

리포지토리:태그 추가 없이 commit으로 이미지 파일 생성

    - Dangle 이미지가 생성이 된다

 

리포지토리와 태그를 추가하여 commit으로 컨테이너를 이미지 파일로 생성

 

commit을 통해 생성한 이미지 파일을 통해 knlee라는 컨테이너 생성

 

httpd 이미지 파일을 통해 생성한 컨테이너의 웹 서버 접속 확인

 

commit을 통해 실행중인 컨테이너를 이미지 파일로 만들어 생성한 컨테이너의 웹 서버 접속 확인

 

   Save & Load   

 - Save를 통해 이미지 파일들을 tar파일로 생성

 - Load를 통해 이미지 파일 관리 

 

docker save의 o옵션을 통해 alpine, centos7 이미지를 image.tar파일로 생성

 

docker load -i 옵션을 통해 tar파일로 묶은 이미지를 가져온다

    - 테스트를 위해 alpine, centos7 이미지 삭제 먼저 진행

    - tar xvfz를 사용하여 해제하면 이상한 파일들이 해제 후 생성이 된다

        - 즉, load 명령어만 사용하여 해제가 가능하다

 

   Import & Export - CentOS   

 

centos7 이미지 파일을 실행시켜 c1 컨테이너 실행

    - babo.txt 파일안에 HelloWorld라는 내용 입력 및 저장

 

docker export o 옵션을 사용하여 c1 컨테이너를 tar 파일로 생성

 

tar의 tvf 옵션을 통해 유저파일(babo.txt) 유무 확인

 

export를 통해 내보낸 tar파일을 이미지 파일로 받게 된다

    - export한 tar파일을 사용하여 centos:c1 이미지 파일 생성

 

생선한 이미지파일을 실행시켜 c2 컨테이너 생성

    - import를 사용하게 되면, 유저파일은 존재하나 이미지의 초기 설정 파일이 초기화

       되기 때문에 생성이 되지 않는 것을 확인

    - import시에 초기화 된 설정 파일을 살려줘야 한다

 

change 옵션을 통해 CMD 설정

    - CMD : 이미지가 실행될 때 수행되어야 할 명령어를 입력하는 것

        - 설정파일이 초기화되었기 때문에 수행되어야할 명령어를 입력해야 정상 작동

 

centos, httpd command 확인

 

생성한 이미지를 사용하여 c3 컨테이너 생성

 

c3 컨테이너에 접속하여 유저파일 확인

    - 정상적으로 c3가 동작되는 것을 확인

 

c1 컨테이너를 test.tar로 생성 후 import를 통해 kyunam1012/centos:c1으로 이미지 파일 생성

 

생성한 이미지 파일을 사용하여 c2 컨테이너 생성

 

c2 컨테이너 접속하여 생성했던 test.txt파일 확인

 

   Import & Export - HTTPD   

 - export는 컨테이너, import는 이미지를 가져오게 된다

 

httpd 이미지 파일을 사용한 import, export

    - 8080포트로 httpd 이미지를 실행시켜 h1 컨테이너 생성

    - CentOS와 동일하게 생성한 컨테이너를 tar파일로 생성 후, import 시켜 이미지를 생성

        - 생성한 이미지 파일을 사용하여 h2 컨테이너 생성

        - Command가 없다고 오류가 나오는 것을 확인

 

docker import의 change옵션을 사용하여 CMD 설정

    - 오류없이 생성은 되었으나 Host-PC에서 웹서버 접속이 되지 않는다

 

import change 옵션을 통해 경로가 아닌 httpd 커맨드만 넣어줘 이미지 파일을 생성

    - 컨테이너 생성까지 가능해지나 컨테이너가 Exited 상태가 되어 마찬가지로 웹 서버 접속 불가

 

컨테이너를 생성할 때 PATH를 추가해줘야 정상적으로 컨테이너 생성이 된다

    - 환경변수(Path 경로)가 필요하다

    - httpd-foreground 커맨드가 어디서 실행해야할지 몰라 웹 서버 접속이 불가한 것이었다

 

패스 경로 설정 전 컨테이너 세부 정보 확인

    - 정상적으로 동작하지 않는 컨테이너들의 세부정보에서 Path경로가 빠져있는 것을 볼 수 있다

 

패스 경로 추가

    - 정상적으로 동작하는 컨테이너들의 세부정보에서는 Path경로가 들어가져 있는 것을 확인

    - docker run의 e 옵션을 통해 직접 Path 경로를 지정해주어 오류 해결

 

Import, Export를 사용하여 생성한 이미지 파일로 만든 컨테이너의 웹 서버에 정상적으로 접속되는 것을 확인

 

 

   PATH   

 - 특정한 파일이 있는 위치를 나타내는 주소, 파일에 접근하기 위한 경로

 

.bash_profile 파일에서 PATH 경로 확인 가능

    - 스크립트 파일을 실행하려는데 스크립트 파일의 위치가 /test/test1.sh라 가정했을 때

       sh test1.sh로 실행하려 하면 경로가 틀려 실행이 되지 않는다

    - bash_profile에서 :/test를 추가하여 PATH 경로를 미리 지정해 놓는다

    - test 디렉터리에 들어가지 않아도 test 디렉터리 안의 스크립트나 파일 등을 열 수 있게 된다

 

.bash_profile의 수정 값 바로 적용

    - source : 스크립트 파일을 수정한 후에 수정된 값을 바로 적용하기 위해 사용

 

설정 전에는 경로를 찾지 못하는 것을 확인

 

test 디렉터리 안에 생성한 test1.sh가 바로 실행되는 것을 확인

 

어느 위치에서든 cmd가 바로 실행되는 이유

    - 윈도우 환경 변수에 cmd의 경로가 지정되어 해당 위치로 들어가지 않고도 cmd사용이 가능

'Docker' 카테고리의 다른 글

22.06.02  (0) 2022.06.02
22.06.01  (0) 2022.06.01
22.05.30  (0) 2022.05.30
22.05.27  (0) 2022.05.27
22.05.26  (0) 2022.05.26