apt package index 를 update하고 docker 설치

sudo apt update
sudo apt install docker.io

 

docker 설치 후 데몬 기동 현황 확인

sudo systemctl status docker

ubuntu 계정에 docker 실행 권한을 주기 위한 설정

sudo chmod 666 /var/run/docker.sock

'docker' 카테고리의 다른 글

Docker base image  (0) 2023.02.18

Environment

Ubuntu 18.04
Java 11.0.18

 

vm 접속해서

curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null​

 

설치 가능한 패키지 리스트를 최신화후 jenkins 설치

sudo apt-get update
sudo apt-get install jenkins

https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/

 

Find First and Last Position of Element in Sorted Array - LeetCode

Can you solve this real interview question? Find First and Last Position of Element in Sorted Array - Given an array of integers nums sorted in non-decreasing order, find the starting and ending position of a given target value. If target is not found in t

leetcode.com

 

이진탐색 두번 시행

1. 시작지점 찾기

2. 끝나는 지점 찾기

 

class Solution {
    public int[] searchRange(int[] nums, int target) {

        int start = -1;
        int end = -1;

        int left = 0;
        int right = nums.length - 1;
        // start 위치 찾기
        while (left <= right) {

            int mid = (left + right) / 2;

            if (nums[mid] < target) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
            if (nums[mid] == target) {
                start = mid;
            }
        }

        //end 위치 찾기

        left = 0;
        right = nums.length - 1;
        while (left <= right) {

            int mid = (left + right) / 2;

            if (nums[mid] <= target) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
            if (nums[mid] == target) {
                end = mid;
            }
        }

        return new int[]{start, end};
    }
}

Docker는 가상화 기술을 이용해 애플리케이션을 컨테이너에 담아 환경을 구성하는 것이 가능하게 해줍니다. Docker에서 컨테이너를 실행하기 위해서는 base image가 필요합니다. 이번 글에서는 Docker base image에 대해 알아보도록 하겠습니다.

Docker base image란 무엇인가?

Docker base image는 Docker 이미지를 빌드할 때 사용하는 기본 이미지입니다. 모든 Docker 이미지는 기본 이미지 위에 추가적인 layer를 쌓아 올려서 만들어집니다. 이때, 기본이 되는 이미지를 Docker base image라고 합니다.

Docker base image는 Docker Hub에서 다운로드 받을 수 있으며, 여러 종류의 운영체제와 프로그래밍 언어가 이미지로 제공됩니다. 또한, 직접 Dockerfile을 작성하여 필요한 기능을 추가하여 새로운 이미지를 만들 수도 있습니다.

Docker base image를 선택하는 방법

Docker base image를 선택할 때는 다음과 같은 사항을 고려해야 합니다.

1. 운영체제

Docker base image를 선택할 때는 운영체제에 대한 고려가 필요합니다. Docker Hub에서는 대표적으로 Ubuntu, CentOS, Alpine 등의 운영체제가 제공됩니다. 이 중에서 가볍고 보안성이 높은 Alpine 이미지를 선택하는 것이 일반적입니다. 하지만, 기능적인 요구사항에 따라 다른 운영체제를 선택할 수도 있습니다.

2. 이미지 크기

Docker 이미지의 크기는 중요한 요소 중 하나입니다. 이미지 크기가 크면 이미지를 다운로드하고 실행하는 데 시간이 더 걸리고, 더 많은 저장 공간이 필요합니다. 따라서 가능한 한 작은 이미지를 선택하는 것이 좋습니다.

3. 보안

Docker 이미지를 사용할 때는 보안에 대한 고민이 필요합니다. Docker Hub에서는 공식적인 이미지가 제공되며, 이를 사용하는 것이 가장 안전한 선택입니다. 또한, Dockerfile에서 사용하는 기본 이미지의 취약점에 대한 정보를 주기적으로 업데이트하고 확인하는 것이 좋습니다.

결론

Docker base image는 Docker 이미지를 빌드할 때 필요한 기본 이미지입니다. Docker Hub에서 제공하는 이미지를 사용하거나, 직접 Dockerfile을 작성하여 필요한 기능을 추가하여 새로운 이미지를 만들 수 있습니다. Docker base image를 선택할 때는 운영체제, 이미지 크기, 보안 등의 요소를 고려하여 선택해야 합니다.

 

 

'docker' 카테고리의 다른 글

Ubuntu/Debian Docker 설치  (0) 2023.03.02

빌드를 진행했는데 에러가 발생했습니다.

/usr/bin/env: ‘sh\r’: No such file or directory

 

해당 에러는 운영체제 차이점 때문에 발생하는 문제로 ,

윈도우 OS에서는 엔터, 즉 개행 문자를 CRLF(\r\n)로 사용하지만, Unix OS에서는 개행 문자를 LF(\n)로 사용되기 때문입니다.

 

gradlew 파일을 dos2unix를 설치해서 변환해주었습니다.

 

$ sudo apt-get install dos2unix
$ dos2unix gradlew

다시 빌드를 진행하면 정상적으로 빌드됩니다.

'error' 카테고리의 다른 글

gradle jib FAILURE: Build failed with an exception.  (0) 2023.01.31

https://leetcode.com/problems/array-nesting/description/

 

Array Nesting - LeetCode

Array Nesting - You are given an integer array nums of length n where nums is a permutation of the numbers in the range [0, n - 1]. You should build a set s[k] = {nums[k], nums[nums[k]], nums[nums[nums[k]]], ... } subjected to the following rule: * The fir

leetcode.com

 

 

public int arrayNesting(int[] nums) {
        // 방문했는지 체크하는 임시배열 -1:방문 / 0:방문안함
        int[] tmp = new int[nums.length];
        int res = 0;
        
        for (int i = 0; i < nums.length; i++) {
            //방문한 원소면 스킵하기
            if (tmp[i] == -1) continue;
            
            int cnt = 1;    //방문한 원소 갯수 저장하는 변수
            tmp[i] = -1;
            int next = nums[i]; //다음 방문할 인덱스

            while (tmp[next] == 0) {
                tmp[next] = -1;
                cnt++;
                next = nums[next];
            }

            res = Math.max(res, cnt);
        }

        return res;
    }

https://leetcode.com/problems/max-consecutive-ones-iii/description/

 

Max Consecutive Ones III - LeetCode

Max Consecutive Ones III - Given a binary array nums and an integer k, return the maximum number of consecutive 1's in the array if you can flip at most k 0's.   Example 1: Input: nums = [1,1,1,0,0,0,1,1,1,1,0], k = 2 Output: 6 Explanation: [1,1,1,0,0,1,1

leetcode.com

 

 

풀이

1. r값이 0인지 체크해서 k값 조정

2. k값이 0보다 작으면 l이동

  2-1 > l값이 0인지 체크해서 k값 조정

  2-2 > l값 이동

3. 가장 긴 길이 저장 

public static int longestOnes(int[] nums, int k) {
        int left = 0;
        int right;
        int res = 0;

        //right 움직이기
        for (right = 0; right < nums.length; right++) {
            //rigth 값이 0이면 k--
            if (nums[right] == 0) {
                k--;
            }

            //k 값이 음수면 left 움직이기
            if (k < 0) {
                if (nums[left] == 0) k++;
                left++;
            }

            //가장 긴값 설정
            if (k >= 0)
                res = Math.max(res, right - left + 1);

        }
        return res;
    }
 What went wrong:
Execution failed for task ':jib'.
> com.google.cloud.tools.jib.plugins.common.BuildStepsExecutionException: Build image failed, perhaps you should make sure your credentials for '<ecr repository 주소>' are set up correctly. See https://github.com/GoogleContainerTools/jib/blob/master/docs/faq.md#what-should-i-do-when-the-registry-responds-with-unauthorized for help

ecr repository 생성만하고 리눅스 서버에 로그인을 안해놨었다....!

 

 

해결

생성된 repositroy 선택하고 "푸시명령보기" 로 aws ecr repository 로그인 명령어를 복사해서 인증한다.

 

빌드 성공

 

ecr repository에도 이미지 생성이 된걸 확인했다. 

 

 

 


삽질의 흔적들 

1차 시도 실패

.docker 에 있는 config.json 파일 수정해주기

credsStore > credStore

여전히 fail

참고 

https://honsal.blogspot.com/2020/11/docker-docker-for-desktop-on-wsl-2.html

 

[Docker] Docker for Desktop on WSL 2 사용 도중 docker-credential-desktop.exe not installed... 에러가 발생한 경우

IT 관련 자잘한 팁, 약간의 게임 플레이 영상, 그리고 일상이 적힌 블로그입니다.

honsal.blogspot.com

 

2차 시도 실패 

docker desktop 종료하고 다시 시도하기 > 그래도 안됌 ㅠㅠ

참고

https://gre-eny.tistory.com/341

 

[GCP] Failed to execute goal com.google.cloud.tools:jib-maven-plugin:2.8.0:build (default-cli) on project

도커 이미지 빌드 시 오류 SpringBoot 프로젝트로 도커 이미지를 빌드하는 도중 다음과 같은 오류를 만났다. [ERROR] Failed to execute goal com.google.cloud.tools:jib-maven-plugin:2.8.0:build (default-cli) on project book: Bu

gre-eny.tistory.com

 

'error' 카테고리의 다른 글

/usr/bin/env: ‘sh\r’: No such file or directory  (0) 2023.02.06

+ Recent posts