'2016/07/21'에 해당되는 글 2건

  1. 2016.07.21 [docker] docker 이미지 삭제
  2. 2016.07.21 java7 -> java8 전환 with spring 3.2 1


도커 이미지를 삭제하는 방법은 두 가지이다. 컨테이너 삭제와 이미지 삭제이다.

참조 : https://docs.docker.com/engine/reference/commandline/rm/


* docker rmi : 이미지 삭제

* docker rm : 이미지를 포함한 이미지를 삭제



-f을 주면 강제 삭제한다.




정지된 모든 컨테이너를 삭제하려면, 다음을 실행한다.


$ docker rm $(docker ps -a -q)





도커의 특정 이미지를 삭제하려 할 때, 멈춰진 컨테이너 때문에 삭제가 안될 때가 있다. 이때 컨테이너를 삭제할 때 도움을 받을 수 있다.


$docker rmi 1ce28876c3cc

Error response from daemon: conflict: unable to delete 1ce28876c3cc (must be forced) - image is being used by stopped container 5ccaea4b7cb9



$ docker rm 5ccaea4b7cb9

e98d8053298b



$docker rmi 1ce28876c3cc

Untagged: hello-world:latest

Deleted: sha256:b77358fac48bc0d0b5e547b7b999c5e70a5fde9de9c086b47775568c8b88326d

Deleted: sha256:32ada9ef4cd3ccd536337fbcd8cdb6e026237f59db80498f83f3175176561ffb

Deleted: sha256:3d3313518f8e8d9723adfb09ea58b7a6d46e565979fda05a2073ecb30ca1e3a1

Deleted: sha256:b652ec3a27e758f30de4742156b5d096bb19c82f2dc836e96e430323ba166ffe





목록을 보면 삭제되었다. 


$ docker images

delete됨.





모두 삭제하기


$ docker system prune -a 



Posted by '김용환'
,


Spring 3.2를 사용 중인 java 7 애플리케이션을 java 8 애플리케이션으로 전환하는 내용을 소개한다.


먼저 spring 3.2.4를 사용 중인 java7 애플리케이션을 바로 java 8로 컴파일하면, 바로 에러가 발생한다.


Caused by: org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file - probably due to a new Java class file version that isn't supported yet:


; nested exception is java.lang.IllegalArgumentException
    at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:56)
    at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:80)
    at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:102)
    at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:266)

    ... 64 more 






원인은 spring core의 asm이 java 8을 지원하지 않는다. (참고로 3.2.4 부터 spring-asm 모듈은 spring-core로 흡수되고, 사라졌다) 3.2.9부터 spring asm이 java 8 byte code을 인식할 수 있다. 하지만, fully가 아닌 best effort 수준이다. 완벽한 java 8은 spring 4부터 사용 가능하다.

(참고로 asm 모듈은 바이트 코드 분석 및 생성 역할을 한다.)


참고 : 

https://jira.spring.io/browse/SPR-11719

https://jira.spring.io/browse/SPR-11656


* 주의 사항은 지라에 잘 쓰여져 있다. 버전 이슈가 있어서 신중하게 쓸 필요가 있다. (현재는 3.2.17까지 릴리즈 된 상태이다)

With straightforward use of -target 1.8, there aren't many limitations to begin with. Spring 3.2.13 even includes the latest ASM 5.0.3 in the meantime, so it's fully up to date at that front. The only part worth noting is the AspectJ version: If you happen to be using AspectJ and in particular load-time weaving, there may be issues on Java 8 unless you upgrade to AspectJ 1.8.5; however, Spring 3.2.13 just supports AspectJ 1.7.4 - we haven't tested it with AspectJ 1.8.x at all.

Beyond that, Spring 3.2.x simply doesn't include any dedicated Java 8 support: i.e. no JSR-310 date-time, no parameter discovery via -parameters, etc. If you don't intend to rely on those features initially, that's by no means a showstopper. I would just strongly recommend an upgrade to Spring 4.x as soon as you intend to embrace Java 8 more fully. For the time being, using Spring 3.2.13 on Java 8 will get you quite far and is entirely safe for your purposes.

Note that we'll release 3.2.14 in May, as a minimal maintenance release, so that line is still actively supported for the time being. There's also a 3.2.15 release planned towards the end of this year, again designed as a very minimal maintenance release. Please be prepared that the 3.2.x line will fade out at that point, with its eventual end of life to be expected for mid/late 2016 and in all likelihood just one further maintenance release (3.2.16) to appear until then.




그 다음으로 수정한 것은 var argument 수정이었다.

java7에서는 적당히 쓸 수 있었는데. java8에서는 ambigous 한 문법이라고 문법 에러를 발생한다. 예를 들어, 


클래스에 test(String a, Object... args)와 test(String a, Message... args)는 java7에서 동작하지만, java8에서는 동작되지 않는다.






Posted by '김용환'
,