$ sudo chmod 666 /var/run/docker.sock
$ 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
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에 맞게 알아서 생성됨
설정 -> 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
설정 -> Security -> Realms -> Docker Bearer Token을 Active 상태로 변경
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
$ 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를 직접 입력함
Browse -> nexus-registry_repository -> test 디렉토리 내부에 이미지가 업로드 된것을 확인할 수 있음.
$ 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
제대로 동작하는 것 확인
푸시할 때 스캔을 활성화한다.
$ pwd
/home/ubuntu/docker/Part2_Docker/Chapter06/2-2_ecr-docker
$ ./gradlew clean build
$ ./gradlew jib --console=plain
$ docker images
jib을 사용했으므로 docker image는 생성되지 않는다.
ecr에 업로드 되면 보안 스캔이 바로 진행됨(취약성에서 확인 가능)
$ 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
에서 동작 확인