public:computer:docker

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revisionBoth sides next revision
public:computer:docker [2021/08/07 17:02] alexpublic:computer:docker [2021/08/08 20:59] alex
Line 179: Line 179:
   * https://hub.docker.com   * https://hub.docker.com
 === 이미지 다운로드(docker image pull) === === 이미지 다운로드(docker image pull) ===
 +> docker hub에서 이미지 다운로드
 <grid> <grid>
 <col sm="8"> <col sm="8">
Line 195: Line 196:
 </col> </col>
 </grid> </grid>
 +
 === 이미지 목록 표시(docker image ls) === === 이미지 목록 표시(docker image ls) ===
 +> 취득한 이미지의 목록 표시
 <grid> <grid>
 <col sm="8"> <col sm="8">
Line 234: Line 237:
  
 === 이미지 상세 정보 확인(docker image inspect) === === 이미지 상세 정보 확인(docker image inspect) ===
 +> 이미지 상세 정보 확인
 <grid> <grid>
 <col sm="8"> <col sm="8">
Line 251: Line 255:
  
 === 이미지 태그 설정(docker image tag) === === 이미지 태그 설정(docker image tag) ===
 +> 이미지에 표식이 되는 태그를 붙임
 <grid> <grid>
 <col sm="8"> <col sm="8">
Line 265: Line 270:
 </col> </col>
 </grid> </grid>
 +
 === 이미지 검색(docker search) === === 이미지 검색(docker search) ===
 +> docker hub에 공개되어 있는 이미지 검색
 <grid> <grid>
 <col sm="8"> <col sm="8">
Line 294: Line 301:
  
 === 이미지 삭제(docker image rm) === === 이미지 삭제(docker image rm) ===
 +> 작성한 이미지 삭제
 <grid> <grid>
 <col sm="8"> <col sm="8">
Line 331: Line 339:
  
 === Docker Hub에 로그인(docker login) === === Docker Hub에 로그인(docker login) ===
 +> docker 리포지토리에 업로드하기 위해 docker에 로그인
 <grid> <grid>
 <col sm="8"> <col sm="8">
Line 354: Line 363:
  
 === 이미지 업로드(docker image push) === === 이미지 업로드(docker image push) ===
 +> docker hub에 이미지 업로드
 <grid> <grid>
 <col sm="8"> <col sm="8">
Line 371: Line 381:
  
 === Docker Hub에서 로그아웃(docker logout) === === Docker Hub에서 로그아웃(docker logout) ===
 +> docker hub에서 로그아웃
 <grid> <grid>
 <col sm="8"> <col sm="8">
Line 387: Line 398:
 ==== 컨테이너 생성/시작/정지 ==== ==== 컨테이너 생성/시작/정지 ====
 === Docker 컨테이너의 라이프 사이클 === === Docker 컨테이너의 라이프 사이클 ===
 +  * 컨테이너 생성; docker container create
 +  * 컨테이너 생성 및 시작; docker container run
 +  * 컨테이너 시작; docker container start
 +  * 컨테이너 정지; docker container stop
 +  * 컨테이너 삭제; docker container rm
  
 === 컨테이너 생성 및 시작(docker container run) === === 컨테이너 생성 및 시작(docker container run) ===
 +> 컨테이너의 생성 및 시작
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker container run" no-body="true">
 +<panel-body>
 +<alert type="info">
 +docker container run [옵션] 이미지명[:태그명] [인수]
 +</alert>
 +^  지정할 수 있는 주요 옵션  ^^
 +^ 옵션  ^ 설명  ^
 +| --attach, -a  | 표준 입력(STDIN), 표준 출력(STDOUT), 표준 오류 출력(STDERR)에 어태치한다.  |
 +| --cidfile  | 컨테이너 ID를 파일로 출력한다.  |
 +| --detach, -d  | 컨테이너를 생성하고 백그라운드에서 실행한다.  |
 +| --interactive, -i  | 컨테이너의 표준 입력을 연다.  |
 +| --try, -t  | 단말기 디바이스를 사용한다.  |
 +</panel-body>
 +<cli prompt="$ " comment="  # ">
 +$ docker container run -it --name "test1" centos /bin/cal
 +  # docker container run; 컨테이너를 생성 및 실행
 +  # -it; 콘솔에 결과를 출력하는 옵션
 +  # --name "test1"; 컨테이너 명
 +  # centos; 이미지명
 +  # /bin/cal; 컨테이너에서 실행할 명령
 +
 +$ docker container run -it --name "test2" centos /bin/bash  # bash 실행
 +</cli>
 +</panel>
 +</col>
 +</grid>
  
 === 컨테이너의 백그라운드 실행(docker container run) === === 컨테이너의 백그라운드 실행(docker container run) ===
 +> docker를 이용하는 경우의 대부분은 컨테이너에 서버 기능을 가지게 해서 실행하는 경우, 대화식이 아닌 백그라운드에서 실행
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker container run" no-body="true">
 +<panel-body>
 +<alert type="info">docker container run [실행 옵션] 이미지명[:태그명] [인수]</alert>
 +
 +^  지정할 수 있는 주요 옵션  ^^
 +^ 옵션  ^ 설명  ^
 +| --detach, -d  | 백그라운드에서 실행  |
 +| --user, -u  | 사용자명을 지정  |
 +| --restart=[no%%|%%on-failure%%|%%on-failure:횟수n%%|%%always%%|%%unless-stopped]  | 명령의 실행 결과에 따라 재시작을 하는 옵션  |
 +| --rm  | 명령 실행 완료 후에 컨테이너를 자동으로 삭제  |
 +
 +</panel-body>
 +<cli prompt="$ " comment="  # ">
 +$ docker container run -d centos /bin/ping localhost
 +  # docker container run; 컨테이너를 생성 및 실행
 +  # -d; 백그라운드에서 실행하는 옵션
 +  # centos; 이미지명
 +  # /bin/ping localhost; 컨테이너에서 실행할 명령
 +fbcdab0e9417.....
 +$ docker container logs -t fbcdab0e9417  # 컨테이너의 로그 확인
 +</cli>
 +^  restart 옵션  ^^
 +^ 설정값  ^ 설명  ^
 +| no  | 재시작하지 않는다.  |
 +| on-failure  | 종료 스테이터스가 0이 아닐 때 재시작한다.  |
 +| on-failure:횟수n  | 종료 스테이터스가 0이 아닐 때 n번 재시작한다.  |
 +| always  | 항상 재시작한다.  |
 +| unless-stopped  | 최근 컨테이너가 정지 상태가 아니라면 항상 재시작한다.  |
 +
 +<cli prompt="$ " comment="#  ">
 +$ docker container run -it --restart=always centos /bin/bash  # 컨테이너를 항상 재시작
 +</cli>
 +</panel>
 +</col>
 +</grid>
  
 === 컨테이너의 네트워크 설정(docker container run) === === 컨테이너의 네트워크 설정(docker container run) ===
 +> 컨테이너의 네트워크를 설정
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker container run" no-body="true">
 +<panel-body>
 +<alert type="info">docker container run [네트워크 옵션]: 이미지명[:태그명] [인수]</alert>
 +^  지정할 수 있는 옵션  ^^
 +^ 옵션  ^ 설명  ^
 +| --add-host=[호스트명:IP 주소]  | 컨테이너의 /etc/hosts에 호스트명과 IP 주소를 정의  |
 +| --dns=[IP 주소]  | 컨테이너용 DNS 서버의 IP 주소 지정  |
 +| --expose  | 지정한 범위의 포트 번호를 할당  |
 +| --mac-address=[MAC 주소]  | 컨테이너의 MAC 주소를 지정  |
 +| --net=[bridge%%|%%none%%|%%container:<name%%|%%id>%%|%%host%%|%%NETWORK]  | 컨테이너의 네트워크를 지정  |
 +| --hostname, -h  | 컨테이너 자신의 호스트명을 지정  |
 +| --publish, -p[호스트의 포트 번호]:[컨테이너의 포트 번호]  | 호스트와 컨테이너의 포트 매핑  |
 +| --publish-all, -p  | 호스트의 임의의 포트를 컨테이너에 할당  |
 +</panel-body>
 +<cli prompt="$ " comment="# ">
 +$ docker container run -d --dns 192.168.1.1 nginx  # 컨테이너의 DNS 서버 지정
 +$ docker container run -d --mac-address="92:d0:c6:0a:29:33" centos  # MAC 주소 지정
 +2a4f6cf4da30a...
 +$ docker container inspect --format="{{ .Config.MacAddress }}" 2a5f
 +92:d0:c6:0a:29:33
 +$ docker container run -it --add-host test.com:192.168.1.1 centos  # 호스트명과 IP 주소 정의
 +$ docker container run -it --hostname www.test.com --add-host node1.test.com:6 192.168.1.1 centos  # 호스트명 설정
 +</cli>
 +
 +^  --net 옵션의 지정  ^^
 +^ 설정값  ^ 설명  ^
 +| bridge  | 브리지 연결(기본값)을 사용한다.  |
 +| none  | 네트워크에 연결하지 않는다.  |
 +| container:[name%%|%%id]  | 다른 컨테이너의 네트워크를 사용한다.  |
 +| host  | 컨테이너가 호스트 OS의 네트워크를 사용한다.  |
 +| NETWORK  | 사용자 정의 네트워크를 사용한다.  |
 +
 +  * 사용자 정의 네트워크 작성
 +<cli prompt="$ " comment="# ">
 +$ docker network create -d bridge webap-net
 +$ docker container run --net=webap-net -it centos
 +</cli>
 +</panel>
 +</col>
 +</grid>
  
 === 자원을 지정하여 컨테이너 생성 및 실행(docker container run) === === 자원을 지정하여 컨테이너 생성 및 실행(docker container run) ===
 +> CPU나 메모리와 같은 자원을 지정하여 컨테이너를 생성 및 실행
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker container run" no-body="true">
 +<panel-body>
 +<alert type="info">docker container run [자원 옵션] 이미지명[:태그명] [인수]</alert>
 +
 +^  지정할 수 있는 주요 옵션  ^^
 +| --cpu-shares, -c  | CPU의 사용 배분(비율)  |
 +| --memory, -m  | 사용할 메모리를 제한하여 실행 \\ (단위는 b, k, m, g 중 하나)  |
 +| --volume=[호스트의 디렉토리]:[컨테이너의 디렉토리], -v  | 호스트와 컨테이너의 디렉토리를 공유 
 +</panel-body>
 +
 +<cli prompt="$ " comment="# ">
 +$ docker container run --cpu-shares=512 --memory=1g centos  # CPU 시간의 상대 비율과 메모리 사용량을 지정
 +$ docker container run -v /Users/alex/webap:/usr/share/nginx/html nginx  # 디렉토리 공유
 +</cli>
 +</panel>
 +</col>
 +</grid>
  
 === 컨테이너를 생성 및 시작하는 환경을 지정(docker container run) === === 컨테이너를 생성 및 시작하는 환경을 지정(docker container run) ===
 +> 컨테이너의 환경변수나 컨테이너 안의 작업 디렉토리 등을 지정하여 컨테이너를 생성/실행
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker container run" no-body="true">
 +<panel-body>
 +<alert type="info">docker container run [환경설정 옵션] 이미지명[:태그명] [인수]</alert>
 +
 +^  지정할 수 있는 주요 옵션  ^^
 +^ 옵션  ^ 설명  ^
 +| --env=[환경변수], -e  | 환경변수를 설정한다.  |
 +| --evn-file=[파일명]  | 환경변수를 파일로부터 설정한다.  |
 +| --read-only=[true%%|%%false]  | 컨테이너의 파일 시스템을 읽기 전용으로 만든다.  |
 +| --workdir=[패스], -w  | 컨테이너의 작업 디렉토리를 지정한다.  |
 +| -u, --user=[사용자명]  | 사용자명 또는 UID를 지정한다.  |
 +</panel-body>
 +<cli prompt="$ " comment="# ">
 +$ docker container run -it -e foo=bar centos /bin/bash  # 환경변수 foo 설정
 +
 +$ cat env_list  # env_list 파일 생성
 +hoge=fuga
 +foo=bar
 +
 +$ docker container run -it --env-file=env_list centos /bin/bash  # evn_list 파일로 환경변수의 일괄 설정
 +
 +$ docker container run -it -w=/tensorflow centos /bin/bash  # 작업 디렉토리 설정
 +</cli>
 +</panel>
 +</col>
 +</grid>
  
 === 가동 컨테이너 목록 표시(docker container ls) === === 가동 컨테이너 목록 표시(docker container ls) ===
 +> docker 상에서 작동하는 컨테이너의 가동상태를 확인
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker container ls" no-body="true">
 +<panel-body>
 +<alert type="info">docker container ls [옵션]</alert>
 +
 +^  지정할 수 있는 주요 옵션  ^^
 +^ 옵션  ^ 설명  ^
 +| --all, -a  | 실행 중/정지 중인 것도 포함하여 모든 컨테이너를 표시  |
 +| --filter, -f  | 표시할 컨테이너의 필터링  |
 +| --format  | 표시 포맷을 지정  |
 +| --last, -n  | 마지막으로 실행된 n건의 컨테이너만 표시  |
 +| --latest, -l  | 마지막으로 실행된 컨테이너만 표시  |
 +| --no-trunc  | 정보를 생략하지 않고 표시  |
 +| --quiet, -q  | 컨테이너 ID만 표시  |
 +| --size, -s  | 파일 크기 표시  |
 +</panel-body>
 +<cli prompt="$ " comment="# ">
 +$ docker container ls  # 컨테이너 목록 표시
 +$ docker container ls -a -f name=test1  # 컨테이너 목록의 필터링
 +$ docker container ls -a -f exited=0
 +</cli>
 +
 +^  docker container ls 명령 결과  ^
 +^ 항목  ^ 설명  ^
 +| CONTAINDER ID  | 컨테이너 ID  |
 +| IMAGE  | 컨테이너의 바탕이 된 이미지  |
 +| COMMAND  | 컨테이너 안에서 실행되고 있는 명령  |
 +| CREATED  | 컨테이너 작성 후 경과 시간  |
 +| STATUS  | 컨테이너의 상태 (restarting %%|%% running  %%|%% paused %%|%% exited)  |
 +| PORTS  | 할당된 포트  |
 +| NAMES  | 컨테이너 이름  |
 +
 +^  --formate 옵션; 출력 형식의 지정  ^^
 +^ 플레이스 홀더  ^ 설명  ^
 +| .ID  | 컨테이너 ID  |
 +| .Image  | 이미지 ID  |
 +| .Command  | 실행 명령  |
 +| .CreatedAt  | 컨테이너가 작성된 시간  |
 +| .RunningFor  | 컨테이너의 가동 시간  |
 +| .Ports  | 공개 포트  |
 +| .Status  | 컨테이너 상태  |
 +| .Size  | 컨테이너 디스크 크기  |
 +| .Names  | 컨테이너명  |
 +| .Mounts  | 볼륨 마운트  |
 +| .Networks  | 네트워크명  |
 +
 +<cli prompt="$ " comment="# ">
 +$ docker container ls -a --format "{{.Names}}: {{.Status}}"  # 컨테이너 목록의 출력 형식 지정
 +$ docker container ls -a --format "table {{.Names}}\t{{.Status}}\t {{.Mounts}}"  # 컨테이너 목록을 표 형식으로 출력
 +</cli>
 +
 +
 +</panel>
 +</col>
 +</grid>
 +
 +
  
 === 컨테이너 가동 확인(docker container stats) === === 컨테이너 가동 확인(docker container stats) ===
 +> docker 상에서 작동하는 컨테이너 가동 상태를 확인
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker container stats" no-body="true">
 +<panel-body>
 +<alert type="info">docker container stats [컨테이너 식별자]</alert>
 +</panel-body>
 +
 +<cli prompt="$ " comment="# ">
 +$ docker container stats webserver  # 컨테이너 가동 확인
 +</cli>
 +
 +^  docker container stats 명령 결과  ^^
 +^ 항목  ^ 설명  ^
 +| CONTAINER ID  | 컨테이너 식별자  |
 +| NAME  | 컨테이너명  |
 +| CPU %  | CPU 사용률  |
 +| MEM USAGE/LIMIT  | 메모리 사용량/컨테이너에서 사용할 수 있는 메모리 제한  |
 +| MEM %  | 메모리 사용률  |
 +| NET I/O  | 네트워크 I/O  |
 +| BLOCK I/O  | 블록 I/O  |
 +| PIDS  | PID(Windows 컨테이너 제외)  |
 +  * Ctrl + C; 명령 종료
 +
 +<cli prompt="$ " comment="# ">
 +$ docker container top webserver  # 프로세스 확인
 +</cli>
 +
 +</panel>
 +</col>
 +</grid>
  
 === 컨테이너 시작(docker container start) === === 컨테이너 시작(docker container start) ===
 +> 정지하고 있는 컨테이너 시작 
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker container start" no-body="true">
 +<panel-body>
 +<alert type="info">docker container start [옵션] <컨테이너 식별자> [컨테이너 식별자]</alert>
 +
 +^  지정할 수 있는 주요 옵션  ^^
 +^ 옵션  ^ 설명  ^
 +| --attach, -a  | 표준 출력, 표준 오류 출력을 연다.  |
 +| --interactive, -i  | 컨테이너의 표준 입력을 연다.  |
 +
 +
 +</panel-body>
 +<cli prompt="$ " comment="# ">
 +$ docker container start dbb4bbe0f470  # 컨테이너 ID가 dbb4bbe0f470인 컨테이너 시작
 +</cli>
 +</panel>
 +</col>
 +</grid>
  
 === 컨테이너 정지(docker container stop) === === 컨테이너 정지(docker container stop) ===
 +> 실행 중인 컨테이너를 정지
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker container stop" no-body="true">
 +<panel-body>
 +<alert type="info">docker container stop [옵션] <컨테이너 식별자> [컨테이너 식별자]</alert>
 +^  지정할 수 있는 주요 옵션  ^^
 +^ 옵션  ^ 설명  ^
 +| --time, -t  | 컨테이너의 정지 시간을 지정(기본값은 10초)  |
 +
 +</panel-body>
 +<cli prompt="$ " comment="# ">
 +$ docker container stop -t 2 dbb4bbe0f470
 +</cli>
 +
 +  * docker container kill; 강제적으로 컨테이너를 정지시킬 때
 +</panel>
 +</col>
 +</grid>
  
 === 컨테이너 재시작(docker container restart) === === 컨테이너 재시작(docker container restart) ===
 +> 컨테이너를 재시작
 +<grid>
 +<col sm="8">
 +<panel type="default" title="" no-body="true">
 +<panel-body>
 +<alert type="info">docker container restart [옵션] <컨테이너 식별자> [컨테이너 식별자]</alert>
 +
 +^  지정할 수 있는 주요 옵션  ^^
 +^ 옵션  ^ 설명  ^
 +| --time, -t  | 컨테이너의 재시작 시간을 지정(기본값은 10초)  |
 +
 +</panel-body>
 +<cli prompt="$ " comment="# ">
 +$ docker container restart -t 2 webserver
 +</cli>
 +
 +  * docker container run --restart; 컨테이너 안에서 실행하는 명령의 종료 스테이터스(정상 종료되었는지 아닌지)에 따라 컨테이너를 자동으로 재시작하고 싶은 경우.
 +</panel>
 +</col>
 +</grid>
  
 === 컨테이너 삭제(docker container rm) === === 컨테이너 삭제(docker container rm) ===
 +> 정지하고 있는 컨테이너를 삭제
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker container rm" no-body="true">
 +<panel-body>
 +<alert type="info">docker container rm [옵션] <컨테이너 식별자> [컨테이너 식별자]</alert>
 +
 +^  지정할 수 있는 주요 옵션  ^^
 +^ 옵션  ^ 설명  ^
 +| --force, -f  | 실행 중인 컨테이너를 강제로 삭제  |
 +| --volumes, -v  | 할당한 볼륨을 삭제  |
 +
 +</panel-body>
 +<cli prompt="$ " comment="# ">
 +$ docker container rm dbb4bbe0f470  # 컨테이너 삭제
 +</cli>
 +</panel>
 +</col>
 +</grid>
  
 === 컨테이너 중단/재개(docker container pause/docker container unpause) === === 컨테이너 중단/재개(docker container pause/docker container unpause) ===
 +> 실행중인 컨테이너에서 작동 중인 프로세스를 모두 중단
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker container pause/docker container unpause" no-body="true">
 +<panel-body>
 +<alert type="info">docker container pause <컨테이너 식별자></alert>
 +</panel-body>
 +<cli prompt="$ " comment="# ">
 +$ docker container pause webserver  # 컨테이너 중단
 +$ docker container unpause wbserver  # 중단 컨테이너 재개
 +</cli>
 +</panel>
 +</col>
 +</grid>
 +
  
  
Line 417: Line 775:
  
 ==== 컨테이너 네트워크 ==== ==== 컨테이너 네트워크 ====
 +  * docker 컨테이너 끼리 통신을 할 때는 docker 네트워크를 통해 수행
 +
 +
 === 네트워크 목록 표시(docker network ls) === === 네트워크 목록 표시(docker network ls) ===
 +> docker 네트워크의 목록 확인
 +<grid>
 +<col sm="8">
 +<panel type="default" title="" no-body="true">
 +<panel-body>
 +<alert type="info">docker network ls [옵션]</alert>
 +
 +^  지정할 수 있는 주요 옵션  ^^
 +^ 옵션  ^ 설명  ^
 +| -f, --filter=[]  | 출력을 필터링한다.  |
 +| --no-trunc  | 상세 정보를 출력한다.  |
 +| -q, --quiet  | 네트워크 ID만 표시한다.  |
 +
 +</panel-body>
 +<cli prompt="$ " comment="# ">
 +$ docker network ls
 +</cli>
 +
 +^  필터링에서 이용할 수 있는 키  ^^
 +^ 값  ^ 설명  ^
 +| driver  | 드라이버 지정  |
 +| id  | 네트워크 ID  |
 +| label  | 네트워크에 설정된 라벨(label=<key> 또는 LAbel=<key>=<value>로 지정한다)  |
 +| name  | 네트워크명  |
 +| scope  | 네트워크의 스코프(swarm/global/local)  |
 +| type  | 네트워크의 타입(사용자 정의 네트워크 custom/정의 완료 네트워크 builtin)  |
 +
 +<cli prompt="$ " comment="# ">
 +$ docker network ls -q --filter driver=bridge  # 네트워크 목록 표시의 필터링
 +</cli>
 +
 +</panel>
 +</col>
 +</grid>
 +
 +  * 오버레이 네트워크(overlay network); 물리 네트워크 상에서 소프트웨어적으로 에뮬레이트한 네트워크. 물리 네트워크를 덮듯이 가상 네트워크가 구성된다는 점에서 가상 네트워크라라고도 함. 물리 네트워크의 구조가 은폐되어 그 아래에 있는 물리 계층의 형태나 제어 방식 등을 의식하지 않고 이용할 수 있다는 것이 특징. 예를 들어 여러 개의 호스트에 걸친 네트워크를 구성할 때 사용. 소프트웨어로 구성된 네트워크이므로 물리 작업을 수반하지 않고 자유롭게 구성을 변경할 수 있다는 장점.
  
 === 네트워크 작성(docker network create) === === 네트워크 작성(docker network create) ===
 +> 새로운 네트워크 작성
 +<grid>
 +<col sm="8">
 +<panel type="default" title="" no-body="true">
 +<panel-body>
 +<alert type="info">docker network create [옵션] 네트워크</alert>
 +
 +^  지정할 수 있는 주요 옵션  ^^
 +^ 옵션  ^ 설명  ^
 +| --driver, -d  | 네트워크 브리지 또는 오버레이(기본값은 bridge)  |
 +| --ip-range  | 컨테이너에 할당하는 IP 주소의 범위를 지정  |
 +| --subnet  | 서브넷을 CIDR 형식으로 지정  |
 +| --ipv6  | IPv6 네트워크를 유효화할지 말지(true/false)  |
 +| -label  | 네트워크에 설정하는 라벨  |
 +
 +</panel-body>
 +<cli prompt="$ " comment="# ">
 +$ docker network create --driver=bridge web-network  # web-network라는 이름의 브리지 네트워크 작성
 +# docker network ls --filter driver=bridge  # 작성한 네트워크 확인, filter=bridge
 +</cli>
 +
 +</panel>
 +</col>
 +</grid>
  
 === 네트워크 연결(docker network connect/docker network disconnect) === === 네트워크 연결(docker network connect/docker network disconnect) ===
 +> docker 컨테이너를 docker 네트워크에 연결/연결 해제 명령
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker network connect/docker network disconnet" no-body="true">
 +<panel-body>
 +<alert type="info">docker network connect [옵션] 네트워크 컨테이너</alert>
 +
 +^  지정할 수 있는 주요 옵션  ^^
 +^ 옵션  ^ 설명  ^
 +| --ip  | IPv4 주소  |
 +| --ip6  | IPv6 주소  |
 +| --alias  | 앨리어스명  |
 +| --link  | 다른 컨테이너에 대한 링크  |
 +
 +</panel-body>
 +
 +<cli prompt="$ " comment="# ">
 +$ docker network connect web-network webfront  # 네트워크에 대한 연결
 +$ docker container inspect webfront  # 컨테이너 네트워크 확인
 +$ docker container run -itd --name=webp --net=web-network nginx  # 네트워크를 지정한 컨테이너 시작
 +$ docker network disconnet web-network webfront  # 네트워크에 대한 연결 해제 
 +</cli>
 +
 +</panel>
 +</col>
 +</grid>
  
 === 네트워크 상세 정보 확인(docker network inspect) === === 네트워크 상세 정보 확인(docker network inspect) ===
 +> 네트워크 상세 정보를 확인
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker network inspect" no-body="true">
 +<panel-body>
 +<alert type="info">docker network inspect [옵션] 네트워크</alert>
 +
 +</panel-body>
 +<cli prompt="$ " comment="# ">
 +$ docker network inspect web-network  # 네트워크 상세 정보 표시
 +</cli>
 +
 +</panel>
 +</col>
 +</grid>
  
 === 네트워크 삭제(docker network rm) === === 네트워크 삭제(docker network rm) ===
 +> docker 네트워크 삭제
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker network rm" no-body="true">
 +<panel-body>
 +<alert type="info">docker network rm [옵션] 네트워크</alert>
 +
 +</panel-body>
 +<cli prompt="$ " comment="# ">
 +$ docker network rm web-network
 +</cli>
 +
 +</panel>
 +</col>
 +</grid>
  
  
Line 432: Line 909:
  
 ==== 가동중인 컨테이너 조작 ==== ==== 가동중인 컨테이너 조작 ====
 +> 실제 환경에서 운용할 때 이미 가동 중인 컨테이너의 상태를 확인하거나 임의의 프로세스를 실행시킬 때 하는 조작 
 +
 +
 === 가동 컨테이너 연결(docker container attach) === === 가동 컨테이너 연결(docker container attach) ===
 +> 가동 중인 컨테이너에 연결할 때. 연결한 컨테이너를 종료하려면 Ctrl+C, 컨테이너를 시작한 채로 컨테이너 안에서 움직이는 프로세스만 종료하려면 Ctrl+P, Ctrl+Q 입력.
 +
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker container attach" no-body="true">
 +
 +<cli prompt="$ " comment="# ">
 +$ docker container attach sample  # 컨테이너에 연결 
 +</cli>
 +
 +</panel>
 +</col>
 +</grid>
 +
 +
  
 === 가동 컨테이너에서 프로세스 실행(docker container exec) === === 가동 컨테이너에서 프로세스 실행(docker container exec) ===
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker container exec" no-body="true">
 +<panel-body>
 +<alert type="info">docker container exec [옵션] <컨테이너 식별자> <실행할 명령> [인수]</alert>
 +
 +^  지정할 수 있는 주요 옵션  ^^
 +^ 옵션  ^ 설명  ^
 +| --detach, -d  | 명령을 백그라운드에서 실행한다.  |
 +| --interactive, -i  | 컨테이너의 표준 입력을 연다.  |
 +| --tty, -t  | tty(단말 디바이스)를 사용한다.  |
 +| --user, -u  | 사용자명을 지정한다.  |
 +
 +</panel-body>
 +
 +<cli prompt="$ " comment="# ">
 +$ docker container exec -it webserver /bin/bash  # 컨테이너에서 bash 실행
 +$ docker container exec -it webserver /bin/echo "Hello world"  # 컨테이너에서 echo 실행
 +</cli>
 +
 +</panel>
 +</col>
 +</grid>
 +
 +
  
 === 가동 컨테이너의 프로세스 확인(docker container top) === === 가동 컨테이너의 프로세스 확인(docker container top) ===
 +> 가동 중인 컨테이너에서 실행되고 있는 프로세스 확인
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker container top" no-body="true">
 +
 +<cli prompt="$ " comment="# ">
 +$ docker container top webserver  # 프로세스 확인 
 +</cli>
 +
 +</panel>
 +</col>
 +</grid>
 +
  
 === 가동 컨테이너의 포트 전송 확인(docker container port) === === 가동 컨테이너의 포트 전송 확인(docker container port) ===
 +> 가동 중인 컨테이너에서 실행되고 있는 프로세스가 전송되고 있는 포트를 확인
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker container port" no-body="true">
 +
 +<cli prompt="$ " comment="# ">
 +$ docker container port webserver 
 +</cli>
 +
 +</panel>
 +</col>
 +</grid>
 +
 +^  주요 Linux 배포판에서의 잘 알려진 포트  ^^
 +^ 번호  ^ TCP/IP  ^ 서비스/프로토콜  ^ 설명  ^
 +| 20  | TCP  | FTP(데이터)  | 파일 전송(데이터)  |
 +| 21  | TCP  | FTP(제어)  | 파일 전송(제어)  |
 +| 22  | TCP/UDP  | ssh  | 시큐어쉘  |
 +| 23  | TCP  | Telnet  | 원격 액세스  |
 +| 25  | TCP/UDP  | SMTP  | 메일 전송  |
 +| 43  | TCP  | WHOIS  | 도메인 정보 검색  |
 +| 53  | TCP/UDP  | DNS  | 도메인 이름 시스템  |
 +| 80  | TCP/UDP  | HTTP  | 웹 액세스  |
 +| 88  | TCP/UDP  | Kerberos  | Kerberos 인증  |
 +| 110  | TCP  | POP3  | 메일 수신  |
 +| 123  | UDP  | NTP  | 시간 조정  |
 +| 135  | TCP  | Microsoft RPC  | Microsoft의 원격 액세스  |
 +| 143  | TCP/UDP  | IMAP2/ | 인터넷 메일 액세스  |
 +| 161  | TCP/UDP  | SNMP  | 네트워크 감시  |
 +| 162  | TCP/UDP  | SNMP 트랩  | 네트워크 감시(트랩)  |
 +| 389  | TCP/UDP  | LDAP  | 디렉토리 서비스  |
 +| 443  | TCP/UDP  | HTTPS  | HTTP의 암호화 통신  |
 +| 465  | TCP  | SMTPS  | SMTP의 암호화 통신  |
 +| 514  | UDP  | syslog  | 로그 수집  |
 +| 989  | TCP/UDP  | FTP(데이터)  | FTP(데이터)의 암호화 통신  |
 +| 990  | TCP/UDP  | FTP(제어)  | FTP(제어)의 암호화 통신  |
 +| 992  | TCP/UDP  | Telnets  | Telnet의 암호화 통신  |
 +| 993  | TCP  | IMAPS  | IMAP의 암호화 통신  |
 +| 995  | TCP  | POP3S  | POP3의 암호화 통신  |
 +
  
 === 컨테이너 이름 변경(docker container rename) === === 컨테이너 이름 변경(docker container rename) ===
 +> 컨테이너 이름 변경
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker container rename" no-body="true">
 +
 +<cli prompt="$ " comment="# ">
 +$ docker container rename old new 
 +</cli>
 +
 +</panel>
 +</col>
 +</grid>
 +
  
 === 컨테이너 안의 파일을 복사(docker container cp) === === 컨테이너 안의 파일을 복사(docker container cp) ===
 +> 컨테이너 안의 파일을 호스트에 복사
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker container cp" no-body="true">
 +<panel-body>
 +<alert type="info">docker container cp <컨테이너 식별자>:<컨테이너 안의 파일 경로> <호스트의 디렉토리 경로></alert>
 +<alert type="info">docker container cp <호스트 파일> <컨테이너 식별자>:<컨테이너 안의 파일 경로></alert>
 +
 +</panel-body>
 +
 +<cli prompt="$ " comment="# ">
 +$ docker container cp webserver:/etc/nginx/nginx.conf /tmp/nginx.conf  # 컨테이너에서 호스트로 파일 복사
 +$ docker container cp ./test.txt webserver:/tmp/test.txt  # 호스트에서 컨테이너로 파일 복사 
 +</cli>
 +
 +</panel>
 +</col>
 +</grid>
 +
  
 === 컨테이너 조작의 차분 확인(docker container diff) === === 컨테이너 조작의 차분 확인(docker container diff) ===
 +> 컨테이너 안에서 어떤 조작을 하여 컨테이너가 이미지로부터 생성되었을 때와 달라진 점(차분)을 확인
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker container diff" no-body="true">
 +<panel-body>
 +<alert type="info">docker container diff <컨테이너 식별자></alert>
 +
 +^  변경의 구분  ^^
 +^ 구분  ^ 설명  ^
 +| A  | 파일 추가  |
 +| D  | 파일 삭제  |
 +| C  | 파일 수정  |
 +
 +</panel-body>
 +
 +<cli prompt="$ " comment="# ">
 +$ docker container diff test
 +</cli>
 +
 +</panel>
 +</col>
 +</grid>
 +
  
  
Line 452: Line 1080:
  
 ==== 이미지 생성 ==== ==== 이미지 생성 ====
 +> docker 컨테이너를 바탕으로 docker 이미지 작성
 +
 === 컨테이너로부터 이미지 작성(docker container commit) === === 컨테이너로부터 이미지 작성(docker container commit) ===
 +> 컨테이너로부터 이미지 작성
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker container commit" no-body="true">
 +<panel-body>
 +<alert type="info">docker container commit [옵션] <컨테이너 식별자> [이미지명[:태그명]]</alert>
 +</panel-body>
 +
 +^  지정할 수 있는 주요 옵션  ^^
 +^ 옵션  ^ 설명  ^
 +| --author, -a  | 작성자를 지정한다(ex; Alex Levine<alex@domain.com> |
 +| --message, -m  | 메시지를 지정한다.  |
 +| --change, -c  | 커밋 시 Dockerfile 명령을 지정한다.  |
 +| --pause, -p  | 컨테이너를 일시 정지하고 커밋한다.  |
 +
 +</panel-body>
 +<cli prompt="$ " comment="# ">
 +$ docker container commit -a "Alex Levine" webserver alexlevine/webfront:1.0  # 컨테이너로부터 이미지 작성
 +$ docker image inspect alexlevine/webfront:1.0  # 이미지 상세 정보 확인
 +</cli>
 +
 +</panel>
 +</col>
 +</grid>
 +
  
 === 컨테이너를 tar 파일로 출력(docker container export) === === 컨테이너를 tar 파일로 출력(docker container export) ===
 +> 가동 중인 컨테이너의 디렉토리/파일들을 모아서 tar 파일 만들기
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker container export" no-body="true">
 +<panel-body>
 +<alert type="info">docker container export <컨테이너 식별자></alert>
 +</panel-body>
 +
 +<cli prompt="$ " comment="# ">
 +$ docker container export webserver > latest.tar  # 파일 출력
 +$ tar -tf latest.tar  # 생성된 tar 파일의 상세 정보 확인
 +$ tar tf latest.tar | more
 +</cli>
 +
 +</panel>
 +</col>
 +</grid>
 +
  
 === tar 파일로부터 이미지 작성(docker image import) === === tar 파일로부터 이미지 작성(docker image import) ===
 +> Linux OS 이미지의 디렉토리/파일로부터 docker 이미지 생성
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker image import" no-body="true">
 +<panel-body>
 +<alert type="info">docker image import <파일 또는 URL> | - [이미지명[:태그명]]</alert>
 +
 +  * docker image import 명령으로 지정할 수 있는 아카이브 파일; tar, tar.gz, tgz, bzip, tar.xz, txz
 +
 +
 +</panel-body>
 +
 +
 +<cli prompt="$ " comment="# ">
 +$ cat latest.tar | docker image import - alexlevine/webfront:1.1  # 이미지 작성
 +$ docker image ls  # 이미지 확인
 +</cli>
 +
 +</panel>
 +</col>
 +</grid>
 +
  
 === 이미지 저장(docker image save) === === 이미지 저장(docker image save) ===
 +> docker 이미지를 tar로 저장
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker image save" no-body="true">
 +<panel-body>
 +<alert type="info">docker image save [옵션] <저장 파일명> [이미지명]</alert>
 +</panel-body>
 +
 +<cli prompt="$ " comment="# ">
 +$ docker image save -o export.tar tensorflow  # 이미지 저장 -o 옵션으로 파일명 지정
 +$ ls -l
 +</cli>
 +
 +</panel>
 +</col>
 +</grid>
 +
  
 === 이미지 읽어 들이기(docker image load) === === 이미지 읽어 들이기(docker image load) ===
 +> tar 이미지로부터 이미지를 읽음
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker image load" no-body="true">
 +<panel-body>
 +<alert type="info">docker image load [옵션]</alert>
 +</panel-body>
 +
 +<cli prompt="$ " comment="# ">
 +$ docker image load -i export.tar  # 이미지 읽음 -i 옵션으로 파일 지정
 +</cli>
 +
 +</panel>
 +</col>
 +</grid>
 +
 +  * docker container export <-> docker container import
 +  * docker image save <-> docker image load
  
 === 불필요한 이미지/컨테이너를 일괄 삭제(docker system prune) === === 불필요한 이미지/컨테이너를 일괄 삭제(docker system prune) ===
 +> 사용하지 않는 이미지, 컨테이너, 볼륨, 네트워크를 일괄 삭제
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker system prune" no-body="true">
 +<panel-body>
 +<alert type="info">docker system prune [옵션]</alert>
 +
 +^  지정할 수 있는 주요 옵션  ^^
 +^ 옵션  ^ 설명  ^
 +| --all, -a  | 사용하지 않는 리소스를 모두 삭제한다.  |
 +| --force, -f  | 강제적으로 삭제한다.  |
 +</panel-body>
 +
 +<cli prompt="$ " comment="# ">
 +$ docker system prune -a  # 불필요한 리소스 삭제
 +</cli>
 +
 +</panel>
 +</col>
 +</grid>
 +
  
  
Line 468: Line 1219:
 ---- ----
 ===== Dockerfile을 사용한 코드에 의한 서버 구축 ===== ===== Dockerfile을 사용한 코드에 의한 서버 구축 =====
 +  * Dockerfile; 베이스가 되는 이미지에 각종 미들웨어를 설치 및 설정하고, 개발한 애플리케이션의 실행 모듈을 전개하기 위한 애플리케이션의 실행 기반의 모든 구성 정보를 기술.
  
 ==== Dockerfile을 사용한 구성 관리 ==== ==== Dockerfile을 사용한 구성 관리 ====
 +  - 베이스가 될 Docker 이미지
 +  - Docker 컨테이너 안에서 수행한 조작(명령)
 +  - 환경변수 등의 설정
 +  - Docker 컨테이너 안에서 작동시켜둘 데몬 실행
  
-=== Dockerfile이란? === 
  
-=== Dockerfile의 기본 구문 === 
  
-=== Dockerfile 작성 ===+=== Dockerfile의 기본 구문 및 작성 === 
 +<grid> 
 +<col sm="8"> 
 +<panel type="default" title="Dockerfile의 기본 서식" no-body="true"> 
 +<panel-body> 
 +<alert type="info">명령 인수</alert> 
 + 
 +^  Dockerfile의 명령  ^^ 
 +^ 명령  ^ 설명 
 +| FROM  | 베이스 이미지 지정 
 +| RUN  | 명령 실행 
 +| CMD  | 컨테이너 실행 명령 
 +| LABEL  | 라벨 설정 
 +| EXPOSE  | 포트 익스포트 
 +| ENV  | 환경변수 
 +| ADD  | 파일/디렉토리 추가 
 +| COPY  | 파일 복사 
 +| ENTRYPOINT  | 컨테이너 실행 명령 
 +| VOLUME  | 볼륨 마운트 
 +| USER  | 사용자 지정 
 +| WORKDIR  | 작업 디렉토리 
 +| ARG  | Dockerfile 안의 변수 
 +| ONBUILD  | 빌드 완료 후 실행되는 명령 
 +| STOPSIGNAL  | 시스템 콜 시그널 설정 
 +| HEALTHCHECK  | 컨테이너의 헬스 체크 
 +| SHELL  | 기본 쉘 설정 
 + 
 +  * 주석; # 
 + 
 +</panel-body> 
 +</panel> 
 + 
 +<panel type="default" title="Dockerfile 작성" no-body="true"> 
 +<panel-body> 
 +  * FROM 명령 
 + 
 +<alert type="info">FROM [이미지명]</alert> 
 +<alert type="info">FROM [이미지명]:[태그명]</alert> 
 +<alert type="info">FROM [이미지명]@[다이제스트]</alert> 
 +</panel-body> 
 + 
 +</panel> 
 +</col> 
 +</grid> 
 + 
  
 ==== Dockerfile의 빌드와 이미지 레이어 ==== ==== Dockerfile의 빌드와 이미지 레이어 ====
  
 === Dockerfile로부터 Docker 이미지 만들기 === === Dockerfile로부터 Docker 이미지 만들기 ===
 +<grid>
 +<col sm="8">
 +<panel type="default" title="docker build 명령의 서식" no-body="true">
 +<panel-body>
 +<alert type="info">docker build -t [생성할 이미지명]:[태그명] [Dockerfile의 위치]</alert>
 +</panel-body>
 +<cli prompt="$ " comment="# ">
 +$ docker build -t sample:1.0 /home/docker/sample  # Dockerfile 빌드
 +$ docker build -t sample -f Dockerfile.base .  # Dockerfile.base 파일 빌드
 +</cli>
 +</panel>
 +</col>
 +</grid>
 +
  
 === Docker 이미지의 레이어 구조 === === Docker 이미지의 레이어 구조 ===
 +  * Dockerfile의 명령 한 줄마다 이미지 작성
  
 ==== 멀티스테이지 빌드를 사용한 애플리케이션 개발 ==== ==== 멀티스테이지 빌드를 사용한 애플리케이션 개발 ====
 +> 빌드 환경, 제품 환경이 다르므로 멀티스테이지 빌드 기능 사용
  
 === Dockerfile 만들기 === === Dockerfile 만들기 ===
 +<sxh>
 +# 1. Build Image
 +FROM golang:1.8.4-jessie AS builder
 +
 +# Install dependencies
 +WORKDIR /go/src/github.com/alexlevine/greet
 +RUN go get -d -v github.com/urfave/cli
 +
 +$ Build modules
 +COPY main.go .
 +RUN GOOS=linux go build -a -o greet .
 +
 +# -------------------------
 +# 2. Production Image
 +FROM busybox  # 기본적인 Linux 명령들을 하나로 모아 놓은 것으로, 최소한으로 필요한 Linux 쉘 환경을 제공하는 경우 이용
 +WORKDIR /opt/greet/bin
 +
 +# Deploy modules
 +COPY --from=builder /go/src/github.com/alexlevine/greet/ .
 +ENTRYPOINT ["./greet"]
 +</sxh>
  
 === Docker 이미지의 빌드 === === Docker 이미지의 빌드 ===
 +<cli prompt="$ " comment="# ">
 +$ docker build -t greet .
 +</cli>
  
 === Docker 컨테이너의 시작 === === Docker 컨테이너의 시작 ===
 +<cli prompt="$ " comment="# ">
 +$ docker container run -it --rm greet alex
 +Hello alex
 +
 +$ docker container run -it --rm greet --lang=es alex
 +Hola alex
 +</cli>
 +
  
 ==== 명령 및 데몬 실행 ==== ==== 명령 및 데몬 실행 ====
 +> Dockerfile에서 명령이나 데몬을 실행하는 방법
  
 === 명령 실행(RUN 실행) === === 명령 실행(RUN 실행) ===
 +<alert type="info">RUN [실행하고 싶은 명령]</alert>
 +
 +  - Shell 형식으로 기술; 쉘 경유.
 +  - Exec 형식으로 기술; 쉘을 경유하지 않고 직접 실행
 +
 +
 +<sxh>
 +# Shell 형식
 +RUN apt-get install -y nginx
 +
 +# Exec 형식
 +RUN ["/bin/bash", "-c", "apt-get install -y nginx"]
 +</sxh>
 +
 +  * RUN 명령을 여러 개 지정하면 명령 줄만큼의 레이어 생성
 +  * RUN 명령을 한 줄로 지정하면 하나의 레이어 생성; RUN 명령의 줄 바꿈은 \
  
 === 데몬 실행(CMD 명령) === === 데몬 실행(CMD 명령) ===
 +  * RUN 명령은 이미지를 작성하기 위해 실행하는 명령을 기술, 이미지를 바탕으로 생성된 컨테이너 안에서 명령을 실행하려면 CMD
 +  * Dockerfile에는 하나의 CMD 명령. 여러 개 지정시 마지막 명령만 유효
 +
 +<alert type="info">CMD [실행하고 싶은 명령]</alert>
 +
 +  - Exec 형식으로 기술
 +  - Shell 형식으로 기술
 +  - ENTRYPOINT 명령의 인수로 CMD 명령 사용
 +
 +  * 패키지 관리 시스템
 +    * YUM(Yellowdog Updater Modified); CentOS, Fedora, Red Hat 계열 -> DNF(Dandified Yum)
 +    * APT(Advanced Packaging Tool); Debian, Ubuntu, Debian 계열
  
 === 데몬 실행(ENTRYPOINT 명령) === === 데몬 실행(ENTRYPOINT 명령) ===
 +  * ENTRYPOINT 명령에서 지정한 명령은 Dockerfile에서 빌드한 이미지로부터 Docker 컨테이너를 시작하기 때문에 docker container run 명령을 실행했을 때 실행
 +
 +<alert type="info">ENTRYPOINT [실행하고 싶은 명령]</alert>
 +
 +  - Exec 형식으로 기술
 +  - Shell 형식으로 기술
 +
 +  * ENTRYPOINT vs. CMD;
 +    * CMD; 컨테이너 시작 시에 실행하고 싶은 명령을 정의해도 docker container run 명령 실행 시에 인수로 새로운 명령을 지정한 경우 이것을 우선 실행
 +    * ENTRYPOINT; 지정한 명령은 반드시 컨테이너에서 실행, 실행 시에 명령 인수를 지정하고 싶을 때는 CMD 명령과 조합하여 사용.
  
 === 빌드 완료 후에 실행되는 명령(ONBUILD 명령) === === 빌드 완료 후에 실행되는 명령(ONBUILD 명령) ===
 +
 +<alert type="info">ONBUILD [실행하고 싶은 명령]</alert>
  
 === 시스템 콜 시그널의 설정(STOPSIGNAL 명령) === === 시스템 콜 시그널의 설정(STOPSIGNAL 명령) ===
 +<alert type="info">STOPSIGNAL [시그널]</alert>
  
 === 컨테이너의 헬스 체크 명령(HEALTHCHECK 명령) === === 컨테이너의 헬스 체크 명령(HEALTHCHECK 명령) ===
 +<alert type="info">HEALTHCHECK [옵션] CMD 실행할 명령</alert>
 +
 +^  지정할 수 있는 옵션  ^^^
 +^ 옵션  ^ 설명  ^ 기본값  ^
 +| --interval=n  | 헬스 체크 간격  | 30s  |
 +| --timeout=n  | 헬스 체크 타임아웃  | 30s  |
 +| --retries=n  | 타임아웃 횟수  | 3  |
 +
  
 ==== 환경 및 네트워크 설정 ==== ==== 환경 및 네트워크 설정 ====
 +> Dockerfile 안에서 이용할 수 있는 환경변수나 컨테이너 안에서의 작업 디렉토리 지정
  
 === 환경변수 설정(ENV 명령) === === 환경변수 설정(ENV 명령) ===
 +<alert type="info">ENV [key] [value]</alert>
 +<alert type="info">ENV [key]=[value]</alert>
  
 === 작업 디렉토리 지정(WORKDIR 명령) === === 작업 디렉토리 지정(WORKDIR 명령) ===
 +<alert type="info">WORKDIR [작업 디렉토리 경로]</alert>
 +
 +  * RUN, CMD, ENTRYPOINT, COPY, ADD 명령에 대한 작업 디렉토리 지정
  
 === 사용자 지정(USER 명령) === === 사용자 지정(USER 명령) ===
 +  * RUN, CMD, ENTRYPOINT 명령을 실행하기 위한 사용자 지정
 +
 +<alert type="info">USER [사용자명/UID]</alert>
 +
  
 === 라벨 지정(LABEL 명령) === === 라벨 지정(LABEL 명령) ===
 +  * 이미지에 버전 정보나 작성자 정보, 코멘트 등과 같은 정보를 제공할 때 사용
 +
 +<alert type="info">LABEL <키 명>=<값></alert>
 +
  
 === 포트 설정(EXPOSE 명령) === === 포트 설정(EXPOSE 명령) ===
 +  * 컨테이너의 공개 포트 번호를 지정
 +
 +<alert type="info">EXPOSE <포트 번호></alert>
  
  
 === Dockerfile 내 변수의 설정(ARG 명령) === === Dockerfile 내 변수의 설정(ARG 명령) ===
 +  * Dockerfile 안에서 사용할 변수를 정의할 때 사용
 +
 +<alert type="info">ARG <이름>[=기본값]</alert>
 +
  
 === 기본 쉘 설정(SHELL 명령) === === 기본 쉘 설정(SHELL 명령) ===
 +  * 쉘 형식으로 명령을 실행할 때 기본 쉘 설정
 +
 +<alert type="info">SHELL ["쉘의 경로", "파라미터"]</alert>
  
 ==== 파일 설정 ==== ==== 파일 설정 ====
  
 === 파일 및 디렉토리 추가(ADD 명령) === === 파일 및 디렉토리 추가(ADD 명령) ===
 +  * 이미지에 호스트 상의 파일이나 디렉토리를 추가할 때 사용
 +
 +<alert type="info">ADD <호스트의 파일 경로> <Docker 이미지의 파일 경로></alert>
 +<alert type="info">ADD ["<호스트의 파일 경로>" "<Docker 이미지의 파일 경로>"]</alert>
 +
 +  * 빌드에 불필요한 파일 제외; .dockerignore 파일 작성
 +
  
 === 파일 복사(COPY 명령) === === 파일 복사(COPY 명령) ===
 +  * 이미지에 호스트 상의 파일이나 디렉토리를 복사할 때 사용
 +
 +<alert type="info">COPY <호스트의 파일 경로> <Docker 이미지의 파일 경로></alert>
 +<alert type="info">COPY ["<호스트의 파일 경로>" "<Docker 이미지의 파일 경로>"]</alert>
 +
 +  * Dockerfile의 저장 위치; 빌드에 필요 없는 파일은 Dockerfile과 똑같은 디렉토리에 두지 않도록 주의
  
 === 볼룸 마운트(VOLUME 명령) === === 볼룸 마운트(VOLUME 명령) ===
 +  * 이미지에 볼륨을 할당
 +
 +<alert type="info">VOLUME ["/마운트 포인트"]</alert>
  
  
Line 537: Line 1474:
 ==== Docker 이미지의 자동 생성 및 공개 ==== ==== Docker 이미지의 자동 생성 및 공개 ====
  
-=== Automated Build의 흐름 === +  * Automated Build의 흐름; Docker Hub에는 버전 관리 툴인 GitHub 및 Bitbucket과 연결하여 Dockerfile로부터 Docker 이미지를 자동으로 생성하는 'Automated Build' 기능이 있음. 이 기능은 GitHub 또는 Bitbucket에서 관리되는 Dockerfile을 바탕으로 Docker 이미지를 자동으로 빌드하는 기능. 
- +    GitHub에 공개하기 
-=== GitHub에 공개하기 === +    Docker Hub의 링크 설정 
- +    Dockerfile의 빌드 
-=== Docker Hub의 링크 설정 === +    Docker 이미지 확인
- +
-=== Dockerfile의 빌드 === +
- +
-=== Docker 이미지 확인 ===+
  
 ==== Docker Registry를 사용한 프라이빗 레지스트리 구축 ==== ==== Docker Registry를 사용한 프라이빗 레지스트리 구축 ====
  
-=== 로컬 환경에 Docker 레지스트리 구축하기 === +  - 로컬 환경에 Docker 레지스트리 구축하기; Docker Store에 공개되어 있는 공식 이미지 'registry' 사용 
- +  Docker 이미지 업로드 
-=== Docker 이미지 업로드 === +  Docker 이미지의 다운로드와 작동 확인
- +
-=== Docker 이미지의 다운로드와 작동 확인 ===+
  
 ==== 클라우드 서비스를 사용한 프라이빗 레지스트리 구축 ==== ==== 클라우드 서비스를 사용한 프라이빗 레지스트리 구축 ====
  
-=== Google Container Registry 준비하기 === +  * GCP(Google Cloud Platform)은 Docker 이미지를 프라이빗으로 관리할 수 있는 'Google Container Registry'를 제공. 이 서비스는 GCP의 오브젝트 스토리지 서비스인 'Google Cloud Storage'를 데이터 저장 장소로 사용. 
- +  - Google Container Registry 준비하기 
-=== Docker 이미지의 업로드 === +  Docker 이미지의 업로드 
- +  Docker 이미지의 다운로드와 작동 확인
-=== Docker 이미지의 다운로드와 작동 확인 ===+
  
  
Line 569: Line 1499:
 ---- ----
 ===== 여러 컨테이너의 운용 관리 ===== ===== 여러 컨테이너의 운용 관리 =====
 +> Docker에서 움직이는 웹 애플리케이션을 제품 환경에서 운용할 때는 애플리케이션 서버, 로그 서버, 프록시 서버 등과 같이 여러 개의 컨테이너들을 연계하여 작동
  
 ==== 여러 컨테이너 관리의 개요 ==== ==== 여러 컨테이너 관리의 개요 ====
  
 === 웹 3계층 시스템 아키텍처 === === 웹 3계층 시스템 아키텍처 ===
 +  * 프론트 서버; 웹 프론트 서버 혹은 웹 서버, Nginx, Microsoft의 IIS(Internet Information Services) 등. 
 +  * 애플리케이션 서버; 결제 처리, 수주 처리 등 애플리케이션의 처리를 실행하는 프로그램의 실행 환경 
 +  * 데이터베이스(DB) 서버;  
 +    * RDBMS(Relational Database Management System) -> MySQL, PostgreSQL, Oracle Database 등. 
 +    * NoSQL -> KVS(Key-Value Store), 도큐먼트 지향 데이터 베이스(도큐먼트 데이터베이스) 등. 
 + 
 === 영구 데이터의 관리 === === 영구 데이터의 관리 ===
 +  * 데이터의 백업 및 복원
 +  * 로그 수집
  
 === Docker Compose === === Docker Compose ===
 +  * 여러 컨테이너를 모아서 관리하기 위한 툴
 +  * docker-compose.yml; 컨테이너의 구성 정보를 정의함으로써 동일 호스트상의 여러 컨테이너를 일괄적으로 관리, YAML 형식의 파일로 관리.
  
 ==== 웹 애플리케이션을 로컬에서 움직여 보자 ==== ==== 웹 애플리케이션을 로컬에서 움직여 보자 ====
  
-=== Compose 구성 파일의 작성 ===+  - Compose 구성 파일의 작성; 소스 파일 확인 -> 구성 정의 
 +  - 여러 Docker 컨테이너 시작; $ docker-compose up 
 +  - docker-compose ps 
 +  - 여러 Docker 컨테이너 정지; $ docker-compose stop 
 +  - docker-compose down; 리소스 삭제
  
-=== 여러 Docker 컨테이너 시작 ===+==== Docker Compose를 사용한 여러 컨테이너의 구성 관리 ===
 +> 'Docker Compose'의 구성 관리 파일인 docker-compose.yml 작성 방법
  
-=== 여러 Docker 컨테이너 정지 ===+  * YAML
  
-==== Docker Compose를 사용한 여러 컨테이너의 구성 관리 ==== 
  
 === docker-compose.yml의 개요 === === docker-compose.yml의 개요 ===
 +  * 버전
 +<cli>
 +version: 3.3
 +</cli>
  
-=== 이미지 지(image) ===+^  Compose 의 파일의 버전과 DockerEngine의 버전과의 관계  ^^ 
 +^ Compose 정의 파일의 버전  ^ Docker Engine의 버전 
 +| 3.3  | 17.06.0 
 +| 3.2  | 17.04.0 
 +| 3.1  | 1.13.1 
 +| 3.0  | 1.13.0 
 +| 2.3  | 17.06.0 
 +| 2.2  | 1.130.0 
 +| 2.1  | 1.12.0 
 +| 2.0  | 1.10.0 
 +| 1.0  | 1.9.1  |
  
-=== 이미지 빌드(build) ===+<cli yml> 
 +# 버전을 정 
 +version: "3"
  
-=== 컨테이너 안에서 작동하는 명령 지(command/entrypoint) ===+비스 의 
 +services: 
 +  webserver: 
 +    image: ubuntu 
 +    ports: 
 +      - "80:80" 
 +    networks: 
 +      - webnet
  
-=== 컨테이너 간 연결(links) ===+  redis:  
 +    image: redis 
 +    networks: 
 +      - webnet
  
-=== 컨테이너 간 통신(ports/expose) === +# 네트워크 정의 
- +networks: 
-=== 서비스의 의존관계 정의(depends_on) === +  webnet: 
- +   
-=== 컨테너 환경변수 지(environment/env_file) === +#데터 볼륨  
- +volumes: 
-=== 컨테이너 정보 설정(container_name/labels) ===+  data-volume:   
 +</cli>
  
-=== 컨테이너 데이터 관리(volumes/volumes_from) ===+  - 이미지 지정(image) === 
 +  - 이미지 빌드(build) === 
 +  - 컨테이너 안에서 작동하는 명령 지정(command/entrypoint) === 
 +  - 컨테이너 간 연결(links) === 
 +  - 컨테이너 간 통신(ports/expose) === 
 +  - 서비스의 의존관계 정의(depends_on) === 
 +  - 컨테이너 환경변수 지정(environment/env_file) === 
 +  - 컨테이너 정보 설정(container_name/labels) === 
 +  - 컨테이너 데이터 관리(volumes/volumes_from) ===
  
 ==== Docker Compose를 사용한 여러 컨테이너의 운용 ==== ==== Docker Compose를 사용한 여러 컨테이너의 운용 ====
  
 === Docker Compose의 버전 확인 === === Docker Compose의 버전 확인 ===
 +
 +<cli prompt="$ " comment="# ">
 +$ docker-compose --version
 +</cli>
  
 === Docker COmpose의 기본 명령 === === Docker COmpose의 기본 명령 ===
 +
 +^  Docker Compose의 주요 서브 명령  ^^
 +^ 서브 명령  ^ 설명  ^
 +| up  | 컨테이너 생성/시작  |
 +| ps  | 컨테이너 목록 표시  |
 +| logs  | 컨테이너 로그 출력  |
 +| run  | 컨테이너 실행  |
 +| start  | 컨테이너 시작  |
 +| stop  | 컨테이너 정지  |
 +| restart  | 컨테이너 재시작  |
 +| pause  | 컨테이너 일시 정지  |
 +| unpause  | 컨테이너 재개  |
 +| port  | 공개 포트 번호 표시  |
 +| config  | 구성 확인  |
 +| kill  | 실행 중인 컨테이너 강제 정지  |
 +| rm  | 컨테이너 삭제  |
 +| down  | 리소스 삭제  |
 +
 +
 +<cli prompt="$ " comment="# ">
 +$ docker-compose -f ./sample/docker-compose.yml up  # 컨테이너 생성/시작
 +$ docker-compose stop webserver  # 특정 컨테이너 조작
 +</cli>
 +
  
 === 여러 컨테이너의 생성(up) === === 여러 컨테이너의 생성(up) ===
 +<grid>
 +<col sm="8">
 +<panel type="default" title="" no-body="true">
 +<panel-body>
 +<alert type="info">docker-compose up [옵션] [서비스명 .]</alert>
 +
 +^  지정할 수 있는 주요 옵션  ^^
 +^ 옵션  ^ 설명  ^
 +| -d  | 백그라운드에서 실행한다.  |
 +| --no-depos  | 링크 서비스를 시작하지 않는다.  |
 +| --build  | 이미지를 빌드한다.  |
 +| --no-build  | 이미지를 빌드하지 않는다.  |
 +| -t, --timeout  | 컨테이너의 타임아웃을 초로 지정(기본 10초)한다.  |
 +| --scale SERVICE=서비스 수  | 서비스 수를 지정한다.  |
 +
 +</panel-body>
 +<alert type="info">docker-compose up --scale [서비스명=수]</alert>
 +</panel>
 +</col>
 +</grid>
  
 === 여러 컨테이너 확인(ps/logs) === === 여러 컨테이너 확인(ps/logs) ===
 +<cli prompt="$ " comment="# ">
 +$ docker-compose ps  # 여러 컨테이너의 상태 확인
 +$ docker-compose -q  # 컨테이너 ID 확인
 +$ docker-compose logs  # docker 령령을 사용한 로그 확인
 +</cli>
  
 === 컨테이너에서 명령 실행(run) === === 컨테이너에서 명령 실행(run) ===
 +<cli prompt="$ " comment="# ">
 +$ docker-compose run server_a /bin/bash
 +</cli>
  
 === 여러 컨테이너 시작/정지/재시작(start/stop/restart) === === 여러 컨테이너 시작/정지/재시작(start/stop/restart) ===
 +  * 컨테이너 일관 시작/정지/재시작
 +
 +<cli prompt="$ " comment="# ">
 +$ docker-compose start
 +$ docker-compose stop
 +$ docker-compose restart
 +</cli>
 +
 +  * 특정 컨테이너 재시작
 +
 +<cli prompt="$ " comment="# ">
 +$ docker-compose restart server_a
 +</cli>
  
 === 여러 컨테이너 일시 정시/재개(pause/unpause) === === 여러 컨테이너 일시 정시/재개(pause/unpause) ===
 +<cli prompt="$ " comment="# ">
 +$ docker-compose pause  # 컨테이너 일시 정지
 +$ docker-compose unpause  # 컨테이너 재개
 +</cli>
  
 === 서비스의 구성 확인(port/config) === === 서비스의 구성 확인(port/config) ===
 +
 +<alert type="info">docker-compose port [옵션] <서비스명> <프라이빗 포트 번호></alert>
 +
 +^  지정할 수 있는 주요 옵션  ^
 +^ 옵션  ^ 설명  ^
 +| --protocol=proto  | 프로토콜. tcp 또는 udp  |
 +| --index=index  | 컨테이너의 인덱스 수  |
 +
 +<cli prompt="$ " comment="# ">
 +$ docker-compose port webserver 80  # 공개 포트 확인
 +</cli>
 +
 +<cli prompt="$ " comment="# ">
 +$ docker-compose config  # 구성 확인
 +</cli>
 +
  
 === 여러 컨테이너 강제 정지/삭제(kill/rm) === === 여러 컨테이너 강제 정지/삭제(kill/rm) ===
 +<cli prompt="$ " comment="# ">
 +$ docker-compose kill -s SIGINT  # 컨테이너에 시그널 송신
 +</cli>
 +
 +<cli prompt="$ " comment="# ">
 +$ docker-compose rm  # 여러 컨테이너 일괄 삭제
 +</cli>
 +
 +  * Linux의 시그널; POSIX.1-1990 규격
 +
 +^  Docker Compose의 주요 서브 명령  ^^
 +^ 시그널  ^ 설명  ^
 +| SIGHUP  | 프로그램 재시작  |
 +| SIGINT  | 키보드로 인터럽트, Ctrl+C로 송신할 수 있다.  |
 +| SIGQUIT  | 키보드에 의한 중지, Ctrl+\로 송신할 수 있다.  |
 +| SIGTERM  | 프로세스 정상 종료  |
 +| SIGKILL  | 프로세스 강제 종료  |
 +| SIGSTOP  | 프로세스 일시 정지  |
  
 === 여러 리소스의 일괄 삭제(down) === === 여러 리소스의 일괄 삭제(down) ===
 +
 +<alert type="info">docker-compose down [옵션]</alert>
 +
 +^  지정할 수 있는 주요 옵션  ^^
 +^ 옵션  ^ 설명  ^
 +| --rmi all  | 모든 이미지를 삭제  |
 +| --rmi local  | 커스텀 태그가 없는 이미지만 삭제  |
 +| -v, --volumes  | Compose 정의 파일의 데이터 볼륨을 삭제  |
 +
 +<cli prompt="$ " comment="# ">
 +$ docker-compose down --rmi all  # 여러 이미지 삭제
 +</cli>
  
  
Line 634: Line 1732:
 ---- ----
 ===== 멀티호스트 환경에서 Docker 실행 환경 구축 ===== ===== 멀티호스트 환경에서 Docker 실행 환경 구축 =====
- 
 ==== 멀티호스트 환경에서 컨테이너 관리의 개요 ==== ==== 멀티호스트 환경에서 컨테이너 관리의 개요 ====
  
 === 멀티호스트 환경과 클러스터링 === === 멀티호스트 환경과 클러스터링 ===
 +  * 클러스터링; 여러 대의 서버나 하드웨어를 모아서 한 대처럼 보이게 하는 기술
 +    * 가용성(Availability); 시스템이 계속해서 가동될 수 있는 능력
 +    * 확장성(Scalability); 고부하로 인한 시스템 다운을 피하기 위해 여러 대의 컴퓨터를 클러스터화하여 처리를 분산시킴으로써 높은 처리 성능을 얻을 수 있다. 클라우드의 가상 머신의 경우는 오토스케일 기능이 제공되는 경우도 있다.
 +
  
 === Docker Machine이란? === === Docker Machine이란? ===
 +  * 호스트 머신/클라우드/가상 환경 등에 Docker의 실행 환경을 만들 수 있는 커맨드라인 툴.
 +  * https://docs.docker.com/machine
  
-==== 웹 애플리케이션을 서비스 공개해 보자 ==== 
  
-=== Docker 실행 환경 작성 === +==== 웹 애플리케이션을 서비스 공해 보자 ====
- +
-=== 웹 애플리케이션 개 ===+
  
-=== Docker 실행 환경 삭제 ===+  - Docker 실행 환경 작성 
 +  - 웹 애플리케이션 전개 
 +  - Docker 실행 환경 삭제
  
 ==== Docker Machine을 사용한 실행 환경 구축 ==== ==== Docker Machine을 사용한 실행 환경 구축 ====
  
 === Docker Machine의 기본 명령 === === Docker Machine의 기본 명령 ===
 +
 +<cli prompt="$ " comment="# ">
 +$ docker-machine --version  # Docker Machine의 버전 확인
 +</cli>
 +
 +^  Docker Machine의 서브 명령  ^^
 +^ 서브 명령  ^ 설명  ^
 +| create  | 실행 환경 작성  |
 +| ls  | 실행 환경 목록 표시  |
 +| status  | 실행 환경 상태 표시  |
 +| url  | 실행 환경 URL 표시  |
 +| ssh  | 실행 환경에 대한 SSH 연결  |
 +| start  | 실행 환경 시작  |
 +| stop  | 실행 환경 정지  |
 +| restart  | 실행 환경 재시작  |
 +| scp  | 실행 환경에서 파일 다운로드  |
 +| rm  | 실행 환경 삭제  |
 +| kill  | 실행 환경 강제 정지  |
 +| ip  | 실행 환경 IP 주소 확인  |
 +| inspect  | 실행 환경 정보 확인  |
 +
  
 === 실행 환경 작성(create) === === 실행 환경 작성(create) ===
 +<alert type="info">docker-machine create --driver <드라이버명> <작성할 Docker 머신명></alert>
 +
 +  * Docker Machine에서 이용할 수 있는 드라이버 목록; https://docs.docker.com/machine/drivers/
 +
  
 === 실행 환경 목록 표시(ls/status/url) === === 실행 환경 목록 표시(ls/status/url) ===
 +<alert type="info">docker-machine ls [옵션]</alert>
 +
 +^  지정할 수 있는 주요 옵션  ^^
 +^ 옵션  ^ 설명  ^
 +| --quite, -q  | 머신명만 표시한다  |
 +| --filter  | 표시할 머신을 필터링한다  |
 +
 +<cli prompt="$ " comment="# ">
 +$ docker-machine status host1  # 실행 환경의 스테이터스 확인
 +$ docker-machine url host1  # 실행 환경의 URL 확인
 +</cli>
  
 === 실행 환경에 대한 SSH 연결(ssh) === === 실행 환경에 대한 SSH 연결(ssh) ===
 +<alert type="info">docker-machine ssh 머신명</alert>
 +
 +<cli prompt="$ " comment="# ">
 +$ docker-machine ssh host1
 +</cli>
 +
 === 실행 환경 시작/정지/재시작(start/stop/restart) === === 실행 환경 시작/정지/재시작(start/stop/restart) ===
 +<cli prompt="$ " comment="# ">
 +$ docker-machine start host1  # 실행 환경 시작
 +$ docker-machine stop host1  # 실행 환경 정지
 +$ docker-machine restart host1  # 실행 환경 재시작
 +</cli>
  
 === 실행 환경으로부터 파일 다운로드(scp) === === 실행 환경으로부터 파일 다운로드(scp) ===
 +<cli prompt="$ " comment="# ">
 +$ docker-machine scp host1:/etc/passwd .  
 +</cli>
 +
 +  * SCP(Secure Copy Protocol); SSH의 기능을 사용하여 파일을 전송하기 위한 명령 Secure Copy Protocol로 인증 정보와 데이터를 암호화하여 네트워크로 전송
  
 === 실행 환경 삭제(rm/kill) === === 실행 환경 삭제(rm/kill) ===
 +<cli prompt="$ " comment="# ">
 +$ docker-machine rm -f host1  # 실행 환경 삭제
 +$ docker-machine kill host1  # 실행 환경 강제 정지
 +</cli>
  
 === 실행 환경 정보 확인(ip/inspect) === === 실행 환경 정보 확인(ip/inspect) ===
 +<cli prompt="$ " comment="# ">
 +$ docker-machine ip host1  # IP 주소 확인
 +</cli>
  
 +<alert type="info">docker-machine inspect [옵션] 머신명</alert>
  
  
Line 673: Line 1835:
 ---- ----
 ===== 클라우드를 사용한 Docker 실행 환경 구축 ===== ===== 클라우드를 사용한 Docker 실행 환경 구축 =====
 +> GKE(Google Kubernetes Engine)
  
 ==== 클라우드 환경에서 Docker 오케스트레이션하기 ==== ==== 클라우드 환경에서 Docker 오케스트레이션하기 ====
  
 === 분산 환경에서의 컨테이너 운용 관리 === === 분산 환경에서의 컨테이너 운용 관리 ===
 +  * Kubernetes
 +  * Docker Enging(Swarm 모드)
 +  * Apache Mesos, Marathon
 +
  
 === 퍼블릭 클라우드가 제공하는 매니지드 서비스 === === 퍼블릭 클라우드가 제공하는 매니지드 서비스 ===
 +  * Amazon EC2 Container Service
 +  * Azure Container Service(AKS)
 +  * Google Kubernetes Engine(GKE)
 +
  
 === Google Cloud Platform의 컨테이너 관련 서비스 === === Google Cloud Platform의 컨테이너 관련 서비스 ===
 +  * Google Container Builder
 +  * Google Kubernetes Enging
 +  * Google Container Registry
 +
  
 ==== Kubernetes의 개요 ==== ==== Kubernetes의 개요 ====
 +  * 여러 서버들에서의 컨테이너 관리
 +  * 컨테이너 간 네트워크 관리
 +  * 컨테이너의 부하분산
 +  * 컨테이너의 감시
 +  * 무정지로 업데이트
  
 === Kubernetes의 서버 구성 === === Kubernetes의 서버 구성 ===
 +  * 마스터 서버(Kubernetes Master)
 +  * 백엔드 데이터베이서(etcd)
 +  * 노드(Node)
 +
  
 === 애플리케이션 구성 관리(Pod, ReplicaSet, Deployment) === === 애플리케이션 구성 관리(Pod, ReplicaSet, Deployment) ===
 +  * Pod(포드)
 +  * ReplicaSet(리플리카 셋)
 +  * Deployment(디플로이먼트, 전개)
  
 === 네트워크 관리(Service) === === 네트워크 관리(Service) ===
Line 693: Line 1880:
  
 === Kubernetes의 구조 === === Kubernetes의 구조 ===
 +  * 마스터(Master); API Server, Scheduler, Controller Manager
 +  * 데이터 스토어(etcd)
 +  * 노드(Node); Kubelet
  
 ==== GCP를 사용한 Docker 애플리케이션 개발 ==== ==== GCP를 사용한 Docker 애플리케이션 개발 ====
Line 701: Line 1891:
  
 === Docker 이미지 빌드(Cloud Container Builder) === === Docker 이미지 빌드(Cloud Container Builder) ===
 +  * API 유효화하기
 +    * Google Kubernetes Engine API
 +    * Google Container Registry API
 +    * Google Cloud Build API
 +  * Docker 이미지 빌드 파일; 빌드 스텝 -> 이미지 -> 
  
 ==== GCP를 사용한 Docker 애플리케이션 실행 환경 구축 ==== ==== GCP를 사용한 Docker 애플리케이션 실행 환경 구축 ====
Line 726: Line 1921:
  
 === 가용성 관리 === === 가용성 관리 ===
 +  * 콜드 스탠바이 방식; 스탠바이 기기는 장애가 발생하면 액티브 기기와 교체
 +  * 핫 스탠바이 방식; 액티브 기기에서 장애가 발생하면 자동으로 스탠바이 기기로 교체
 +  * 헬스 체크
 +    * ICMP 감시(레이어 3); Ping 등의 응답을 확인
 +    * 포트 감시(레이어 4); 웹서비스의 경우는 80번 포트로부터 응답이 있는지 확인
 +    * 서비스 감시(레이어 7); HTTP 통신을 확인하는 경우 특정 페이지가 올바르게 표시되는지를 확인
 +  * 로드 밸런싱(load balancing)
 +
 +
 +  * Disaster Recovery System
 +    * RTO(Recovery Time Objective); 서비스를 복구할 때까지 필요한 경과 시간
 +    * RPO(Recovery Point Objective); 재해 등으로 시스템이 정지되었을 때 어떤 시점까지 거슬러 올라가서 데이터를 복구시킬지에 대한 지표
  
 === 수용성(Capacity) 관리 === === 수용성(Capacity) 관리 ===
  
 === 시스템 감시 === === 시스템 감시 ===
 +  * 머신의 활동 감시
 +  * 서비스의 가동 감시
 +  * 서버/네트워크의 리소스 감시
 +  * 잡 감시
 +  * 장애 대응
  
 ==== GKE를 사용한 Docker 실행 환경의 운용 ==== ==== GKE를 사용한 Docker 실행 환경의 운용 ====
  
 === Kubernetes의 스테이터스 확인 === === Kubernetes의 스테이터스 확인 ===
 +  * 클러스터의 상태 확인
 +  * 노드의 스테이터스 확인
 +  * Pod의 상태 확인
 +  * 서비스 확인
  
 === Kubernetes의 Pod 관리 === === Kubernetes의 Pod 관리 ===
Line 740: Line 1956:
  
 === Kubernetes의 리소스 작성/삭제/변경 === === Kubernetes의 리소스 작성/삭제/변경 ===
 +  * 리소스 작성
 +  * 리소스 삭제
 +  * 리소스 변경
  
 === Kubernetes의 업그레이드/다운그레이드 === === Kubernetes의 업그레이드/다운그레이드 ===
Line 830: Line 2049:
 ===== Google Cloud Platform 사용법 ===== ===== Google Cloud Platform 사용법 =====
 ==== A.1 계정 등록 ==== ==== A.1 계정 등록 ====
 +  * Google 계정, 신용카드 또는 은행 계좌
 +
 +  - 등록 시작
 +  - 계정 정보 등록
  
-[1] 등록 시작 
-[2] 계정 정보 등록 
 ==== A.2 프로젝트 작성과 삭제 ==== ==== A.2 프로젝트 작성과 삭제 ====
  
-[1] 프로젝트 작성 +  - 프로젝트 작성 
-[2] 프로젝트명 설정 +  프로젝트명 설정 
-[3] 프로젝트 삭제+  프로젝트 삭제
 ==== A.3 Cloud Console 사용법 ==== ==== A.3 Cloud Console 사용법 ====
  
- 툴과 서비스 +  * 툴과 서비스 
- 대시보드+  대시보드
 ==== A.4 Cloud Shell 사용법 ==== ==== A.4 Cloud Shell 사용법 ====
  
  • public/computer/docker.txt
  • Last modified: 2021/08/08 21:00
  • by alex