본문 바로가기

전체 글

(128)
4. Docker 이미지/컨테이너 관리하기2 docker rm, rmi > docker ps -a > docker rm {container_id} > docker rm {container_id1} {container_id2} {container_id3} .... > docker ps -a docker run 명령어는 새로 컨테이너를 만들면서 동작하기때문에 docker ps -a로 도커 컨테이너 리스트를 보면 많은 컨테이너가 존재하는걸 확인할 수 있다. 하지만 더이상 사용하지 않는 컨테이너가 계속 남아있는건 자원의 낭비이기 때문에 삭제해주어야 하고 이때 사용하는 명령어가 docker rm이다. docker rm은 컨테이너를 삭제하는 명령어인데, 실행중인 컨테이너는 삭제하지 못하기 때문에 실행중인 컨테이너도 지우고 싶으면 docker stop으로 먼저..
3. Docker 이미지/컨테이너 관리하기1 --help > docker --help ... ps List containers ... > docker ps 지금까지 docker run 으로 이미지를 컨테이너로 실행하고, 실행중인 컨테이너를 docker stop으로 중지시킨것처럼 docker에는 많은 명령어가 존재한다. 도커에는 수많은 명령어와 옵션이 존재하는데 이를 모두 외울수는 없다. 이때 쓸 수 있는것이 --help이다. --help를 명령어와 함께 실행하면 사용할 수 있는 명령어와 옵션을 알 수 있다. docker --help를 통해 컨테이러 리스트를 볼 수 있는 docker ps를 발견하고 실행하였다. > docker ps --help ... -a, --all Show all containers (default shows just runni..
4-7) 인터페이스는 구현하는 쪽을 생각해 설계하라 인터페이스와 디폴트 메소드 // MyInterface.java // MyInterface의 구현체인 MyClass가 존재하기 때문에 MyInterfece에 메소드를 추가하면 컴파일 에러가 발생한다. public interface MyInterface { public void method1(); } // MyClass.java public class MyClass implements MyInterface { @Override public void method1() { } } 인터페이스의 구현체가 한번 정의되고 나면 인터페이스에 메소드를 새로 추가하기 어렵다. 구현체 클래스는 개발당시의 인터페이스 메소드들을 구현했기 때문에, 새로 추가된 메소드는 미구현 상태가 되고 컴파일 에러가 발생한다. 따라서 인터페이스..
2. Docker 이미지와 컨테이너: 이미지 빌드하기, 도커 이미지 주의사항, 도커 이미지 레이어 Dockerfile과 이미지, 컨테이너 앞에서 도커 컨테이너란 어플리케이션 실행파일과 실행에 필요한 시스템 설정, 도구, 패키지를 모두 포함하고 있는 소프트웨어 유닛이라고 말했었다. 이러한 도커 컨테이너를 만들기 위해서는 여러 과정을 거쳐야 한다. 먼저 Dockerfile을 만들어야 한다. Dockerfile은 필요한 리눅스 환경을 만들기 위해 필요한 파일이나 명령어가 정의되어있는 설계서이다. 설계서인 Dockerfile을 빌드하면 도커 이미지가 만들어진다. 도커 이미지는 리눅스 환경에서 동작할 어플리케이션 실행파일과 실행에 필요한 시스템 설정, 도구, 패키지의 묶음 파일이다. 마지막으로 파일 상태인 도커 이미지를 자원을 할당하여 실행시킨것이 컨테이너이다. NodeJS 앱을 도커로 띄워보자 도커로 Nod..
1. 시작하기: Docker란, 환경 세팅, Docker 띄워보기 컨테이너와 도커 구글에 도커를 검색해보면 "리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트"라고 나온다. 여기서 컨테이너란 어플리케이션 실행파일과 실행에 필요한 시스템 설정, 도구, 패키지를 모두 포함하고 있는 소프트웨어 유닛을 말한다. Spring Boot 웹서버를 컨테이너로 실행한다고 하면 여기에는 Spring Boot 실행파일과 Java 실행환경, Nginx 패키지와 설정파일이 모두 포함되어 있을 것이다. 실습 환경 세팅 Docker Desktop을 사용하면 윈도우에서 더욱 쉽고 간편하게 도커를 사용해볼 수 있다. Docker Desktop은 공식 홈페이지(https://docs.docker.com/desktop/install/windows-..
4-6) 추상 클래스보다는 인터페이스를 우선하라 추상 클래스와 인터페이스 자바에서는 코드의 재사용성을 높이기 위해 공통으로 쓰일 수 있는 내용들을 상속해서 사용하도록 추상 클래스나 인터페이스로 정의할 수 있다. 추상 클래와 인터페이스 모두 상속을 위해 만들어진 것으로 그 자체로 인스턴스를 만들 수 없다. 그리고 추상 클래스나 인터페이스에 존재하는 추상 메소드는 상속/구현하는 하위 클래스에서 구현해야 한다. 이 둘은 비슷한 역할을 하고 있지만 차이점도 존재한다. 먼저 추상 클래스는 일반 메소드도 가질 수 있고 멤버 변수도 가질 수 있다. 하지만 단일 추상클래스만을 상속 시킬 수 있다. 인터페이스는 추상 메소드만을 가져야하고 멤버변수를 가질 수 없지만 다중상속을 시킬 수 있다. 인터페이스와 믹스인 정의 // 비교 기능(Comparable)과 반복 기능(I..
4-5) 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라 상속을 고려한 문서화 public abstract class AbstractCollection implements Collection { ... /** * {@inheritDoc} * * @implSpec * This implementation iterates over the collection looking for the * specified element. If it finds the element, it removes the element * from the collection using the iterator's remove method. * * Note that this implementation throws an * {@code UnsupportedOperationException} if th..
Vagrant 에러 InitializeSecurityContext failed: Unknown error (0x80092012) - 해당 함수에서 인증서에 대한 파기 여부를 검사하지 못했습니다. InitializeSecurityContext failed: Unknown error (0x80092012) - 해당 함수에서 인증서에 대한 파기 여부를 검사하지 못했습니다. 도커/쿠버네티스를 공부하기 위해 구입한 도서의 1장 환경 세팅 챕터를 보고 따라하다가 위와 같은 에러가 발생했다. 이유를 찾아보니 vagrant cloud에서 파일을 받아올 때, https로 통신하는데 인증서에 문제가 있어서 발생하는 에러였다. 아래와 같이 vagrantfile에 인증서 검사를 하지 않도록 하는 옵션을 추가해야 에러가 발생하지 않는다. ... Vagrant.configure(...) do |config| ... config.vm.box_download_insecure = true ... end ...