Notice
Recent Posts
Recent Comments
Today
Total
04-29 02:04
Archives
관리 메뉴

Jeongchul Kim

macOS M1 Apple Chip Docker 본문

카테고리 없음

macOS M1 Apple Chip Docker

김 정출 2022. 6. 2. 00:35

macOS M1 Apple Chip Docker



 

macOS Apple M1 chip 환경에서 Docker를 설치하고, 간단한 Golang WAS 서버를 패키징하여 Docker 배포까지 진행해 보겠습니다.

 

Docker 설치

https://www.docker.com/get-started/

Download for Mac - Apple Chip 선택합니다.

 

다운로드 받은 Docker.dmg를 실행합니다.

 

설치 진행 시에 보안 알람이 발생된다면 허용이 필요합니다.

 

 환경설정 > 보안 및 개인 정보보호로 이동합니다.

변경하려면 좌물쇠를 클릭하십시오를 선택하고 비밀번호를 입력합니다. Docker 확인없이 열기 버튼을 클릭합니다.

 

열기 버튼을 클릭합니다.

 

상단바에서 Docker Deskop이 실행 중입니다.

 

권한을 위해 macOS 계정 비밀번호를 입력합니다.

 

서비스 동의를 선택합니다.

 

설치가 완료되었습니다.

 

Docker Desktop

Home 메뉴는 홈 화면으로 Docker Hub에 있는 인기있는 이미지를 보여줍니다.

 

Containers 메뉴는 현재 동작 중인 컨테이너가 리스트로 확인됩니다.

 

Images 메뉴는 현재 저장된 컨테이너 이미지가 리스트로 확인됩니다.

 

Volumes 메뉴는 현재 시스템에 컨테이너가 볼륨 마운트된 Volume이 리스트로 확인됩니다.

 

Golang WAS 서버

Golang의 labstack/echo 웹프레임워크 패키지를 활용해 간단한 WAS 서버를 개발합니다.

https://github.com/labstack/echo

 

8080 포트를 사용하고 / 경로로 GET 메소드를 통해 Hello, World!를 응답하는 간단한 WAS 서버 코드입니다.

main.go에 아래 코드를 복/붙 합니다.

package main

import (
  "net/http"

  "github.com/labstack/echo/v4"
  "github.com/labstack/echo/v4/middleware"
)

func main() {
  // Echo instance
  e := echo.New()

  // Middleware
  e.Use(middleware.Logger())
  e.Use(middleware.Recover())

  // Routes
  e.GET("/", hello)

  // Start server
  e.Logger.Fatal(e.Start(":8080"))
}

// Handler
func hello(c echo.Context) error {
  return c.String(http.StatusOK, "Hello, World!")
}

해당 패키지 경로에서

$ go mod init
$ go mod tidy
$ go build

 

서버 프로그램을 실행해봅시다.

./go-was # 생성한 패키지 디렉터리 이름 또는 go.mod에 지정된 module 이름

 

$ curl http://127.0.0.1:8080/

8080포트 경로 기준으로 curl 명령어를 호출하면 Hello,World를 응답으로 받습니다.

 

Docker 패키징 및 배포

위에 만든 WAS 서버를 Docker 컨테이너로 패키징합니다.

$ vi Dockerfile
FROM ubuntu:20.04
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8

WORKDIR /data/source/
RUN apt-get update

ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get install -y wget pkg-config build-essential wget autoconf automake vim curl
RUN wget https://go.dev/dl/go1.18.2.linux-amd64.tar.gz
RUN tar xzvf go1.17.6.linux-amd64.tar.gz
ENV GOROOT=/data/source/go
ENV PATH=$PATH:$GOROOT/bin

RUN mkdir -p /app
WORKDIR /app

COPY *.go ./
COPY go.mod ./
COPY go.sum ./
RUN go mod download
RUN go build -o go-was

ENTRYPOINT ["/app/go-was"]

MAC M1에서 build 시에 /lib64/ld-linux-x86-64.so.2 No such file or directory 오류가 발생되므로 --platform linux/x86_64를 옵션으로 주어 run 또는 build 시에 ARM 대신에 x86_64로 실행되도록 합니다.

$ docker build --platform linux/x86_64 -t go-was:1.0 .

 

 

Container 이미지를 확인합니다.

$ docker images

 

 

go-was 컨테이너를 실행합니다.

$ docker run -dit --platform linux/x86_64 --name go-was-app -p 8080:8080 -v /etc/localtime:/etc/localtime:ro go-was:1.0

 

로그를 살펴봅니다.

$ docker logs -f go-was-app

 

 

curl을 통해 go-was-app 컨테이너의 WAS 서버를 호출합니다.

$ curl http://127.0.0.1:8080/

 

Docker Desktop에서 동작되고 있는 컨테이너가 확인됩니다.

 

컨테이너를 종료하고 싶은 경우 다음의 명령어를 입력합니다.

$ docker rm -f go-was-app

수고하셨습니다!

 

Comments