Docker Local Repository 사용하는 방법

|

Docker Local Repository 사용하는 방법

현재 사용하는 PC에 Docker Local Repository를 구성하고 싶으면 아래의 방법대로 하시면 됩니다.

Docker init.d 파일 수정

먼저 Docker 서비스를 종료합니다.

$ sudo service docker stop

그 이후 /etc/init.d/docker 파일을 편집기로 열어서 DOCKER_OPTS 항목에 아래 내용을 추가해줍니다.

DOCKER_OPTS=--insecure-registry localhost:5000

그런 다음 Docker 서비스를 다시 실행합니다.

$ sudo service docker restart


Registry Server 이미지 다운로드

Docker Registry 서버도 Docker Hub에서 이미지로 배포하고 있습니다. 다음 명령어로 Registry 이미지를 다운로드합니다.

$ docker pull registry:latest


Registry 컨테이너 실행

로컬 PC의 `/home/snowdeer/Docker/registry’ 폴더를 컨테이너에 연결시켰습니다.

docker run -d -p 5000:5000 --name snowdeer-registry -v /home/snowdeer/Docker/registry:/tmp/registry registry


로컬 Registry에 Docker 이미지 올리기

먼저 commit 명령어를 이용해서 Docker 이미지를 간단하게 만들어봅니다.

$ docker run --name snow-nginx nginx

$ docker commit -m "Snow Nginx" snow-nginx snow-nginx:0.1

그런 다음 위에서 만들었던 로컬 Registry에 해당 이미지를 push 명령어를 이용해서 업로드합니다.

$ docker tag snow-nginx:0.1 localhost:5000/snow-nginx:0.1

$ docker push localhost:5000/snow-nginx:0.1

The push refers to repository [localhost:5000/snow-nginx]
fced5b294318: Pushed 
a103d141fc98: Pushed 
73e2bd445514: Pushed 
2ec5c0a4cb57: Pushed 
0.1: digest: sha256:6e7f42cb6b7df0c8a4cbd75d0fbecefcafdcc6c0d95bb4e07a19c05ef19e5171 size: 1155

태그를 생성하는 명령은 docker tag <image name>:<tag> <Docker registry URL>/<image name>:<tag> 입니다.

이미지 업로드는 docker push <Docker registry URL>/<image name>:<tag> 입니다.

개인이 만든 Registry에 이미지를 올릴 때는 먼저 태그를 생성해야 하며, 그 이후 push 명령을 사용할 수 있습니다.


로컬 Registry의 이미지 리스트 조회

로컬 Registry의 이미지도 docker images 명령을 이용해서 조회할 수 있습니다.

$ docker images

REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
localhost:5000/snow-nginx   0.1                 e3fc966b1d25        5 minutes ago       108MB
snow-nginx                  0.1                 e3fc966b1d25        5 minutes ago       108MB
ubuntu                      latest              0458a4468cbc        11 days ago         112MB
wordpress                   latest              e8cebf03929c        2 weeks ago         407MB
mysql                       latest              f008d8ff927d        3 weeks ago         409MB
registry                    latest              d1fd7d86a825        3 weeks ago         33.3MB
nginx                       latest              3f8a4339aadd        5 weeks ago         108MB


로컬 Registry의 이미지 다운로드

$ docker pull localhost:5000/snow-nginx:0.1


로컬 Registry의 이미지 삭제

$ docker rmi localhost:5000/snow-nginx:0.1

우분투(Ubuntu)에서 Snap Package 사용하기

|

Snap Package

우분투에 기본 내장된 Ubuntu Software를 이용해서 프로그램들을 설치하려고 했을 때 아래와 같은 오류가 발생하는 경우가 있습니다.

image

Detailed errors from the package manager follow:

snapd returned status code 400: Bad Request

Linux가 Ubuntu, Fedora, Debian 등 다양한 형태로 파편화가 되어 있고, 프로그램 설치 파일 형태도 제각각이기 때문에 Universal Package로 만들려는 시도가 있었습니다. 그러다가 우분투에서는 ‘Snap’이라는 이름의 Universal Package를 런칭했습니다. 당연히 ‘Snap’은 다른 리눅스에서도 설치가 가능했습니다. 작년 초에 Snap 2.20을 릴리즈했고, 기존에 사용하던 App인 ‘Software Center’에서는 아직 지원이 안되고 있습니다. 그래서 현재는 Snap을 사용하려면 터미널에서 커맨드 입력으로 사용해야 합니다.


Snap 사용법

다음과 같은 형태로 사용하면 됩니다.

Store의 프로그램 검색

$ snap find <text to search>

ex) snap find "visual studio code"

위 명령어를 입력하면 ‘Visual Studio Code’에 대한 정보가 나오고 패키지명과 Class Snap 여부를 확인할 수 있습니다.


프로그램 설치

image

따라서 위와 같은 경우는 아래 명령어를 이용해서 프로그램을 설치할 수 있습니다.

$ snap install <snap name>

ex) sudo snap install vscode --classic


프로그램 업데이트

만약 기존에 설치한 프로그램을 업데이트하고 싶을 때는 refresh 옵션을 이용하면 됩니다.

$ snap refresh <snap name>


모든 프로그램 업데이트

모든 프로그램을 업데이트할 경우엔 다음 명령어를 입력합니다.

$ sudo snap refresh


프로그램 삭제

$ sudo snap remove <snap name>

우분투(Ubuntu) 16.04에 아나콘다(Anaconda) 설치하는 방법

|

Ubuntu 16.04에 Anaconda 설치

Ubuntu에 아나콘다를 설치하는 방법은 다음과 같습니다.

먼저 아나콘다 홈페이지에 가서 설치 스크립트 파일을 다운로드 합니다. 현재 Python 3.6 버전에 64비트 버전 기준으로 약 500MB가 조금 넘습니다.

그리고 터미널로 가서 다음 명령어를 입력해줍니다.

bash Anaconda3-5.0.1-Linux-x86_64.sh

이 때부터 Enter 키와 yes 타이핑 등을 차례로 요구하기 때문에 천천히 설치를 진행합니다.

설치 경로는 보통 /home/[userid]/anaconda3로 지정이 될 것이며, 그 후 .bashrc에 패스 등록까지 해줍니다.

그 후

source ~/.bashrc

명령어를 통해 .bashrc를 한 번 더 수행해주면 됩니다.

그 이후 conda list 등의 명령어가 정상적으로 동작하는지 확인하면 됩니다.

ROS2 Coding Convention for C++

|

ROS 2.0 Coding Convention for C++

ROS 2.0에서 추천하는 코딩 스타일은 다음과 같습니다.

  • ROS 2.0은 C++14 기반
  • Google C++ Style Guide 기반

  • 한 라인의 문자 수 = 100
  • 클래스의 멤버 변수는 가급적 private로 선언
  • Exception도 허용함
  • 람다 사용시 std::function이나 std::binding 모두 허용
  • Boost 라이브러리는 정말 필요한 경우 아니면 가급적 사용안할 것
  • Documentaion을 위해 주석은 /// 또는 /** */ 사용 추천
  • 포인터 표현 시 char * c 형태로 사용하는 게 좋음. char* cchar *c는 사용하기 곤란한 경우가 있음(ex. char* c, *d, *e;)
  • private:, public: 등 키워드 앞에는 공백 없는 것 추천
  • Nested Template에는 공백 사용 안하는 것 추천(ex. set<list<string>>)
  • if, else, do, while, for 등 다음에 구문이 라인이 하나뿐이더라도 중괄호는 무조건 사용할 것
  • function, class, struct 등에는 open braces, if, else, while 등에는 cuddle braces 사용 추천


올바른 예시

int main(int argc, char **argv)
{
  if (condition) {
    return 0;
  } else {
    return 1;
  }
}

if (this && that || both) {
  ...
}

// Long condition; open brace
if (
  this && that || both && this && that || both && this && that || both && this && that)
{
  ...
}

// Short function call
call_func(foo, bar);

// Long function call; wrap at the open parenthesis
call_func(
  foo, bar, foo, bar, foo, bar, foo, bar, foo, bar, foo, bar, foo, bar, foo, bar, foo, bar,
  foo, bar, foo, bar, foo, bar, foo, bar, foo, bar, foo, bar, foo, bar, foo, bar, foo, bar);

// Very long function argument; separate it for readability
call_func(
  bang,
  fooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo,
  bar, bat);


나쁜 예시

int main(int argc, char **argv) {
  return 0;
}

if (this &&
    that ||
    both) {
  ...
}


올바른 예시

ReturnType LongClassName::ReallyReallyReallyLongFunctionName(
  Type par_name1,  // 2 space indent
  Type par_name2,
  Type par_name3)
{
  DoSomething();  // 2 space indent
  ...
}

MyClass::MyClass(int var)
: some_var_(var),
  some_other_var_(var + 1)
{
  ...
  DoSomething();
  ...
}


나쁜 예시

ReturnType LongClassName::ReallyReallyReallyLongFunctionName(
    Type par_name1,  // 4 space indent
    Type par_name2,
    Type par_name3) {
  DoSomething();  // 2 space indent
  ...
}

MyClass::MyClass(int var)
    : some_var_(var),             // 4 space indent
      some_other_var_(var + 1) {  // lined up
  ...
  DoSomething();
  ...
}

우분투(Ubuntu) 16.04 노트북 터치패드 스크롤 방향 바꾸기

|

터치패드 스크롤 변경

MacOS 또는 Windows에서의 2손가락 제스처와 Ubuntu에서의 제스처의 방향이 달라서 헷갈리는 경우가 많습니다. Windows의 경우 과거에는 제스처를 아래로 내리면 아래로 스크롤이 되고, 위로 올리면 위로 스크롤이 되었지만 현재는 ‘Natural Scrolling’이라는 이름으로 그 방향이 바뀌었습니다. 스마트폰 등 화면에 직접 제스처로 스크롤하는 경우가 보편화되면서 터치패드의 스크롤도 화면에 스크롤하는 것과 같은 방향으로 바뀌었습니다.

Ubuntu 16.04 LTS 버전 기준으로 노트북의 터치패드 스크롤 방향 변경하는 방법입니다.

  • System SettingsMouse & Touchpad
  • Natural scrolling 항목 체크

image