11월 2일 (화) Docker, Part 1, Part2

남이섬·2021년 11월 2일
0

Part 1 - 한 개의 Docker 이미지를 다루는 방식 연습

Quiz 1: 브라우저 속 게임 화면의 특정 단어를 확인하세요.

  • 이미지는 sebcontents/part1을 이용해야 합니다. 태그는 latest 입니다.
  • sebcontents/part1은 아파치 웹 서버 이미지(httpd)를 기반으로 commit된 새로운 이미지 입니다.
  • Docker Hub에 저장되어 있는 이미지를 사용하는 경우, repository에 작성된 안내 사항을 확인하는 습관을 들이는 것이 중요합니다.
  • sebcontents/part1 이미지의 repository로 이동하여 안내 사항을 참고하고, 컨테이너를 생성합니다.
  • 컨테이너를 통해 space 게임을 실행해보세요. 소스 코드는 https://github.com/codestates/SpaceInvaders에 있습니다.
  • 게임 실행 후 다음 그림의 빨간 박스에 들어갈 단어가 무엇인지 확인하세요. Quiz 1의 정답입니다.

컨테이너이름 설정 및 port연결, 이미지 sebcontents/part1 사용

docker run --name 컨테이너_이름 -d -p 3000:80 sebcontents/part1

컨테이너 복사하여 게임 구동

docker container cp ./ part1:/usr/local/apache2/htdocs/

docker container cp 명령어를 입력해 로컬호스트에 있는 파일을 컨테이너에 전달

Quiz 2: 컨테이너 속 txt 파일 안에 있는 단어를 확인하세요.

  • docker exec 명령어를 이용해 실습을 진행합니다.
  • 컨테이너_이름 부분에는 quiz1 실습 과정에서 사용한 컨테이너의 이름을 입력하면 됩니다.
  • 터미널을 열어 다음 명령어를 입력합니다.
docker exec -it 컨테이너_이름 bash
  • 위 명령어를 입력하면 컨테이너 안에서 bash shell을 실행할 수 있다

  • root@ 다음에 오는 번호는 랜덤이다

1. cd / 명령어를 입력하여 루트 디렉토리로 이동

2. ls 명령어를 입력하여 루트 디렉토리에 data 폴더가 존재하는지 확인

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

4. 명령어 apt update 와 apt install nano 를 입력해 nano 텍스트 에디터를 설치

apt update

apt install nano
container 안에는 nano가 설치가 안되어 있기 때문에 다른 container로 접속한다면 nano를 다시 설치 해줘야 한다

5. nano quiz2.txt 명령어를 입력해 quiz2.txt 파일 안에 적힌 단어를 확인한다

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

Ubuntu 패키지 관리 툴: apt 사용법
apt는 Advancecd Package Tool 의 줄인 말이며,
리눅스 패키지를 관리하는 도구를 활용할 수 있는 명령이다

Ubuntu 관련 문서들을 보면 어떤 경우는 apt를 사용하라고 하고, 어떤 경우는 apt-get을 사용하라고 하는데, 사실 둘 중 어느 것을 사용해도 큰 차이는 없다

part 2 - 두 개의 Docker 이미지를 다루는 방식 연습

  • nginx 이미지를 기반으로 한 sebcontents/client 이미지를 이용하여 client 컨테이너를 생성한다
  • node 이미지를 기반으로 한 sebcontents/server 이미지를 이용하여 server 컨테이너를 생성한다
  • 이번 실습에서는 localhost 의 8080 번 포트로 접속하면, sebcontents/client 이미지를 이용해 배포한 client 컨테이너의 80 번 포트로 연결된다
  • 위 그림은 매우 간략하게 표현되어 있다 도커 네트워크에 대해서 좀 더 궁금하시다면 docker network, docker bridge 를 검색해 더 많은 정보를 찾을 수 있다

Nginx 란 ?
Nginx는 경량 웹 서버

클라이언트로부터 요청을 받았을 때 요청에 맞는 정적 파일을 응답해주는 HTTP Web Server로 활용되기도 하고,
Reverse Proxy Server로 활용하여 WAS 서버의 부하를 줄일 수 있는 로드 밸런서로 활용되기도 한다

docker network, docker bridge 란 ?

docker-compose up # -d 옵션을 함께 사용하면, 컨테이너를 백그라운드로 실행할 수 있다

docker-compose down

docker-compose up {특정 이미지}

  • 다음의 설명에 따라 docker-compose.yaml 파일을 생성
    • 소스 코드는 이미 작성되어 있다
    • docker-compose up -d을 통해 컨테이너를 구동
    • 결과를 localhost:8080 혹은 127.0.0.1:8080 에서 확인

Quiz 3 : client와 server를 동시에 구동해 로그인 후 나타나는 단어를 확인하세요.

  • docker-compose.yaml
    • yaml, yml은 같은 확장자다
    • 하나의 docker-compose에서 관리되는 컨테이너끼리는 동일한 docker network에서 구동
      • docker run 명령과 다르게 docker-compose 파일 안에서 기본 network가 사용된다
  1. docker-compose.yaml 혹은 docker-compose.yml 파일을 위의 소스를 그대로 붙여넣어 생성합니다. 파일을 생성할 때 터미널의 위치는 무관합니다.
  2. yaml 파일이 있는 위치에서 docker-compose up -d명령어를 통해 yaml 파일을 실행합니다.
  3. 브라우저에서 localhost:8080 혹은 127.0.0.1:8080 에서 실행된 client 화면을 확인한 후, 로그인 합니다. 로그인 정보는 브라우저 화면을 확인하세요.
  4. 로그인 후 나오는 단어를 확인하세요. Quiz 3의 정답입니다.
  1. 폴더를 생성한다

    mkdir <폴더이름>

  2. 폴더안에 docker-compose.yaml 혹은 docker-compose.yml 파일을 생성한다

touch docker-compose.yaml

  1. docker-compose.yaml 파일안에 코드를 붙여넣기 한다
version: '3.8'

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

  node:
    image: sebcontents/server
    restart: 'always'
    ports:
      - "5000:3000"
    container_name: server

  1. 브라우저에서 localhost:8080 혹은 127.0.0.1:8080 에서 실행된 client 화면을 확인한 후, 로그인 한다

Advanced (optional)

  • Volume
  • 환경 변수 설정하기

볼륨(Volume)

컴퓨터 운영 체제 환경에서, 볼륨(volume) 또는 논리 드라이브(logical drive)는 하나의 파일 시스템을 갖춘 하나의 접근 가능한 스토리지 영역으로, 일반적으로(꼭 필수는 아니지만) 하드 디스크의 단일 파티션에 상주한다.
볼륨이 물리 디스크 드라이브와 다를 수 있지만, 운영 체제의 논리 인터페이스로 접근할 수 있다. 그러나 볼륨은 파티션과는 차이가 있다.

데이터 볼륨

도커 컨테이너와 데이터 볼륨

  1. docker-compose.yaml 혹은 docker-compose.yml 파일을 다음의 내용을 그대로 붙여넣어 생성한다
    파일을 생성할 때 터미널의 위치는 무관하다
    [주의] M1 칩을 사용하는 노트북은 사용하는 mysql 이미지가 다르다, 반드시 자신의 노트북 환경을 확인한 후 알맞은 yaml 파일을 생성하자
version: '3.8'

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

  node:
    image: sebcontents/server
    restart: 'always'
    ports:
      - "5000:3000"
    container_name: server
    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: 유저_패스워드
  1. docker-compose를 통해 컨테이너가 제대로 실행되었다면 로컬의 yaml 파일이 위치한 곳에 volumefolder 라는 디렉토리를 확인할 수 있습니다. volumefolder 디렉토리 속에 임의의 텍스트 파일 하나를 생성합니다.

  2. docker exec -it server bash 명령어를 통해 server 컨테이너 터미널로 접속한 후, 컨테이너 터미널에서 cd /data 명령어를 입력해 data 디렉토리로 이동합니다.

  3. server 컨테이너의 /data위치에 2번 과정에서 여러분이 로컬에서 생성했던 임의의 텍스트 파일이 존재하는지 확인합니다.


  1. docker-compose.yaml파일에 상위의 코드를 복사 붙여 넣기 한다

  2. 터미널에 docker-compose up -d 명령어를 실행한다
    volumefolder 자동 생성

  1. volumefolder안에 임의의 파일을 만든다
  1. docker exec -it server bash 명령어를 통해 server 컨테이너 터미널로 접속한 후, 컨테이너 터미널에서 cd /data 명령어를 입력해 data 디렉토리로 이동 후,
    server 컨테이너의 /data위치에 2번 과정에서 여러분이 로컬에서 생성했던 임의의 텍스트 파일이 존재하는지 확인한다

profile
즐겁게 살자

1개의 댓글

comment-user-thumbnail
2023년 2월 21일

안녕하세요 운영자님
인카토스입니다.
먼저, 댓글로 인사를 드리게 된 점 양해 부탁 드립니다.
이렇게 연락 드린 이유는 이번에 저희가 제작한 도커 각티슈케이스 제품 협찬을 제안드리고 싶어서 연락 드렸습니다.
개발자들에게 많은 사랑은 받은 각티슈케이스입니다.
저희 상품 블로그 포스팅이 가능하실지 여쭙고자 연락드렸습니다.
아니면 클리앙,서버포럼, okky,2cpu,그누보드 등 가입되어 있으신 개발자 커뮤니티가 있으시다면 해당 커뮤니티에 아래와 비슷하게 게시글을 올려주실수 있을까요?

클리앙 : https://www.clien.net/service/board/park/17797443

연락드릴수 있는방법이 댓글밖에 보이지 않아 이렇게 먼저 연락드립니다.

협찬제안에 긍정적인 검토 부탁드리고 제안이 마음에 드신다면 하기 메일로 메일주시면 제품 보내드리도록 하겠습니다.

sungjh0726@naver.com

협찬제품 링크 : https://incatos.shop/surl/P/11

답글 달기