'IT 지식/Docker'에 해당되는 글 5건

IT 지식/Docker

Windows Subsystem for Linux (ubuntu)에 Docker 설치

맥에서는 docker 설치와 운용이 쉬웠는데, 맥북이 망가지고 윈도우 컴퓨터를 사용하고 있으니 Docker 사용이 생각보다 쉽지 않았다.

그래서 저번에 Windows Subsystem for linux (ubuntu)를 설치하고 여기에 docker를 올려보면 어떨까 싶어서 도전해 보았다. 

우선 docker engine는 WSL에서 실행되지 않아서 호스트 컴퓨터에 Windows용 Docker를 설치해야한다. 그리고 나서 Linux(ubuntu)에서 실행되는 Docker 클라이언트(WSL)가  Windows에 설치된 Docker Engine 데몬으로 명령어를 보내서 운용할 수 있다.

우선 Ubuntu에 Docker를 설치해보자.

1. 우선 패키지를 업데이트 한다.

1
sudo apt-get update
cs


2. 그리고 apt에서 https를 통해 저장소를 사용할 수 있도록 패키지들을 설치한다.

1
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
cs


3. Docker의 공식 GPG키를 추가한다.

1
2
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add 
$ sudo apt-key fingerprint 0EBFCD88
cs


4. Docker를 설치한다.

1
2
$ sudo apt-get update
$ sudo apt-get install docker-ce
cs

이렇게 하면 Linux에 설치가 완료되나 Docker Engine은 WSL에서 실행되지 않으므로 윈도우와 연결해야한다.

먼저 Docker 호스트가 있는 Docker 클라이언트에게 알려주어야 하므로 다음 명령어를 사용한다.

1
2
3
4
5
$ 도커 -H localhost : 2375 이미지
 
// 매번 하기 귀찮으면 환경변수에 등록
$ export DOCKER_HOST = localhost : 2375
$ echo "export DOCKER_HOST = localhost : 2375">> ~ / .bash_profile
cs


그리고 Windows에서 데몬을 공개해주어야 정상적으로 동작한다.


이미지를 다운받아보고 docker 명령어를 사용해보면 정상적으로 연결이 되는 것을 확인할 수 있다.



https://medium.com/@sebagomez/installing-the-docker-client-on-ubuntus-windows-subsystem-for-linux-612b392a44c4

IT 지식/Docker

Spring Boot 빌드 파일을 이미지로 만들어 컨테이너에 올리기.

스프링 부트 애플리케이션을 Docker image로 빌드해서 컨테이너에 올리는 작업을 진행해 보겠다.

 

필요사항

  • JDK 1.8 later
  • Maven 3.2 이상
  • STS
  • Docker

 

Pom.xml 수정을 먼저 진행해야한다.

  • wedul 이라는 이름의 jar 파일이 생성된다.
  • docker에서 실행하기 위한 Maven 설정이 들어있는 jar file이 만들어 진다.
  • 만약 image prefix 값을 별도로 지정하지 않으면 artifact id가 명시된다.
<properties>
   <docker.image.prefix>wedul</docker.image.prefix>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>dockerfile-maven-plugin</artifactId>
            <version>1.3.6</version>
            <configuration>
                <repository>${docker.image.prefix}/${project.artifactId}</repository>
                <buildArgs>
                    <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                </buildArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

 

그리고 프로젝트 Root에 Dockerfile을 위치시켜야 한다. 

FROM java:8
VOLUME /tmp
ADD /target/wedulpos-0.0.1-SNAPSHOT.jar wedulpos.jar
ENTRYPOINT ["java","-jar","wedulpos.jar"]

DockerFile 옵션 설명 (출처 : https://www.callicoder.com/spring-boot-docker-example/)

VOLUME 

볼륨은 호스트 OS에서 컨테이너에 의해 생성 된 데이터를 유지하고 호스트 OS에서 컨테이너로 디렉토리를 공유하는 메커니즘입니다.

VOLUME 명령은 컨테이너에 지정된 경로로 마운트 포인트를 작성합니다. 컨테이너를 실행할 때 지정된 마운트 지점이 매핑 될 Hot OS의 디렉토리를 지정할 수 있습니다. 그런 다음, 컨테이너가 마운트 된 경로에 쓰는 것이 호스트 OS의 매핑 된 디렉토리에 기록됩니다. 볼륨의 가장 일반적인 사용 사례 중 하나는 컨테이너에 의해 생성 된 로그 파일을 호스트 OS에 저장하는 것입니다.

예를 들어, 응용 프로그램이 로그 파일을 /var/log/app.log 위치에 기록한다고 가정 해 봅시다. Dockerfile에 / var / log 경로로 VOLUME을 마운트 한 다음 컨테이너를 실행하는 동안이 마운트 지점이 매핑 될 호스트 OS의 디렉토리를 지정할 수 있습니다. 그런 다음 호스트 OS의 매핑 된 디렉토리에서 로그에 액세스 할 수 있습니다.

위의 Dockerfile에서 / tmp 경로를 사용하여 마운트 지점을 만들었습니다. 이것이 스프링 부트 응용 프로그램이 Tomcat에 대한 작업 디렉토리를 기본적으로 만드는 위치이기 때문입니다. 이 스프링 부트 응용 프로그램에는 바람둥이 디렉토리에 관심이 있기 때문에 필수는 아니지만. 그러나 Tomcat 액세스 로그와 같은 항목을 저장하려는 경우 VOLUMES는 매우 유용합니다.

 

ADD

ADD 명령은 새 파일과 디렉토리를 고정 이미지에 복사하는 데 사용됩니다.

 

ENTRYPOINT

응용 프로그램이 컨테이너 내부에서 실행되는 방법을 구성하는 곳입니다. 

 

그렇게 설정을 마치고 명령어를 통해 docker에서 사용할 수 있는 이미지 파일로 빌드를 진행한다.

./mvnw install dockerfile:build

설정을 정상적으로 하고 빌드가 진행이 완료되면 BUILD SUCCESS가 보일 것이다.

Docker image ls 명령어를 통해 지금 설치가 완료된 이미지 파일도 확인할 수 있다.

 

 

IT 지식/Docker

Docker 기본 명령어 및 동작설명 (Mysql 설치 및 운용해보기)

Docker의 컨테이너를 실행시키기 위해서는 다음가 같은 명령어를 사용할 수 있다.

 

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
옵션 설명
-d detached mode 흔히 말하는 백그라운드 모드
-p 호스트와 컨테이너의 포트를 연결 (포워딩)
-v 호스트와 컨테이너의 디렉토리를 연결 (마운트)
-e 컨테이너 내에서 사용할 환경변수 설정
–name 컨테이너 이름 설정
–rm 프로세스 종료시 컨테이너 자동 제거
-it -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션
–link 컨테이너 연결 [컨테이너명:별칭]
/bin/bash bash 쉘 접속 가능


그럼 한번 mysql을 실행 시켜보자.기본적으로 docker run 이미지를 입력하여 컨테이너를 실행시킬 경우에 이미지가 다운받아진 경우가 없는경우에는 Docker 레퍼지토리에서 pull 한후에 컨테이너를 생성하고 시작한다.

-p 옵션의 경우에는 2222:3112로 설정할 수 있다. 이럴경우 호스트에서 2222로 접속하면 내부에서 컨테이너에 6379로 매핑하여 실행한다.

그럼 이 옵션을 이용해서 2개의 mysql을 실행시켜보자.

 

Mysql 이미지 사용하기

기본적인 설명은 Mysql의 Docker 문서를 참고하면 된다.

간편하게 사용테스트를 진행하기 위해서 비밀번호가 없고 보트를 3306과 3310 두개를 사용하는 mysql을 만들고 docker container가 종료되면 바로 삭제하는 옵션을 사용해서 진행해보자. 두 개 모두 서로 다른 방식으로 진행해보자.

먼저 첫번째는 컨테이너를 명령어를 실행시켜서 진행하는 방식을 사용해보자.

docker run -d --rm -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=true --name mysql_test1 mysql:5.7

-e 옵션에 MYSQL_ALLOW_EMPTY_PASSWORD의 경우 패스워드 없이 사용할 수 있는 옵션이다.


명령어를 실행하면 기존에 Mysql의 이미지가 없었기 때문에 이를 다운로드 받는다.

그리고 모든 컨테이너 적제가 완료되면 컨테이너 내부에 mysql을 제어하기 위해 docker 명령어를 사용하여 들어가보자.

docker exec -i -t mysql_test1 bash

 

 

성공적으로 접속한 것을 확인할 수 있다. 접속해서 User를 만들고 접속권한을 부여한다.

그 다음 쿼리박스를 이용해서 접속을 시도해보자. 성공적으로 접속을 완료했다.

 

그럼 이제 3307 포트를 사용하는 다른 Mysql을 docker에서 제공하는 docker-compose를 사용하여 만들어보자.

docker-compose란 무엇인가?

우선 기존에는 docker에 필요한 이미지를 받고 실행 방법을 설정하기 위해서 일일히 명령어에 추가하기에는 어려움이 있다. 방금 전 까지만 해도 비밀번호 없게 하라, 포트는 무엇으로 하라 등등 많은 설정을 명령어 라인으로 실행했었다. 

하지만 이를 yml 문법에 맞게 설정파일을 작성한 뒤에 docker 레포지토리에서 다운을 요청하면 그에 맞게 실행파일 및 설정이 적용되어 컨테이너에 이미지를 적재 시켜준다. 훨씬 간편하다.

그럼 우선 yml 문법으로 mysql 이미지를 실행하는 문법을 만들어보자.

version: '3.1'
services:
  db:
    image: mysql:5.5
    container_name: mysql5.5_test2
    ports:
      - "3307:3306"
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=dbsafer00
      - MYSQL_USER=wedul
      - MYSQL_PASSWORD=dbsafer00
      - MYSQL_DATABASE=wedul

문법은 생각보다 간단하다. image 버전과 container_name을 적고 포트의 인바운드 아웃바운드를 적어준다. 그리고 추가적인 환경으로 mysql의 정보를 기재할 수 있다. 

그리고 docker-compse 명령어로 컨테이너에 등재시킬 수 있다.

docker-compose up -d

도커 프로세스를 확인해보면 두 개의 mysql 컨테이너가 실행중인 것을 확인할 수 있다.

 

두 번째에 실행시킨 Mysql도 동일하게 QueryBox에서 사용이 가능하다.

 

기존에는 DBMS가 필요하거나 할 때, VM을 사용하거나 실 서버를 사용하였지만 도커를 이용하면 아주 간단하게 사용할 수 있어서 좋은 것 같다. 이번에는 Mysql만 해보았지만, Repository에 있는 워드프레스나 레디스 등등도 사용할 수 있따. 실무에서도 시간이 나면 환경을 만들어서 써봐야겠다. 

 

 

IT 지식/Docker

Mac OS에 Docker 설치하기

Mac OS에 Docker 설치는 매우 간단하다.

하단 링크로 들어가서 Docker.dmg파일을 다운받고 설치를 우선 진행한다. 

Docker 설치링크

 

DMG파일을 실행하면 다음과 같은 창이 출력되고 드래그 하여 Application으로 옮겨주면 된다.

 그 다음 도커를 실행하면 작업표시줄에 출력되고 클릭하면 자세한 상태와 기본 내용이 출력된다.

이제 시작해보자.  도커 시작!

 

 

IT 지식/Docker

Docker 기본 개념 정리


 

 

마이크로서비스를 사용하고 배포를 자동화하고 하면서 유동적인 컨테이너인 Docker가 많은 인기를 얻고 여기저기 회사에서 많이 사용되고 있다. 실제로 백엔드 개발자에게는 거의 필수로 알고 가야하는 툴중에 하나가 되어버렸다.

 

Docker란 무엇인가?

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼 이라고 한다. 여기서 컨테이너는 다양한 프로그램, 실행환경을 컨터이너에  동일한 인터페이스로 제공하여 여러 프로그램의 배포와 관리를 단순하게 해준다.

 

컨테이너 (Container)

컨테이너는 OS 와 격리된 공간으로서 별도의 프로세스가 동작하는곳을 말한다. 그러면 기존에 OS에서 VM을 설치하여 사용하던 방식과 무엇이 다른지 알아보자.

 


VM과 Docker의 차이


기존의 VMware는 HostOS에 GuestOS가 올라가는 방식으로 추가로 OS 파일이 올라가야 하기 때문에 부담이 된다. 하지만 컨테이너에 경우 별도의 OS를 또 올릴 필요없이 프로세스를 격리하는 방식으로 이러어져있다. 그렇기 때문에 훨씬 가볍고 빠르며 CPU, 메모리 프로세스가 필요한 만큼 추가할 수 있다.

그리고 서로 다른 컨테이너는 서로 영향을 주지 않고 각각의 컨터이너에 접속하여 명령어도 별도로 사용할 수 있고 여러개의 프로세스를 백그라운드로 실행할 수도 있다.

컨터이너에는 보안적인 문제가 있다. 컨테이너는 host와 커널을 서로 공유하기 때문에 container가 뚫리게 되면 host 커널에도 영향이 갈 수있다. 또한 다른 컨터이너도 같이 공유하고 있기 때문에 문제가 될 수있다.

그렇다면 이런 컨터이너에 실행되는 파일과 설정값을 가지고 있는것이 무엇인가? 바로 이미지(Image)이다. 

 


이미지 (Image)


이미지는 컨터이너에 실행에 필요한 파일과 설정등이 다 들어있다. 컨테이너는 이미지를 실행한 상태라고 볼 수 있고, 추가되거나 변하는 값은 컨터이너에 저장된다. 같은 이미지에서 여러 컨테이너를 생성하더라도 수정, 삭제 하더라도 이미지의 값이 바뀌지는 않는다. 이미지는 Docker hub에 이미 등록되어 있고 추가적으로 등록할수도 있다. 개인의 Docker Registry 저장소를 직접 만들어 관리할 수 있다.

 

 


이미지 경로는 다음과 같이 되어있는데 모두 사용할 필요없이 간단하게 ubuntu:14.04와 같이 사용할 수 있다.

 



레이어 저장방식



도커 이미지는 실행하는 정보를 가지고 있기 때문에 용량이 크다. 그래서 이미지에 파일이 추가되었다고 파일 하나를 다시 받는다면 문제가 된다. 그래서 도커는 레이어라는 개념을 사용하였다. 기본적인 레이어는 동일하게 유지하며(읽기모드) 나머지 부분에 대해서만 쓰기 레이어를 만들어 사용한다. 그렇기 때문에 이미지 레이어는 그대로 사용되고 실행중에 생성하는 파일, 변경된 내용은 읽기/쓰기 레이어에 저장되므로 여러 컨터이너를 생성해도 최소한에 용량만 사용된다.

 


다음시간에는 Mac에 Docker를 설치해보자.


 출처 : https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html

푸터바

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.

카운터

  • Today : 0
  • Yesterday : 460
  • Total : 82,691