hello

컨테이너 이미지 - Ubuntu

GitHub : https://github.com/declue/docker_ubuntu

2019년에 만들었던 Docker 이미지입니다.

만든 목적은.. 기본 ubuntu 이미지에는 제가 자주 쓰는 도구가 너무 없어서 그냥 기본 빌트인을 시킬겸, base 이미지를 만들겸 제작하게 되었습니다.

GitHub Actions를 이용하여 ubuntu 버전별로 다음의 과정을 거쳐 이미지를 만들고 있습니다.

현재 아래와 같이 버전별로 제공이 되며, 한국어 지원 및 빌트인 패키지들이 아래와 같이 포함되어 있습니다.

사용은 아래와 같이 호출이 가능합니다.

docker pull ghcr.io/declue/docker_ubuntu:22.04

github를 참고하면 좋으나.. 여기에 Dockerfile를 한번 같이 공유합니다.

ARG BASE_IMAGE=ubuntu:22.04 
ARG BUILD_DATE=2025-03-05

FROM $BASE_IMAGE

# Set build date as an environment variable
ENV UBUNTU_UPDATED_TIME=${BUILD_DATE}
# Prevent interactive prompts during package installation
ENV DEBIAN_FRONTEND="noninteractive"

ENV TERM=xterm-256color

# Update system and install essential packages
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
        apt-utils locales vim net-tools iputils-ping curl wget tree jq htop unzip zip traceroute \
        software-properties-common lsb-release ca-certificates dnsutils fontconfig  && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

# Manually configure Korean locale (Fix for missing language-pack-ko)
RUN echo "ko_KR.UTF-8 UTF-8" > /etc/locale.gen && \
    locale-gen ko_KR.UTF-8 && \
    update-locale LANG=ko_KR.UTF-8
    
# Install Nanum fonts (with error handling for unsupported platforms)
RUN apt-get update && \
    apt-get install -y --no-install-recommends fonts-nanum fonts-nanum-coding || true && \
    fc-cache -fv && \
    apt-get clean && rm -rf /var/lib/apt/lists/*
    
# Set environment variables for Korean language support    
ENV LANG=ko_KR.UTF-8 
ENV LANGUAGE=ko_KR.UTF-8 
ENV LC_ALL=ko_KR.UTF-8

# Timezone
ENV TZ=Asia/Seoul 
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

또한 github actions도 다음과 같이 구성되었습니다. (매일 빌드)

name: Docker

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches:
      - main
  workflow_dispatch:
  schedule:
    - cron: "0 15 * * *" # Run daily at 00:00 KST (15:00 UTC)

env:
  REGISTRY: ghcr.io
  IMAGE_NAME: ${{ github.repository }}

jobs:
  build:
    strategy:
      matrix:
        ubuntu_version: ['24.04', '22.04', '20.04', '18.04', '16.04']
        
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Setup QEMU for multi-platform builds
        uses: docker/setup-qemu-action@v2

      - name: Setup Docker buildx
        uses: docker/setup-buildx-action@v1

      - name: Log into registry ${{ env.REGISTRY }}
        if: github.event_name != 'pull_request'
        uses: docker/login-action@v1
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Extract Docker metadata
        id: docker_meta
        uses: docker/metadata-action@v4
        with:
          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
          tags: ${{ matrix.ubuntu_version}}

      - name: Get build time
        id: build_time
        run: echo "BUILD_TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ")" >> $GITHUB_ENV
          
      - name: Build and push Docker image
        id: build-and-push
        uses: docker/build-push-action@v2
        with:
          context: .
          push: ${{ github.event_name != 'pull_request' }}
          tags: ${{ steps.docker_meta.outputs.tags }}
          labels: ${{ steps.docker_meta.outputs.labels }}
          cache-from: type=gha
          cache-to: type=gha,mode=max
          build-args: |
            BASE_IMAGE=ubuntu:${{ matrix.ubuntu_version }}
            BUILD_DATE=${{ env.BUILD_TIME }}
          platforms: linux/amd64,linux/arm64,linux/arm/v7

Read more

TCP 공부하기

TCP(전송 제어 프로토콜) 개요 TCP는 불안정한 네트워크 환경에서도 신뢰성 있고 순서가 보장된 데이터 전송을 가능하게 하는 핵심 인터넷 프로토콜이다. IP가 호스트 간 패킷 전달만을 담당한다면, TCP는 포트 기반 프로세스 간 통신, 오류 복구, 재전송, 순서 제어를 제공한다. 흐름 제어와 혼잡 제어를 통해 TCP는 수신 버퍼와 네트워크 대역폭의 고갈을 방지한다.

By JHL

우리가 알던 고전적 소프트웨어 엔지니어링은 죽었다

Product Engineering 시대와 AI 개발 패러다임 변화 1. 패러다임 변화: 코드 작성의 목적이 달라졌다 1972년 Dennis Ritchie가 C 언어를 발표한 이후, 소프트웨어 산업은 오랫동안 다음 요소에 집중해 왔다. * 코드 효율성 (시간·공간 복잡도) * 코드 길이 및 생산성 * 가독성과 유지보수성 그러나 AI 시대가 시작되면서 기존 패러다임이 근본적으로 변하고 있음. John Carmack은

By JHL

GitLab에서 제작한 GitOps 초보자 가이드

소개 소프트웨어 애플리케이션의 복잡도가 증가함에 따라 인프라에 대한 요구도도 함께 증가하고 있습니다. 인프라 팀은 다양한 서비스를 빠르고 안정적으로 제공해야 하지만, 인프라 구축은 여전히 수동 프로세스에 의존하는 경우가 많습니다. 이 문제를 해결하기 위한 핵심 접근 방식이 인프라 자동화이며, 그중 하나가 GitOps입니다. 1. 인프라 자동화의 필요성 * 애플리케이션 개발은 CI/CD로 자동화되었지만 인프라

By JHL