Cloud - 배포 컨테이너 - Docker Image
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로 이동하여 안내 사항을 참고하고, 컨테이너를 생성한다
- 소스 코드는 https://github.com/codestates-seb/SpaceInvaders에 있다
- 소스코드를 클론한다
- 컨테이너를 통해 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
- Overview of docker compose CLI : https://docs.docker.com/compose/reference/
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이라는 개념이 있다
- 볼륨 : https://ko.wikipedia.org/wiki/%EB%B3%BC%EB%A5%A8_(%EC%BB%B4%ED%93%A8%ED%8C%85)
볼륨 (컴퓨팅) - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 컴퓨터 운영 체제 환경에서, 볼륨(volume) 또는 논리 드라이브(logical drive)는 하나의 파일 시스템을 갖춘 하나의 접근 가능한 스토리지 영역으로, 일반적으로(꼭
ko.wikipedia.org
- 도커 컨테이너 데이터 볼륨 관리 : https://www.joinc.co.kr/w/man/12/docker/Guide/DataWithContainer
도커 컨테이너 데이터 볼륨 관리
도커는 하나의 이미지로 부터 여러 컨테이너를 만들기 위해서 Union File system을 사용한다. 유니온 파일 시스템은 원본 이미지에 변경된 내용(diff)를 추가하는 방식이므로, 다른 컨테이너에서 사용
www.joinc.co.kr
- 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: 유저_패스워드
- Docker Hub의 mysql 이미지의 description 을 잘 읽고, 환경 변수 설정과 사용 방법을 확인한다
- https://hub.docker.com/_/mysql
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 디렉토리 속에 임의의 텍스트 파일 하나를 생성한다
- docker exec -it server-spring bash 명령어를 통해 server 컨테이너 터미널로 접속한다
- 컨테이너 터미널에서 cd /data 명령어를 입력해 data 디렉토리로 이동한다 - server-spring 컨테이너의 /data위치에 2번 과정에서 여러분이 로컬에서 생성했던 임의의 텍스트 파일이 존재하는지 확인한다