반응형

 

VM 인스턴스를 생성하려면 구글 계정을 등록부터 해야 합니다. https://cloud.google.com 에서 계정 등록 후 콘솔창까지 접속해 주세요. (https://console.cloud.google.com/)

 

  • 1. Compute Engine API 설정

API 및 서비스 → 라이브러리 클릭

 

compute engine api 검색 후 클릭

 

처음이신분들은 여기서 "사용 설정" 이라고 나올텐데, 사용 설정을 클릭한 후 완료 될때까지 기다려 줍니다.

 

  • 2. 새 프로젝트 생성

굳이 할 필요는 없지만, 좀 더 깔끔히 사용하기 위해 프로젝트를 생성 하겠습니다.

콘솔창에서 상단에 표시한 부분을 누른 후 창이 뜰텐데, 여기서 새 프로젝트를 눌러 주세요.

 

프로젝트명을 적당히 수정하여 만들어 주세요.

 

  • 3. VM 인스턴스 생성

콘솔창의 좌측 메뉴에서 Compute Engine → VM 인스턴스를 클릭합니다.

 

처음이라면 아래와 같은 화면이 나타나면서 잠시 기다리라고 할텐데, 약 1분정도 후 완료 되면 만들기를 눌러줍니다.

 

이름을 작성해 주시고 원하는 사양의 CPU를 골라 주시고, 부팅 디스크쪽에서 사용하실 OS 및 HDD 크기를 지정해주시면 됩니다. (금년도에 서울 리전이 생겼습니다. 리전을 서울로 선택 해주세요.)

 

개인 공부용으로 원활히 사용하기 위해 아래에 표시한것과 같이 체크 하였습니다.

 

  • 4. VM 인스턴스 SSH 접속

VM 인스턴스 생성 이후 아래와 같이 확인이 가능 합니다. 

 

이름을 클릭하면 아래와 같은 화면이 나오는데, 원격 액세스에 있는 SSH를 클릭하면 웹페이지로 SSH 접속이 가능합니다.

 

반응형
반응형

 

리눅스에서 docker-compose 명령어를 사용하려면 docker와는 별개로 docker-compose가 설치되어 있어야 합니다. (설치 방법 : https://nirsa.tistory.com/76?category=868315)

 

  • 버전 확인

docker-compose --version

 

  • docker-compose up

컨테이너를 생성 및 실행 합니다.

docker-compose up [옵션] [서비스명]
옵션 설명
-d 백그라운드 실행
--no-deps 링크 서비스 실행하지 않음
--build 이미지 빌드
-t 타임아웃을 지정(기본 10초)

참고로 특정 서비스들의 경우 백그라운드로 실행하지 않으면 컨테이너가 생성 및 실행되며 바로 종료될 수 있습니다.

 

  • docker-compose ps

현재 동작중인 컨테이너들의 상태를 확인할 수 있습니다.

docker-compose ps

 

  • docker-compose logs

컨테이너들의 로그를 출력 합니다.

docker-compose logs

 

  • docker-compose run

docker-compose up 명령어를 이용해 생성 및 실행된 컨테이너에서 임의의 명령을 실행하기 위해 사용 합니다.

컨테이너들을 모두 삭제할 경우 docker-compose start가 아닌, docker-compose up으로 다시 컨테이너들을 생성 해주어야 합니다.

docker-compose run

 

만약 특정 서비스에서 /bin/bash를 실행시켜 쉘 환경으로 진입하고 싶다면 아래와 같은 명령어를 이용하면 됩니다. 참고로 서비스명과 컨테이너명은 다른겁니다.

서비스명은 docker-compose.yml의 services: 밑에 작성한 서비스 이름 입니다.

# docker-compose run [서비스명] [명령]
docker-compose run redis /bin/bash

 

  • docker-compose (start / stop / pause / unpause / restart)

여러개의 서비스 또는 특정 서비스를 시작 / 정지 / 일시정지 / 재시작을 할 수 있습니다.

# 서비스 시작
docker-compose start

# 서비스 정지
docker-compose stop

# 서비스 일시 정지
docker-compose pause

# 서비스 일시 정지 해제
docker-compose unpause

# 서비스 재시작
docker-compose restart

각각의 설정 뒤에 서비스명을 붙이면 특정 서비스만 제어할 수 있습니다. (ex. docker-compose restart [서비스명])

 

  • docker-compose rm

docker-compose로 생성한 컨테이너들을 일괄 삭제 합니다. (삭제 전, 관련 컨테이너들을 종료 시켜두어야 합니다.)

docker-compose rm

 

  • docker-compose kill

실행중인 컨테이너를 강제로 정지 시킵니다. 

-s옵션을 사용하여 시그널을 지정해줄 수 있는데, 아래 코드에서는 SIGINT를 사용 하였습니다. -s 옵션을 사용하지 않고 docker-compose kill만 사용할 경우 SIGKILL 이 전송 됩니다.

kill 뒤에 서비스를 지정하여 특정 서비스만 kill할 수 있습니다.

# docker-compose kill [옵션]
docker-compose kill -s SIGINT

 

  • docker-compose down

네트워크 정보, 볼륨, 컨테이너들을 일괄 정지 및 삭제 처리 합니다.

docker-compose down

만약 docker-compose down --rmi all 명령을 사용한다면 모든 이미지까지 삭제 합니다.

 

  • docker-compose port

서비스 프라이빗 포트 번호의 설정을 확인할 수 있습니다.

# docker-compose port [서비스명] [프라이빗 포트 번호]
docker-compose port nginx 80

 

  • docker-compose config

docker-compose 구성 파일의 내용을 확인할 수 있습니다. docker-compose.yml의 내용을 출력 해주므로 많이 쓸일은 없습니다.

docker-compose config

 

반응형
반응형

 

1편 (image, build, command, entrypoint, links) : https://nirsa.tistory.com/79?category=868315

 

  • 5. ports

ports는 호스트OS와 컨테이너의 포트를 바인딩 시켜줍니다. 참고로 아래 docker-compose.yml을 작성할 때 주의해야할 점이 있는데 "8080:8080"와 같이 작성할 경우 반드시 따옴표와 함께 사용하여 문자열로 지정 해주어야 합니다.

형식은 "host:container" 또는 "container" 등으로 사용 됩니다. 아이피를 지정해준다거나, 포트의 범위 등 설정이 가능하고 자세한 설정들은https://docs.docker.com/compose/compose-file/ 를 참고해주세요.

* 이 명령은 docker-compose up 명령으로 실행할 때만 적용이 되므로 docker-compose run 명령으로 실행해야할 경우 --service-ports 옵션을 사용해주세요. (포트를 다시 입력하여활성화 시키고 필요에 따라 호스트와 맵핑시켜주는 역할을 합니다)

# docker-compose.yml
version: "3"
services:
  nginx:
    build: .
    ports:
      - "8080:8080"
      #또는
      - target: 8080       ## 컨테이너 내부 포트
        published: 8080    ## 호스트OS에서 공개할 포트
        protocol: tcp      ## 포트 프로토콜
# Dockerfile
FROM centos:7

RUN touch /etc/yum.repos.d/nginx.repo && echo -e '[nginx]\nname=nage repo\nbaseurl=http://nginx.org/packages/centos/7/$basearch/\ngpgcheck=0\nenabled=1' > /etc/yum.repos.d/nginx.repo

RUN yum -y install nginx

CMD ["nginx", "-g", "daemon off;"]

 

  • 6. expose

expose는 호스트OS에 포트를 공개하지 않고, 컨테이너만 포트를 공개 합니다. 호스트OS와 직접 연결되지 않고 링크등으로 연결된 컨테이너-컨테이너간의 통신만이 필요한 경우 등에 사용 됩니다.

 

아래와 같이 작성 후 docker-compose up -d --build 로 실행하고 netstat -antop 사용 시 호스트 OS에는 포트가 공개되지 않고, docker container ls 명령 등으로 컨테이너에서만 포트가 공개되는걸 확인할 수 있습니다. (Dockerfile에 EXPOSE가 명시되어 있다면 docker-compose에서는 작성하지 않아도 됩니다)

# docker-compose.yml
version: "3"
services:
  nginx:
    build: .
    expose:
      - "8080"
# Dockerfile
FROM centos:7

RUN touch /etc/yum.repos.d/nginx.repo && echo -e '[nginx]\nname=nage repo\nbaseurl=http://nginx.org/packages/centos/7/$basearch/\ngpgcheck=0\nenabled=1' > /etc/yum.repos.d/nginx.repo

RUN yum -y install nginx

CMD ["nginx", "-g", "daemon off;"]

 

 

  • 7. depends_on

depends_on 명령은 서비스간의 종속성 순서대로 서비스를 시작할 수 있습니다. 예를들어 nginx와 redis라는 두 이미지가 있을 때 redis부터 실행하고 nginx를 실행해야 할 경우 등에 사용 됩니다.

 

아래 코드는 redis 이미지를 docker hub 에서 다운로드 받고, 먼저 실행한 뒤 nginx를 실행 합니다.

# docker-comse.yml
version: "3"
services:
  nginx:
    build: .
    depends_on:
      - redis
    redis:
      image: redis
# Dockerfile
FROM centos:7

RUN touch /etc/yum.repos.d/nginx.repo && echo -e '[nginx]\nname=nage repo\nbaseurl=http://nginx.org/packages/centos/7/$basearch/\ngpgcheck=0\nenabled=1' > /etc/yum.repos.d/nginx.repo

RUN yum -y install nginx

CMD ["nginx", "-g", "daemon off;"]

 

하지만 depends_on의 가장 큰 단점이 있는데 위 예제같은 경우 redis를 실행한 뒤 nginx를 실행해야 하는데, redis가 완전히 실행되고 준비가 될 때 까지 기다리지 않습니다. 

때문에 depends_on을 사용할때엔 시작과 종료 순서에 대해 제어를 해주어서 정상적으로 준비가 된 뒤 다음 서비스가 실행되도록 해주어야 합니다. 이 내용은 다음에 업로드 하겠습니다.

제어 관련 참고 사이트 : https://docs.docker.com/compose/startup-order/

 

  • 8. environment, env_file

이 두 명령어는 dockerfile의 env 명령과 같이 컨테이너의 환경 변수를 지정해줄 수 있습니다. (참고:https://nirsa.tistory.com/69?category=868315) env_file은 docker-compose가 아닌 다른 파일에 지정할 환경 변수들을 모아두고, 해당 파일을 읽어와서 사용할 때 사용 됩니다.

## docker-compose.yml
#environment

environment:
  - RACK_ENV=devlopment
  - SHOW=true
  
  #또는
environment:
  RACK_ENV: devlopment
  SHOW: 'true'
## docker-compose.yml
#env_file

env_file: .env
  
  #또는

env_file:
  - ./common.env
  - ./apps/web.env

 

  • 9. container_name

컨테이너 이름을 지정해 줍니다.

# docker-compose.yml

# container_name: [사용할 컨테이너명]
container_name: nginx

 

  • 10. labels

이미지 구성이나 라이센스 기록, 컨테이너, 볼륨 및 네트워크간의 관계에 주석을 달거나 할때에 사용 됩니다.

라벨은 키-값 쌍이며 문자열로 저장 됩니다. 여러개의 라벨을 지정할 수 있지만 각각의 키-값 쌍은 유일해야하는데, 만약 동일한 키에 여러 값이 작성되면 가장 최근에 작성된 값이 이전 모든 값을 덮어 씁니다.

 

일반적으로 다른 S/W의 라벨과 중복되어 겹치는 일이 없도록 역 DNS 표기법을 사용하여 코멘트를 달아놓습니다.

# docker-compose.yml

build:
  context: .
  lablees:
    com.example.description: "nirsa nginx"
    com.example.department: "Finance"

 

  • 11. volumes, volumes_from

dockerfile에서 사용되던 volume과 같이 컨테이너에 볼륨을 마운트 할 때에 사용 됩니다. host:container 방식으로 사용되고 마지막에 :ro 를 추가하여 볼륨을 읽기 전용으로 사용할 수 있습니다.

# docker-compose.yml
volumes:
  - /var/log/test:/var/log
  - ~/configs:/etc/configs/:ro

아래 코드는 volumes_from 을 이용하여 log라는 컨테이너로 마운트 합니다. 

# docker-compose.yml

volumes_from:
  - log

 

volumes도 활용 범위가 매우 많아 나중에 업로드 할것이고 자세한건 https://docs.docker.com/compose/compose-file/ 를 참고해주세요.

반응형
반응형

 

docker-compose는 여러개의 컨테이너 설정 내용을 하나의 파일에 모아서 사용하는 YAML 파일 입니다. 이 docker-compose는 컨테이너의 서비스(services:), 네트워크(networks:), 볼륨(volumes:)을 정의 합니다.

docker-compose의 버전에 따라 여러 차이가 있기 때문에 작성할 때엔 아래처럼 버전을 정의 해주는것이 좋습니다.

version: "3"

docker compose의 기본적인 실행/중지 명령은 docker-compose up, docker-compose stop 이고, 실행 시키면서 빌드를 진행할 때에는 docker-compose up --build 를 사용 합니다.

 

  • 1. image

docker-compose 안에서 베이스 이미지를 지정할 수 있습니다. docker build를 할때와 마찬가지로 베이스 이미지가 로컬 환경에 없다면 Docker hub에서 다운로드하여 베이스 이미지로 사용되고, 로컬 환경에 있다면 그 이미지를 베이스 이미지로 사용하게 됩니다.

services:			     	# 컨테이너의 서비스라는것을 정의
  nginx:    				# [이미지명]:
    image: centos:7		    # image: [이미지명]:[태그명]

 

  • 2. build

1번은 어떤 베이스 이미지를 사용할 지 docker-compose 안에서 선언을 해주었다면, docker-compose에서 선언하여 Dockerfile을 이용해 자동으로 docker build 후 베이스 이미지로 사용할 수 있습니다.

# docker-compose.yml
services:
  nginx:
    build: .
# Dockerfile
FROM centos:7

위와 같이 설정 후 docker-compose up 명령어를 입력하면 자동으로 Dockerfile을 빌드하여 베이스 이미지를 만들고 centos를 기반으로 한 nginx 이미지를 생성해줍니다.

 

만약 Dockerfile의 경로나 이름이 다른곳에 있다면 아래와 같이 특정 Dockerfile을 지정해줄 수 있습니다.

services:
  nginx:
  build:
    context: /mnt/backup			## Dockerfile이 있는 경로 (절대경로 또는 상대경로)
    dockerfile: Dockerfile-agent    ## 파일명이 Dockerfile이 아닐 경우 파일명 기입

 

args 으로 인수를 지정해줄 수 있는데, Dockerfile에서 ARG 또는 ENV로 지정한 변수에 값을 넣거나 할 수 있습니다. (args는 Dockerfile의 ARG와 비슷 합니다. docker-compose 명령이 실행되는 구간에서만 적용 됩니다.)

build 문법을 사용할 때에 하위 옵션(context, args 등)을 사용하게 되면 build: 옆에 인수를 비워두고 하위 옵션에 작성해주어야 합니다. 아래 코드를 참고 하시고, Dockerfile에 있는 환경변수 number에 docker-compose.yml을 이용하여 args로 환경변수에 값을 넣어준 결과 입니다.

# docker-compose.yml
version: "3"
services:
  nginx:
    build:
      context: .
      args:
        number:1
# Dockerfile
FROM centos:7

ARG number
RUN echo "$number"

 

  • 3. command / entrypoint

Dockerfile의 cmd,entrypoint와 거의 같습니다. 하지만 Dockerfile의 entrypoint보다 docker-compose의 entrypoint가 우선 순위가 높습니다.

즉, 아래 이미지와 같이 Dockerfile에 entrypoint를 정의 하여도 docker-compose를 실행 및 빌드할 때에 Dockerfile의 entrypoint를 덮어써서 docker-compose에 작성한 명령이 실행 됩니다.

# docker-compose.yml
version : "3"
services:
  nginx:
    build: .
    entrypoint: cat /etc/hosts
    # 또는
    entrypoint:
      - /bin/cat
      - /etc/hosts
# Dockerfile
FROM centos:7

ENTRYPOINT ["/bin/ls", "-lh", "/root"]

 

  • 4. links

links는 각 컨테이너들을 연결시켜주는 역할을 하는데, links는 Docker의 레거시 기능으로 Docker 공식 홈페이지에서도 권장하지 않는 명령 입니다. 네트워크 설정을 통해 연결 시켜 주거나 Volumes를 이용하는것을 권장 하기 때문에 links에 대한 설명은 패스 하겠습니다.

links:
  - webserver  # 연결할 컨테이너명

 

 

2편 (ports, expose, depends_on, nevironment, env_file, container_name, labels, volumes, volumes_from) : https://nirsa.tistory.com/80?category=868315

 

반응형

+ Recent posts