docker build with nexus - 1

이상민·2023년 4월 28일
0

docker

목록 보기
19/19

설정

$ sudo chmod 666 /var/run/docker.sock

Nexus container 5000번 포트 설정

$ docker run --name nexus -d -p 8081:8081 -p 5000:5000 --name nexus -v ~/nexus-data:/nexus-data -u root sonatype/nexus3

$ docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                                                                                  NAMES
c4f51899a4cd   sonatype/nexus3   "/opt/sonatype/nexus…"   31 seconds ago   Up 30 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp, 0.0.0.0:8081->8081/tcp, :::8081->8081/tcp   nexus

Nexus 설정

Blob Stores 설정


id, pw: test, test!00
Nexus web UI: 퍼블릭 DNS:8081에서 설정 -> Repository -> Blob Stores -> Create Blob Store


Type: File
Name: nexus-registry_blob-store
Path: Name에 맞게 알아서 생성됨

Repositories 설정


설정 -> Repository -> Repositories -> Create repository

docker(hosted)
Name: nexus-registry_repository
HTTP: 5000
Allow anonymous docker pull: check
Enable Docker V1 API: check
Blob Store: nexus-registry_blob-store

Realms 설정


설정 -> Security -> Realms -> Docker Bearer Token을 Active 상태로 변경

docker login 확인

aws server

$ docker login localhost:5000
Username: test
Password: !test00
WARNING! Your password will be stored unencrypted in /home/ubuntu/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

localhost를 지정하지 않으면 docker hub으로 로그인한다.
local

$ docker login public dns:5000
Username: test
Password: !test00
Error response from daemon: Get "https://ec2.ap-northeast-1.compute.amazonaws.com:5000/v2/": http: server gave HTTP response to HTTPS client

local에서 로그인을 시도하면 요청이 거절된다. 이 경우

Settings -> Docker Engine에 들어가서

{
        "insecure-registries":[
                "public dns:5000"]
}

를 추가한다

이후 docker를 restart한다. 위의 bug를 클릭

$ docker login public dns:5000
Username: test
Password:
Login Succeeded

실습

docker 빌드 후 Nexus Registry로 Push

$ pwd
/home/ubuntu/docker/Part2_Docker/Chapter06/2-1_nexus-docker

$ ./gradlew clean build

$ ./gradlew jib -DsendCredentialsOverHttp=true --console=plain

오류 발생함

추가 사항

$ sudo vi /etc/docker/daemon.json 
{
      "insecure-registries" : ["<public DNS>:5000"]
}

$ vi build.gradle
...
jib {
    from {
        image = 'adoptopenjdk/openjdk11:alpine-jre'
    }
    // Nexus Registry URL 및 Tag 입력
    to {
        image = '<public DNS>:5000/test'
        tags = ['1.1']
        auth {
            username = 'test'
            password = '!test00'
        }
    }
...    

NEXUS의 test계정의 ID, PW를 직접 입력함

Push 결과



Browse -> nexus-registry_repository -> test 디렉토리 내부에 이미지가 업로드 된것을 확인할 수 있음.

Nexus Repository에서 pull

$ docker pull <public DNS>:5000/test:1.1

$ docker images
REPOSITORY                                                         TAG       IMAGE ID       CREATED          SIZE
ec2-13-112-52-104.ap-northeast-1.compute.amazonaws.com:5000/test   1.1       a343f00fe70e   18 minutes ago   188MB

$ docker run -d -p 8080:8080 a343f00fe70e

$ curl localhost:8080

제대로 동작하는 것 확인

docker 빌드 후 AWS ECR로 Push


푸시할 때 스캔을 활성화한다.

$ pwd
/home/ubuntu/docker/Part2_Docker/Chapter06/2-2_ecr-docker

$ ./gradlew clean build

$ ./gradlew jib --console=plain
$ docker images

jib을 사용했으므로 docker image는 생성되지 않는다.

ecr에 업로드 되면 보안 스캔이 바로 진행됨(취약성에서 확인 가능)

ECR에서 Pull

$ docker pull <URI>

$ docker images
REPOSITORY                                               TAG       IMAGE ID       CREATED         SIZE
235050266187.dkr.ecr.ap-northeast-1.amazonaws.com/test   latest    3553bf2be232   7 minutes ago   188MB
$ docker run -d -p 8082:8080 3553bf2be232
57ea1ef5a648ac5d55d87c0cb310e1d3657b1d8053b94e1c5b27d117db49444d

기존의 8080포트에서 8082포트로 출력(중복을 없애기 위함)

$ curl localhost:8082

에서 동작 확인

0개의 댓글