[#2] Docker 기본기

Written by 코드팩토리 JC

1월 15, 2024

코드팩토리 Docker 부터 Kubernetes 까지

소개

Docker는 기본적으로 리눅스 환경에서 네이티브 하게 실행됩니다. Docker 초기에는 다른 운영체제에서 Docker를 실행할 경우 리눅스 가상화를 거치게 됐는데 이제 맥의 경우에는 네이티브 하게 지원이 됩니다. (윈도즈로는 개발을 안 해 잘 모르겠네요). 여기 이 링크로 가셔서 해당되는 운영체제용 Docker를 설치하시면 됩니다.

Docker 설치하기

Docker 설치가 완료되었는지 확인하기 위해 터미널 또는 커맨드를 띄워서 아래 커맨드를 실행해주세요

docker --version
ShellScript

잘 설치가 되셨을 경우 아래와 비슷한 결과가 뜨게 됩니다.

도커 버전확인
도커 버전확인

Hello World컨테이너 실행해보기

Docker를 사용해 컨테이너 애플리케이션을 실행하려면 세 가지 과정을 거쳐야 합니다.

  1. 이미지 풀해오기 (캐시 또는 remote repository 에서)
  2. 이미지 빌드하기
  3. 이미지 실행하기 아래 커맨드를 실행하면 위 세 가지 과정을 한 번에 진행하실 수 있습니다.
docker run hello-world
ShellScript

docker run hello-world
docker run hello-world

위와 같은 결과가 나오면 성공하신 겁니다. 나타난 결괏값은 잠시 분석해보도록 하겠습니다.

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
...
ShellScript

로컬에 캐싱 되어있는 hello-world라는 컨테이너 이미지를 찾지 못했으니 library/hello-world라는 레포지토리에서 hello-world Docker 이미지를 다운로드한다는 이야기입니다. 방금 실행하신 커맨드를 다시 한번 실행해보시면 위에 보이는 이미지를 풀링 해오는 과정이 스킵 됩니다. 첫 번째 커맨드를 실행했을 때 이미 로컬 환경에 이미지를 캐싱 해두었기 때문에 새로 이미지를 다운로드하지 않아도 실행이 가능하기 때문이죠.

Nginx 이미지 실행하고 추가설정 해보기

Hello World 이미지를 사용하며 기본적인 Docker 이미지 실행 과정을 알아봤으니 이제 nginx 이미지로 여러 docker run 옵션에 대해 알아보겠습니다.

다큐멘테이션 보기

nginx 이미지를 hello-world 이미지처럼 커맨드를 사용해 실행해보겠습니다.

docker run --name tutorial-nginx -p 8080:80 nginx
ShellScript

위 커맨드를 약간 분석해보면 name 플래그는 실행하게 될 Docker 이미지의 이름을 지정할 때 사용됩니다. -p 플래그는 Docker 컨테이너 내부의 포트와 연결할 로컬 기기의 포트를 지정할 때 사용됩니다. Docker 이미지를 빌드 할 시 노출할 포트를 지정할 수 있는데 로컬 환경에서 컨테이너 접속을 해야 할 경우 컨테이너 내부의 포트와 해당 포트와 연결할 로컬 환경 포트를 지정해줘야 합니다. 기본 nginx 이미지는 컨테이너 내부에서 80번 포트를 노출하기 때문에 로컬의 8080포트를 컨테이너의 80번 포트와 매핑해주었습니다. 마지막 nginx 부분은 당연히 nginx 이미지를 실행하라는 뜻입니다.

커맨드를 실행하신 후 http://localhost:8080/ 을 접속하시면 아래와 같이 nginx 가 8080번 포트에 실행된 것을 볼 수 있으실 겁니다.

Welcome to Nginx
Welcome to Nginx

다음 회에는 커스텀 이미지를 빌드 하는 방법에 대해 알아보도록 하겠습니다.

관련 포스트

플러터에서의 Immutable Programming: copyWith 함수 마스터하기!

플러터에서의 Immutable Programming: copyWith 함수 마스터하기!

서론 불변 프로그래밍: 현대 개발의 핵심 현대 소프트웨어 개발에서 불변 프로그래밍(Immutable Programming)의 중요성은 간과할 수 없는 요소입니다. 플러터(Flutter)에서도 마찬가지로 불변 프로그래밍 개념이 매우 중요하며, copyWith 함수는 이러한 불변성을 유지하는 데 핵심적인 역할을 합니다. 이 글에서는 플러터를 배우기 시작하는 개발자들에게 불변 프로그래밍의 중요성을 강조하고, copyWith 함수의 역할과 사용 방법에 대해 설명 해보겠습니다!...

ChatGPT가 이야기하는 2024년 개발자 로드맵

ChatGPT가 이야기하는 2024년 개발자 로드맵

서론 개발자의 여정을 시작하며 안녕하세요, 미래의 개발자 여러분! 오늘부터 시작하는 여러분의 개발 여정에 함께할 수 있어서 기쁩니다. 2023년은 기술이 매우 빠르게 변화하는 해였으며, 이러한 변화 속에서 개발자가 되기 위한 길은 더욱 다채롭고 흥미로워졌습니다. 이 로드맵은 초보자인 여러분이 개발의 세계에 첫발을 내딛는 데 필요한 기초부터 시작해, 점차 심화 단계로 나아가는 길을 안내해 드릴 것입니다. 백엔드 개발 이 글은 단순히 기술을 배우는 것 이상의 의미를 가집니다....

Flutter Freezed 플러그인! Entity Code Generation은 이거 하나로 끝!

Flutter Freezed 플러그인! Entity Code Generation은 이거 하나로 끝!

https://youtu.be/i5p6wXLAX7I 서론 Flutter 는 Code Generation 기능이 상당히 많이 활성화되어 있어요. 흔히들 많이 사용하는 json_serializable 라이브러리도 있고 retrofit 및 chopper 라이브러리도 있습니다. 오늘 알려드릴 freezed 또한 데이터 클래스에 편의 기능들을 제공해주는 code generation 라이브러리입니다. Freezed vs Json Serializable Code Generation 이라는...