0%

T아카데미 토크ON세미나 54차 '쿠버네티스 살펴보기' : 3강 실습하기 Docker & Docker Compose

이 포스트는 2019년 6월 29일 토요일, SK플래닛 T아카데미에서 진행됐던 세미나에 가서 청강하고 작성했습니다.
현재 세미나 강의와 자료는 추후 이 곳에서 확인하실 수 있습니다.
노트 필기식으로 작성한 내용이기에, 존댓말을 사용하지 않은 점 참고하시기 바랍니다.
AWS Lightsail 서비스로 실습 진행되었습니다.

* 발표자 : 김충섭 (퍼플웍스) 님


개발 환경 설정

jq - docker - k3s - Local path provisioner - code server 설치


Docker 실습 시작

‘19차 T아카데미 세미나 : 컨테이너 기반 가상화 플랫폼 도커(Docker)의 이해’ 블로그 포스트 참고

페이지를 참조하며 실습을 합니다.

컨테이너 실행

실행중인 컨테이너 화면

컨테이너 목록

  • 컨테이너 목록 확인 명령어
1
docker ps -a

컨테이너 목록 확인

컨테이너 로그

1
docker logs xxx

컨테이너 종료

1
docker stop xxx

컨테이너 삭제

1
docker rm xxx

이미지 목록

1
docker images

네트워크 생성

1
docker network create app-network

네트워크에 연결된 컨테이너 생성

1
2
3
4
5
6
7
8
9
# mysql 컨테이너 실행
docker run -d \
-e MYSQL_ALLOW_EMPTY_PASSWORD=true \
--name mysql \
--network=app-network \
mysql:5.7

# mysql 컨테이너에 접속하여 mysql 실행
docker exec -it mysql mysql
  • 이후 동작해야하는 항목 (WordPress 연동 DB 구축)
1
2
3
4
create database wp CHARACTER SET utf8;
grant all privileges on wp.* to wp@'%' identified by 'wp';
flush privileges;
quit
  • mysql 컨테이너 종료 이후
1
2
3
4
5
6
7
docker run -d -p 8000:80 \
--network=app-network \
-e WORDPRESS_DB_HOST=mysql \
-e WORDPRESS_DB_NAME=wp \
-e WORDPRESS_DB_USER=wp \
-e WORDPRESS_DB_PASSWORD=wp \
wordpress

예제

문제에 대한 제가 작성한 답입니다. 답이 아닐 수 있으니 참고해주세요.

풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
docker run -d -p 27017:27017 \
--network=app-network \
--name mongodb mongo:4

docker run -d -p 8887:8887 \
-e PORT=8887 \
-e GUESTBOOK_DB_ADDR=mongodb:27017 \
--network=app-network \
--name apiserver \
subicura/guestbook-backend:latest

docker run -d -p 8888:8888 \
-e PORT=8888 \
-e GUESTBOOK_API_ADDR=apiserver:8887 \
--network=app-network \
--name guestbook \
subicura/guestbook-frontend:latest
  • 이름은 소문자로 지정해주세요 (대문자로 지정하면, 네트워크 결합이 안됩니다)

정리

1
2
3
docker stop xxx
docker rm xxx
docker system prune -a

참고 : prune 시도 화면

  1. 이전
    docker prune 이전
  2. 이후
    docker prune 이후

Docker-compose 실습

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
version: '3'
services:
mongodb:
image: mongo:4
ports:
- "27017:27017"
restart: always

backend:
image: subicura/guestbook-backend:latest
ports:
- "8887:8887"
environment:
PORT: "8887"
GUESTBOOK_DB_ADDR: "mongodb:27017"
restart: always

frontend:
image: subicura/guestbook-frontend:latest
ports:
- "8888:8888"
environment:
PORT: "8888"
GUESTBOOK_API_ADDR: "backend:8887"
restart: always

restart:always

  • 이 옵션을 줘야 순서에 상관없이 실행이 되더라도 오류없이 모두 실행이 된다. docker-compose up 을 하면 기재된 순서에 상관없이 1-3-2 2-3-1 3-2-1 1-2-3 등의 랜덤 순서로 실행되기 때문에 반드시 restart:always 옵션을 기재해야한다.

depends_on

  • 이 옵션은 docker-compose 구형 버전 작성시 의존성을 명시해 순서대로 실행시킬 수 있다.