클라우드

Cloud - 배포 컨테이너 - Docker Image

상상날개 2022. 8. 7. 12:59

1. 브라우저 속 게임 화면의 특정 단어 확인

  • 이미지는 sebcontents/part1을 이용한다
    - 태그는 latest 이다
    - sebcontents/part1은 아파치 웹 서버 이미지(httpd) 기반으로 commit된 새로운 이미지이다

 

https://hub.docker.com/r/sebcontents/part1/tags 에서 이미지를 가져온다

docker pull sebcontents/part1

  • Docker Hub에 저장되어 있는 이미지를 사용하는 경우, repository에 작성된 안내 사항을 필히 확인한다
  • sebcontents/part1 이미지의 repository로 이동하여 안내 사항을 참고하고, 컨테이너를 생성한다

  • 컨테이너를 통해 space 게임을 실행한다
    - 절대경로임에 유의한다

  • 127.0.0.1:3000 으로 접속하여 게임을 실행한다

 

 

2. 컨테이너 속 txt 파일 안에 있는 단어 확인

  • docker exec 명령어를 이용해 실습을 진행한다
  • 컨테이너_이름 부분에는 '1. 브라우저...'에서 사용한 컨테이너의 이름을 입력한다
  • 터미널(PowerShell)을 열어 이래 명령어를 입력한다
    - 컨테이너 안에서 bash shell을 실행하는 명령이다
    - git bash에서는 에러가 발생한다 
docker exec -it 컨테이너_이름 bash
  • root@ 다음에 오는 번호는 랜덤이다
  • 다음 과정을 순서대로 진행한다
    - cd / 명령어를 입력하여 루트 디렉토리로 이동한다
    - ls 명령어를 입력하여 루트 디렉토리에 data 폴더가 존재하는지 확인한다
root@538de4e5e997:/usr/local/apache2# cd /

root@538de4e5e997:/# ls

bin   data  etc   lib	 mnt  proc  run   srv  tmp  var  boot  dev   home  media  opt  root  sbin  sys  usr

 

      - cd data 명령어로 data 폴더로 이동한다
      - ls 명령어를 입력하여 quiz2.txt 파일이 존재하는지 확인한다

root@538de4e5e997:/# cd data

root@538de4e5e997:/data# ls

quiz2.txt

      - 명령어 apt update를 입력하여 apt 패키지 매니져를 업데이트 한다

root@538de4e5e997:/data# apt update


      - apt install nano 를 입력하여 nano 텍스트 에디터를 설치한다

root@538de4e5e997:/data# apt install nano

 

  • quiz2.txt 명령어를 입력해 quiz2.txt 파일 안에 적힌 단어를 확인한다
    - nano 창으로 이동하여 단어가 출력된다
nano quiz2.txt

  • 컨테이너 터미널은 exit명령어를 통해 종료할 수 있습니다.
 

3. 두 개의 Docker Image를 다루는 방식

  • nginx 이미지를 기반으로 한 sebcontents/client 이미지를 이용하여 client 컨테이너를 생성한다
  • spring 이미지를 기반으로 한 0xnsky/server-spring 이미지를 이용하여 server 컨테이너를 생성한다
  • localhost 의 8080 번 포트로 접속하면, sebcontents/client 이미지를 이용해 배포한 client 컨테이너의 80 번 포트로 연결한다

 1) docker-compose CLI

docker compose

 

Overview of docker compose CLI

 

docs.docker.com

 

  • docker-compose up # -d 명령어는 docker-compose.yaml에 정의된 이미지를 컨테이너로 실행한다
docker-compose up # -d

docker-compose down 명령어는 docker-compose.yaml에 정의된 이미지를 이용해 실행된 컨테이너를 종료한다

docker-compose down

docker-compose up 명령어는 특정 이미지만 컨테이너로 실행한다

docker-compose up {특정 이미지}

 

 2) 두 개 이상의 도커 컨테이너를 연결하는 docker-compose

  • docker-compose.yaml 혹은 docker-compose.yml 파일을 아래 소스 코드를 그대로 붙여넣어 생성한다
    - 파일을 생성할 때 터미널의 위치는 무관하다
    - 에디터를 사용해도 무관하다
version: '3.8'

services:
  nginx:
    image: sebcontents/client
    restart: 'always'
    ports:
      - "8080:80"
    container_name: client

  spring:
    image: 0xnsky/server-spring
    restart: 'always'
    ports:
      - "4999:3000"
    container_name: server-spring

  • yaml 파일이 있는 위치에서 docker-compose up -d명령어를 통해 yaml 파일을 실행한다
    - 새로운 서버가 도크에 생성된다
    - 두개의 컨테이너가 연결되어 있는것을 확인할 수 있다

  • 브라우저에서 localhost:8080 혹은 127.0.0.1:8080 에서 실행한다

 


3. Docker Volume

 

볼륨 (컴퓨팅) - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 컴퓨터 운영 체제 환경에서, 볼륨(volume) 또는 논리 드라이브(logical drive)는 하나의 파일 시스템을 갖춘 하나의 접근 가능한 스토리지 영역으로, 일반적으로(꼭

ko.wikipedia.org

 

도커 컨테이너 데이터 볼륨 관리

도커는 하나의 이미지로 부터 여러 컨테이너를 만들기 위해서 Union File system을 사용한다. 유니온 파일 시스템은 원본 이미지에 변경된 내용(diff)를 추가하는 방식이므로, 다른 컨테이너에서 사용

www.joinc.co.kr

 

  1. docker-compose.yaml 혹은 docker-compose.yml 파일을 다음의 내용을 그대로 붙여넣어 생성한다
    - 파일을 생성할 때 터미널의 위치는 무관하다
    - M1 칩을 사용하는 노트북은 사용하는 mysql 이미지가 다르다
    - 자신의 노트북 환경을 확인한 후 알맞은 yaml 파일을 생성한다
  • M1을 제외한 다른 노트북 모델용 yaml 파일
        version: '3.8'
        
        services:
          nginx:
            image: sebcontents/client
            restart: 'always'
            ports:
              - "8080:80"
            container_name: client
        
          spring:
            image: 0xnsky/server-spring
            restart: 'always'
            ports:
              - "4999:3000"
            container_name: server-spring
            volumes:
              - "./volumefolder:/data"
        
          mysql:
            image: mysql:latest
            restart: 'always'
            ports:
              - "3307:3306"
            container_name: database
            environment:
              MYSQL_ROOT_PASSWORD: root_계정_비밀번호
              MYSQL_DATABASE: 초기_생성_데이터베이스
              MYSQL_USER: 유저_이름
              MYSQL_PASSWORD: 유저_패스워드
        

 

  • M1 노트북용 yaml 파일
        version: '3.8'
        
        services:
          nginx:
            image: sebcontents/client
            restart: 'always'
            ports:
              - "8080:80"
            container_name: client
        
          spring:
            image: 0xnsky/server-spring
            restart: 'always'
            ports:
              - "4999:3000"
            container_name: server-spring
            volumes:
              - "./volumefolder:/data"
        
          mysql:
            image: amd64/mysql
            restart: 'always'
            ports:
              - "3307:3306"
            container_name: database
            environment:
              MYSQL_ROOT_PASSWORD: root_계정_비밀번호
              MYSQL_DATABASE: 초기_생성_데이터베이스
              MYSQL_USER: 유저_이름
              MYSQL_PASSWORD: 유저_패스워드
        
 
 

Mysql - Official Image | Docker Hub

We and third parties use cookies or similar technologies ("Cookies") as described below to collect and process personal data, such as your IP address or browser information. You can learn more about how this site uses Cookies by reading our privacy policy

hub.docker.com

 

  • docker-compose를 통해 컨테이너가 제대로 실행되었다면 로컬의 yaml 파일이 위치한 곳에 volumefolder 라는 디렉토리를 확인할 수 있다
    - volumefolder 디렉토리 속에 임의의 텍스트 파일 하나를 생성한다
  1. docker exec -it server-spring bash 명령어를 통해 server 컨테이너 터미널로 접속한다
    - 컨테이너 터미널에서 cd /data 명령어를 입력해 data 디렉토리로 이동한다
  2. server-spring 컨테이너의 /data위치에 2번 과정에서 여러분이 로컬에서 생성했던 임의의 텍스트 파일이 존재하는지 확인한다