Docker 명령어 정리



1. 컨테이너


1) docker ps


- 동작 중인 컨테이너 확인


2) docker rm [컨테이너 ID]


- 컨테이너 삭제


3) docker rm [컨테이너 ID] [컨테이너 ID]


- 복수개의 컨테이너 삭제


4) docker rm 'docker ps -a -q'


- 실행 중인 컨테이너 모두 삭제



2. 이미지


1) docker images


- 동작 중인 이미지 확인


2) docker rmi [Image ID]


- 이미지 삭제


3) docker rmi -f [Image ID]


- 이미지 강제 삭제 (컨테이너 삭제 전 이미지 삭제할 경우)


※ 복수개의 이미지를 삭제하는 명령어는 없음.

'개발 > Docker' 카테고리의 다른 글

Docker Get Started Part 2. Containers  (0) 2019.01.22
Docker Get Started Part 1. Orientation  (0) 2019.01.22
Docker 학습 계획  (0) 2019.01.22

Docker Get Started Part 2. Containers



1. 소개


Docker 방식으로 Application을 제작한다.


- 컨테이너, 앱의 가장 아래 계층부터 시작한다.




2. 새로운 개발환경


- 과거에는 Python Application을 개발하기 위해서는 Python Runtime 부터 설치해야했다.


- Docker를 사용하면 이식 가능한 Python Runtime을 이미지로 가져올 수 있고 설치할 필요가 없다.


- 빌드는 소스코드와 기본 Python이미지를 함께 포함(Dockerfile)하면 가능하다.




3. Dockerfile을 활용한 컨테이너 정의


- Dockerfile을 사용하여 컨테이너를 정의하면 컨테이너 내부 환경을 정의할 수 있다.


- 이전에는 네트워킹 인터페이스나 디스크 드라이버 같은 리소스에 대한 액세스는 시스템과 격리된 환경에서 가상화되고 바깥 환경과 Port를 맞춰줘야 했었다.


- 또한 그 환경에서  원하는 파일이 무엇인지 구체화해야 하는 단점이 있었다.


- 하지만 Dockerfile 작업을 수행하면 앱의 빌드가 어디서나 똑같이 작동하게 할 수 있다.



- Dockerfile 순서


1) 빈 Directory 생성


2) Directory 안으로 이동(cd [폴더명])


3) Dockerfile 생성 -> 확장자는 없다.(vi Dockerfile)


4) 생성한 파일에 아래 내용을 복사하여 붙여넣기


# Use an official Python runtime as a parent image
FROM python:2.7-slim

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app

# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

# Define environment variable
ENV NAME World

# Run app.py when the container launches
CMD ["python", "app.py"]




4. 응용 프로그램


- requirements.txt와 app.py를 생성한다.


- 위에서 만든 Dockerfile이 이미지에 내장되면 Dockerfile의 COPY 명령어로 인해 위의 파일들이 복사되고 EXPOSE 명령어로 인해 HTTP를 통해 app.py 출력에 액세스 할 수 있다.


- Dockerfile 내에 정의되어 있는 pip install -r requirements.txt 명령어가 Python용 Flask, Redis 라이브러리를 설치하고 app.py 파일이 socket.gethostname() 함수에 대한 호출 결과와 함께 환경 변수 Name을 출력하는지 확인한다.


- 마지막으로 Redis가 실행되지 않기 때문에 오류가 발생한다. (Redis 자체가 아닌 Python 라이브러리만 설치했기 때문)




5. Application 빌드


1) ls

- 해당 폴더에 Dockerfile, app.py, requirements.txt가 있는지 확인


2) docker build --tag=friendlyhello . 

- 빌드 명령어 입력 (--tag 대신 -t 도 가능)


3) docker iamge ls

- docker image가 제대로 생성되었는지 확인



6. Application 실행


1) docker run -p 4000:80 friendlyhello

- 컴퓨터의 Port 4000을 컨테이너에 게시된 Port 80과 매핑하여 프로그램을 실행한다. (터미널 종료 시 컨테이너도 종료)


2) http://localhost:4000 로 접속하여 확인


3) curl http://localhost:4000

- 해당 HTML의 소스 확인 가능


4) docker run -d -p 4000:80 friendlyhello

- 1) 의 명령어와는 다르게 컨테이너를 백그라운드에서 실행한다. (터미널 종료 시에도 컨테이너를 유지)


5) docker container stop [Container ID]

- 컨테이너 종료.




7. 내가 만든 이미지 배포하기


- 만든 이미지를 업로드하고 다른 곳에서 실행한다.


- Production에 컨테이너를 배포하는 경우, 레지스트리로 푸쉬하는 법을 알아야 한다.


- Registry = Repository의 모음


- Registry 계정은 많은 Repository 를 생성할 수 있다.


- Docker CLI는 기본적으로 Public Repository를 사용한다. (Docker Hub)


1) Docker Login

- Docker Login

- hub.docker.com에 로그인하는 명령어 (없다면, 사이트에서 회원가입)


2) 이미지 태그

- Local Image를 Registry의 Repository와 연관시키는 표기법은 [username]/[repository]:[tag]


- docker tag [image] [username]/[repository]:[tag]    --> ex) docker tag friendlyhello ppk212/get-started:part2

- Tag 명령어


3) 이미지 게시(Publish)

- docker push [username]/[repository]:[tag]

- 이미지를 자신의 Repository에 게시하는 명령어


- Docker Hub site에 Login 하여 Repository에서 확인 가능


4) 이미지 Pull & Run

- docker run -d -p 4000:80 [username]/[repository]:[tag]

- repository의 이미지를 pull하고 실행하는 명령어



8. 결론


- 다음 장에서 이 컨테이너를 서비스에서 실행하여 Application을 확장하는 방법에 대해서 설명한다.






출처

https://docs.docker.com/get-started/part2/

'개발 > Docker' 카테고리의 다른 글

Docker 명령어 정리  (0) 2019.01.22
Docker Get Started Part 1. Orientation  (0) 2019.01.22
Docker 학습 계획  (0) 2019.01.22

Docker Get Started Part 1. Orientation



1. Docker란?


개발자와 시스템 관리자가 컨테이너를 사용하여 응용 프로그램을 개발, 배포 및 실행하기위한 플랫폼




2. 컨테이너화 (Containerization)


 Linux 컨테이너를 사용하여 응용 프로그램을 배포하는 것


1) 컨테이너화(Containerization)의 장점


- 애플리케이션의 복잡도와 상관없이 어떠한 애플리케이션이든지 컨테이너화 할 수 있다.


- 컨테이너는 호스트 커널을 활용하고 공유한다.


- 업데이트 및 업그레이드를 즉시 배포할 수 있다.


- 로컬환경에서 구축한 후에 클라우드에 배치할 수 있고 어디에서나 실행할 수 있다.


- 컨테이너 복제본을 늘리고 자동으로 배포할 수 있습니다.


- 서비스를 수직적이고 즉석으로 스택할 수 있습니다.

-> 무슨 뜻...?




3. 컨테이너와 이미지


1) 이미지 = 응용 프로그램을 실행하는데 필요한 모든 것을 포함하는 실행 가능한 패키지 (코드, 런타임, 라이브러리, 환경 변수 및 구성파일)


2) 컨테이너


- 이미지를 실행하여 컨테이너를 실행할 수 있다.


- 이미지 런타임 인스턴스


- 이미지가 실행될 때 메모리에 저장된다. (상태가 있는 이미지, 사용자 프로세스)


- "docker ps" 명령어를 사용하여 현재 실행 중인 컨테이너 목록을 확인할 수 있다.




4. 컨테이너와 가상 머신


1) 컨테이너


- 컨테이너는 기본적으로 Linux에서 실행되며 호스트 시스템의 커널을 다른 컨테이너와 공유한다.


- 다른 실행 파일보다 더 많은 메모리를 사용하지 않고 별도의 프로세스를 실행하여 가볍게 만든다.


2) 가상 머신(Virtual Machine)


- Hypervisor을 통해 호스트 리소스에 가상으로 액세스 할 수 있는 본격적인 Guest 운영 체제를 실행한다.


- 일반적으로 가상 머신은 대부분의 응용 프로그램에 필요한 것보다 많은 리소스를 환경에 제공한다.




5. Docker Test


1) docker --version

- Docker의 버전과 Git commit을 출력한다.


2) docker version

- 위 명령어와는 다르게 docker 버전에 관한 자세한 정보를 출력한다. (출력한 내용을 자세히 알아볼 필요가 있다.)


3) docker info

- 여태껏 docker를 사용한 내역을 출력한다. (출력한 내용을 자세히 알아볼 필요가 있다.)


4) docker run [docker image 이름]      ->  ex) hello-world

- Docker image를 다운받는 명령어

5) docker image ls
- Docker image 를 확인한다.

6) docker container ls -all
- Docker 컨테이너를 확인한다. -> -all을 붙힘으로써 실행 중이 아닌 컨테이너도 확인한다.



6. 결론


1) 컨테이너화는 CI/CD를 매끄럽게 만든다.


- 애플리케이션은 시스템 종속성이 없다.


- 업데이트는 분산 응용 프로그램의 모든 부분에 Push될 수 있다.


- 리소스 밀도를 최적화할 수 있다.



2) Docker를 사용하여 Application을 확장하면 과도한 VM Host 를 실행하지 않고 새로운 실행파일을 작성할 수 있다.



출처

https://docs.docker.com/get-started/

'개발 > Docker' 카테고리의 다른 글

Docker 명령어 정리  (0) 2019.01.22
Docker Get Started Part 2. Containers  (0) 2019.01.22
Docker 학습 계획  (0) 2019.01.22

Docker 학습 계획




Docker 사이트의 Get Started를 보고 따라하면서 Docker에 대한 개념을 익히고 사용법을 배울 예정입니다.


실습 진행은 맥북에서 진행할 것이며, 윈도우나 Linux에서 발생하는 예외에 대한 내용은 포스팅하지 않을 에정이니 참고하시기 바랍니다.



출처

https://docs.docker.com/get-started/

'개발 > Docker' 카테고리의 다른 글

Docker 명령어 정리  (0) 2019.01.22
Docker Get Started Part 2. Containers  (0) 2019.01.22
Docker Get Started Part 1. Orientation  (0) 2019.01.22

1. 논문의 구조


1) Abstract : 나는 이러한 문제를 풀겠다.


2) Introduction : 이 문제는 이러한 동기에서 시작되었다.


3) Related work : 관련해서 이러한 연구들이 있었다.


4) Method : 난 이러한 새로운 방식으로 접근해보겠다.


5) Experiment : 나의 새로운 방식이 잘 먹히는지 실험해보았다.


6) Discussion : 내 방식을 통해 이런 사실을 알아냈지만 한계가 있었다.


7) Conclusion : 이 논문에 대해 요약하겠다.




2. 논문의 핵심


- 내가 주어진 문제에서 이러한 기여를 했다.




출처 : http://gradschoolstory.net/terry/readingpapers/



Ubuntu 16.04에서 비트코인 환경세팅





1. VitualBox 개발환경 세팅


https://m.blog.naver.com/PostView.nhn?blogId=wideeyed&logNo=220960764870&proxyReferer=https%3A%2F%2Fwww.google.com%2F


1) 설치 시, HDD 용량을 200GB / Memory 4096MB 로 설정하고 vdi의 위치를 D드라이브로 설정한다. (여유있는 메모리)



2. Ubuntu Network 설정 (되어있으면 Skip)


http://idess.tistory.com/112



3. vi 편집기 사용법


https://blockdmask.tistory.com/25



4. 비트코인 관련 세팅하기


http://daddynkidsmakers.blogspot.com/2018/02/blog-post_22.html  -> 한글 사이트

https://www.toshblocks.com/bitcoin/compile-bitcoin-source-code-ubuntu-16-04-lts/  -> 영문 사이트


1) Git 이 없을 경우 : "sudo apt-get install git" 입력하여 git 설치


2) "../dist/configure --enable-cxx --disable-shared --with-pic --prefix=/home/theusername/bitcoin/db4/" 입력 시, theusername을 ubuntu 사용자 아이디로 변경할 것.


3) 디펜던시 오류가 날 경우에 "./configure LDFLAGS="-L/home/theusername/bitcoin/db4/lib/" CPPFLAGS="-I/home/theusername/bitcoin/db4/include/"" 라는 명령어를 입력하라는데 디펜던시 오류가 안나도 "make -s -j5"가 안되므로 해당 명령어 수행 후 "./autogen.sh" 명령어 또한 실행할 것


4) 마지막 "make -s -j5" 명령어 시간 오래 소요됨.

1단계 : Google Scholar 같은 학문용 검색 엔진을 사용하고 많이 인용된 논문을 찾는다.


1) "논문을 효율적으로 읽는 3단계 접근법"의 1단계를 통해, 연구의 맥락을 잡을 것.


2) 해당 논문과 관련된 논문(참고 문헌이나 해당 논문을 인용한 다른 논문)들을 읽을 것.


3) 최근 연구에 대한 Sketch를 해볼 것.


3-1) 확신이 든다면, 연구의 중심점을 찾은 것이고 그 주제로 읽어나가면 된다.

3-2) 확신이 들지 않는다면, 2단계를 진행할 것.



2단계 : 공통으로 인용되는 논문을 찾고, 반복되는 저자 이름을 찾는다.

- 이러한 논문들이 키 논문이 되고, 키 연구자가 된다. -> 이러한 논문들을 수집할 것.


1) 이러한 키 연구자가 어느 Conference에 논문을 발표했는지 파악할 것. -> 해당 Conference가 Top Conference일 확률이 높다.


※논문이 이해되지 않을 경우.

1. 더이상 읽지 말고 읽을 필요가 없길 바랜다. ( 포기 )

2. 나중에 다시 읽는다. 배경 지식을 쌓은 후일 수 있다. ( 재도전 )

3. 인내심을 발휘하여 3단계로 넘어간다. ( 인내 )



3단계 : Top Conference 웹 사이트에서 최근 기록을 살펴볼 것.

- 양질의 논문을 파악하고, 수집하고, 읽을 것.


※Review 논문을 쓰는 법

- Timothy Roscoe의 논문 "Writing reviews for systems conference"를 읽어볼 것.



출처

- http://blizzard.cs.uwaterloo.ca/keshav/home/Papers/data/07/paper-reading.pdf

- https://woongheelee.com/entry/%EB%85%BC%EB%AC%B8%EC%9D%84-%ED%9A%A8%EC%9C%A8%EC%A0%81%EC%9C%BC%EB%A1%9C-%EC%9D%BD%EB%8A%94-%EB%B0%A9%EB%B2%95

'논문' 카테고리의 다른 글

논문의 구조  (0) 2019.01.18
논문을 효율적으로 읽는 3단계 접근법  (0) 2019.01.11
논문 주제 정하기  (0) 2019.01.11

1단계 : 빠르게 훑어서 논문의 조감도를 얻고 2단계 진행여부를 파악한다. 

- 소요 시간 : 5분~10분(해당 언어를 읽는데 전혀 지장이 없을 경우)


1) 제목, Abstract, Introduction을 주의해서 읽는다.


2) 각 세션의 제목을 읽는다. 나머지는 무시할 것.


2-1) 만약, 수학적인 내용이 있다면, 대충 읽어서 이론적 배경이 무엇인지 확인할 것.


3) Conclusion 읽기.


4) Reference를 훑고, 자신이 읽은게 있는지 파악.


5) 다음 5가지 질문에 답하기.


 ① Category : 이 논문은 어떤 타입인가? ( 측정에 관한 논문 / 기존 시스템 분석에 관한 논문 / 연구 프로토타입에 관한 논문 )


 ② Context : 이 연구와 관련된 다른 연구는 무엇인가? ( 어떤 이론적 배경이 문제 해결에 사용되었나? )


 ③ Correctness : 이 논문의 가정이 유효한가?


 ④ Contributions : 이 논문의 주요 공헌은 무엇인가?


 ⑤ Clarity : 잘 써져있는 논문인가? -----------> 잘 써진 기준이 무엇인지 파악하기 힘듦


6) 위의 대답을 토대로 논문을 프린트하여 2단계 진행 여부를 결정한다.



2단계 : 논문을 집중해서 읽는다.

- 소요 시간 : 60분(해당 언어를 읽는데 전혀 지장이 없을 경우)


1) 증명과 같은 세세한 것들은 무시할 것.


2) 읽어가면서 핵심을 적고 여백에 비평(이해되지 않거나 저자에게 질문하고 싶은 내용)을 서둘 것. 


3) 그림, 다이어그램, 등을 주의깊게 살펴볼 것.


4) 참고 문헌 중에 나중에 읽을 만한 논문을 표시할 것.



※논문이 이해되지 않을 경우.

1. 더이상 읽지 말고 읽을 필요가 없길 바랜다. ( 포기 )

2. 나중에 다시 읽는다. 배경 지식을 쌓은 후일 수 있다. ( 재도전 )

3. 인내심을 발휘하여 3단계로 넘어간다. ( 인내 )



3단계 : 논문을 완벽히 이해한다. - 논문의 내용을 재실험해본다.

- 소요 시간 : 몇 시간(초심자) / 1~2시간(경험자)


1) 문장 하나하나를 확인하고 검토한다.


2) 자신의 특별한 아이디어를 생각해야 한다. -> 비교 증명과 논문 서술 기교에 관한 통찰력 습득.




출처

- http://blizzard.cs.uwaterloo.ca/keshav/home/Papers/data/07/paper-reading.pdf

- https://woongheelee.com/entry/%EB%85%BC%EB%AC%B8%EC%9D%84-%ED%9A%A8%EC%9C%A8%EC%A0%81%EC%9C%BC%EB%A1%9C-%EC%9D%BD%EB%8A%94-%EB%B0%A9%EB%B2%95

'논문' 카테고리의 다른 글

논문의 구조  (0) 2019.01.18
문헌 조사 3단계 방법 - 어떤 논문을 읽어야 하는가.  (0) 2019.01.11
논문 주제 정하기  (0) 2019.01.11

+ Recent posts