본문 바로가기

코리아IT아카데미 [국비과정]/수업

[Docker] 설치 및 기능(push/pull/load 등)

Docker

ca-certificates curl
HTTP, FTP 등 다양한 프로토콜 제공
(웹 통신을 위한 인증서)
 
iptables-persistent
네트워크 트래픽을 필터링
방화벽 기능 제공, 패킷 검사 등
(재부팅 후에도 계속 유지)
 

현재 시스템에서 설정된 IPv4 방화벽 규칙을
영구적으로 저장할 것인지 여부를 물음
(전부 예)
 

vi /etc/ssh/sshd.config 설정파일에서
PermitRootLogin yes로 설정하여
SSH를 통한 root 원격 로그인 허용함
(Putty 접속하기 위함)
 

설정에서 네트워크 톱니바퀴
IPv4에서 수동으로 변경 후 
ip, netmask, gateway, dns 설정
 

(오) putty 접속

네트워크 재시작 후 ifconfig를 통해
설정이 잘 되었는지 확인
ssh (putty)로 접속되어야함
 

GPG : 디지털 서명을 생성 및 검증
Docker의 GPG 키를 다운로드함
다운로드한 GPG 키를 APT 시스템에 추가
(도커를 안전하게 설치하게끔 도와주는 과정)
OK가 나오면 성공
 

Docker GPG 키의 지문을 출력하여
신뢰할 수 있는 출처에서 온 것인지
검증하는 작업임 (역시 준비과정)
 

다운로드한 GPG 키를 이진 형식으로 변환 후
APT가 신뢰할 수 있도록 시스템에 저장
(도커 설치 시 진위성을 검증할 수 있게 됨)
 

Docker의 공식 저장소를 
APT 소스 리스트에 추가
현재 Ubuntu 버전에 맞는 저장소를 자동 선택
 

Docker와 관련된 주요 패키지들을 한 번에 설치
에디션, 런타임, 멀티플랫 폼 빌드 등
 

설치된 Docker 버전 정보 확인,
시스템 부팅 시 자동으로 실행 설정 후
Docker 서비스 즉시 시작함
 

https://hub.docker.com에서 가입/로그인한 후
Repositories 탭 → Create a Repository 페이지
리포지토리를 생성함

Repository Name 입력 후
Public 체크하여 해당 리포지토리
접근 권한을 설정함 (공개:누구나 접근 가능)
 

리포지토리 생성 후 oraclelinux 검색
oraclelinux → Tags 탭 
 

Oracle Linux 8 버전 이미지를 복사
 

Oracle Linux 8 이미지를 다운로드
로컬 시스템으로 가져옴
해당 이미지 기반 컨테이너를 사용

 

Docker 이미지 목록을 표시
이미지 파일 가져온 것을 확인
 

nginx 검색 → Tags 탭 → latest 검색
nginx는 웹 서버 기능을 지원하는 오픈 소스
소프트웨어 (프록시 및 로드 밸런싱)
Nginx에서 latest 태그로 조회함 (최신버전)
 

Nginx 최신 버전을 로컬 시스템으로 다운
(latest 태그가 지정됨)
 

이미지 파일 목록에서 로컬 시스템으로
잘 가져온 것을 확인

image rm 명령을 통해 특정이미지 삭제
rm 뒤에는 삭제하려는 IMAGE ID를 입력
oraclelinux 이미지 삭제함
 

Nginx 웹 서버를 실행하는 컨테이너 생성
컨테이너 이름을 sevas-web으로 지정
(80번 포트로 실행, 외부 접속 가능)
 
Ctrl + p + q 차례로 키를 누르면 종료됨
(눌러서 종료하기)
 

container ls -a 명령을 입력하여
로컬 시스템에서 실행 중인 
모든 컨테이너 목록을 출력함
(종료 된 sevas-web 확인)
 
삭제는 docker container rm 명령어임
rm 뒤 container ID 입력하면 해당 컨테이너 삭제
 

-it : 인터랙티브 세션을 유지함
실행중인 컨테이너 sevas_web에
인터랙티브 모드로 접속, Bash 셸을 실행
(도커 진입, 명령 실행하고 내부 조작가능)
 

웹 서버가 실행되어 웹 접속이 가능함
 

html 경로는 리눅스와 다르게 
/usr/share/nginx/html에 있음
 

html 코드를 작성 <h1> 태그 수정
SEVAS4_WEB_TEST 
 

SEVAS4_WEB_TEST 잘 나오는 것을 확인
 

sevas4_web 컨테이너의 상태를
hanpil00/ksevas130:webtest라는 
이름과 태그로 Docker 이미지를 생성함
 
save : 이미지를 파일로 저장함
-o : 출력 파일 이름을 지정
생성한 이미지를 export.tar라는 파일로 저장함
 

위에 생성한 리파지토리 ID 및 PW 입력
Docker Hub / Docker 레지스트리에 로그인
이미지를 push하거나 pull 할 수 있음
 

Docker 이미지를 레지스트리에 업로드함
푸시하여 공유하거나 배포할 수 있음

 https://hub.docker.com에서
리파지토리에 푸시되어 업로드 완료됨
 

-a 모든 컨테이너를 보여줌
-q : 간단히 출력 (ID)
현재 실행중인 모든 컨테이너를 정지 후 삭제함
(전체 컨테이너 정리)
 

 현재 시스템에 있는 모든 Docker 이미지를 삭제
 

Docker Hub에서 저장소(ksevas130)에서
이미지 하나를 다운로드함
 
다운받은 이미지로부터 컨테이너를 실행
외부에서 접속 가능하게 포트 매핑함
 

웹 접속시 위 작성한 웹 페이지 확인
방금 전 모든 이미지를 삭제했지만
업로드 되어있는 레파지토리에 pull하여
이미지를 다운받아 다시 불러와짐
 

해당 이미지를 삭제했지만
load 명령어를 통해 불러옴
export.tar라는 파일 안에 저장된 도커
이미지를 내 로컬 도커 환경에 복원함
 

강사님의 리파지토리 이미지를 다운로드함
80번 포트로 매핑하여 웹 서버에 접속
 

웹페이지 확인
 

정리

=============================================================================================
0. 로그인
docker -u [ID]
=============================================================================================
1. 이미지 불러오기
[도커 이미지 찾기]
-Docker search [이미지명]
ex) docker search oraclelinux 
웹에서 직접들어가서 tag까지 가져오기

[도커 이미지 가져오기]
-Docker pull [이미지명]  [기본 latest]
ex) docker pull oraclelinux:8

[도커 이미지 확인]
-Docker image ls
ex) docker image ls

[도커 이미지 삭제]
-Docker image rm [IMAGE_ID]
ex) docker image rm c995dabce148
=============================================================================================
2. 컨테이너 생성 및 제
(로컬)
docker run -d [컨테이너이름]  [이미지repo/tag]
docker exec -it  [컨테이너이름] /bin/bash

(포트포워딩)
docker run -d [컨테이너이름] -p [외부포트]:[내부포트]  [이미지repo/tag]
docker exec -it  [컨테이너이름] /bin/bash

(IP확인)
docker network inspect bridge
=============================================================================================
3. 생성 컨테이너 이미지화 

적용이미지 생성 : docker container commit [컨터이너 이름] [repo:tag]
백업 : docker image save -o export.tar [repo:tag]
불러오기 : docker image load -i export.tar 
=============================================================================================
4. 태그 변경 
docker image tag [원본 repo:tag] [수정 repo:tag]
=============================================================================================
5. 업로드 
docker push repo:tag
=============================================================================================
6. 기타 서비스실행

docker start/stop [컨테이너이름]
docker rm [컨테이너 이름] 
docker rm $(docker ps -aq)
docker image $(docker image ls -q)
docker images 
=============================================================================================