.deb File 설치방법
확장자가 .deb 인 파일은 debian 리눅스에서의 설치파일로, 같은 계열인 ubuntu 에서 손 쉽게 설치 가능합니다.
설치
$ sudo dpkg -i filename.deb
제거
$ sudo dpkg -r PACKAGE_NAME
보통은 apt-get 을 이용하지만 .deb 파일을 직접 설치할 경우 유용한 명령입니다.
확장자가 .deb 인 파일은 debian 리눅스에서의 설치파일로, 같은 계열인 ubuntu 에서 손 쉽게 설치 가능합니다.
$ sudo dpkg -i filename.deb
$ sudo dpkg -r PACKAGE_NAME
보통은 apt-get 을 이용하지만 .deb 파일을 직접 설치할 경우 유용한 명령입니다.
루비 온 레일즈 (Ruby on Rails)를 Docker 로 배포할 때 간단 팁입니다.
Rails 를 도커로 배포할 때 가장 큰 문제는 Rebuild 시간이 오래걸린다는 것입니다.
원인은 바로 bundler !!
$ bundle install
이놈이 오래걸립니다.
하여 예전에 이 Article 을 보고 적용해서 쓰던 중 보다 괜찮은 방법이 있어서 기록합니다.
제가 쓰는 Dockerfile
을 아래 공유합니다.
FROM ruby:2.3.4-slim
LABEL maintainer="9to5, ktk0011+dev@gmail.com"
RUN apt-get update && \
apt-get install -y --no-install-recommends \
build-essential git libpq-dev nodejs vim libxslt-dev libxml2-dev cron && \
rm -rf /var/lib/apt/lists/*
ENV INSTALL_PATH /app
WORKDIR $INSTALL_PATH
ENV BUNDLE_FROZEN=1 BUNDLE_DISABLE_SHARED_GEMS=true BUNDLE_WITHOUT=development:test
ADD ./bin $INSTALL_PATH/bin
COPY Gemfile Gemfile.lock ./
RUN bin/bundle install --deployment
ADD . $INSTALL_PATH
기존과의 차이점은 BUNDLE_FROZEN
을 이용해서 더이상 Gem변경을 허용하지 않으며,
BUNDLE_DISABLE_SHARED_GEMS
설정으로 번들 path를 고정하고,
BUNDLE_WITHOUT
을 이용해서 오직 deployment 환경을 대상으로만 bundle 을 관리합니다.
이런 형태로 사용한다면 docker
로 변경된 내용을 배포할 때 마다 bundler 때문에 시간이 소모되는 문제를 쉽게 해결 가능합니다.
Rails 5 에서 lib 폴더를 autoload path
에 포함시키고 싶은데 아래 코드가 제대로 동작을 하지 않았습니다.
config.autoload_paths << Rails.root.join('lib')
찾아보니 스택오버플로우에 아래와 같은 정보가 있습니다.
autoload – Rails 5: Load lib files in production – Stack Overflow
코드를 보면 initializer
를 이용해서 rb 파일들을 읽어오도록 구현되어 있습니다.
이런식으로 원하는 코드들만 가져와도 될 듯합니다. 스타도 많이 받았습니다. ㅎㅎㅎㅎ
위의 글을 보면 이 아저씨가 해결한 방법은 autoload 를 사용하지 않고 eager_load 를 사용하라고 합니다.
config/environments/production.rb 의 내용을 봅니다.
# Eager load code on boot. This eager loads most of Rails and
# your application in memory, allowing both threaded web servers
# and those relying on copy on write to perform better.
# Rake tasks automatically ignore this option for performance.
config.eager_load = true
eager_load 가 기본 설정입니다.
config/application.rb 하단에 아래 내용을 추가합니다.
config.eager_load_paths << Rails.root.join('lib')
문제 없이 잘 동작합니다.
Postgresql 의 명령어를 간단히 정리해보겠습니다.
항상 잊어버리는 명령어를 기록해두기위한 차원입니다.
$ psql database_name
-# \q
-# \l
CREATE DATABASE sentry WITH ENCODING='UTF8' OWNER=postgres;
-# \c database_name
-# \du
-# CREATE ROLE <role name> WITH LOGIN;
ref: PostgreSQL: Documentation: 8.1: ALTER ROLE
-# ALTER ROLE <role name> WITH LOGIN CREATEDB;
phone 컬럼 추가: not null, default 값은 false
database_name-# ALTER TABLE users ADD COLUMN phone boolean not null default false;
database_name-# ALTER TABLE users DROP COLUMN phone;
ALTER TABLE app_config
ADD CONSTRAINT ukey_app_config_app_id UNIQUE (app_id);
ALTER TABLE app_config
DROP CONSTRAINT ukey_app_config_app_id;
database_name-# \d
database_name-# \di
users 테이블 정보 보기
database_name-# \d users
pg_dump 데이터베이스명 > 파일명.dump
$ pg_dump -Fc dbname > outfile
$ pg_restore --clean database_name my.dump
$ pg_restore --verbose --clean --no-owner -h localhost -U postgres -d database_name my.dump
$ psql -U username -d myDataBase -a -f myInsertFile
\i path_to_sql_file
Docker
접속하는데 로그인이 되지 않는 문제에 직면했습니다!!
갑자기…
private registry
에 접속을 시도합니다.
$ docker login example.com
Error response from daemon: Get http://docker.example.com/v2/: dial tcp 176.32.84.179:80: getsockopt: connection refused
이런 문제가 발생했습니다.
원인은 현재 Private Docker Registry
가 v1인데 자꾸 접속 시도를 v2 로 하는 것입니다.
원인은 제가 며칠전에 docker
를 업데이트한 것에 있었습니다.
docker 17.04
부터 registry v1 에 접속할 수 없다고 합니다.
docker toolbox
를 사용하는 저는 docker -v
를 쳐보고 17.03이 나와서 이상하게 생각했는데,
docker info
를 쳐보고 Docker server version
이 17.06임을 확인했습니다.
docker machine
을 사용 중 일 경우는 간단합니다.
boot2docker.iso
버전을 17.03 으로 낮춰 주는 겁니다.
Release v17.03.1-ce · boot2docker/boot2docker · GitHub
여기서 다운 받고,
Docker-machine
을 멈춘 뒤,
$ docker-machine stop
Virtualbox에서 default 이미지의 위치를 확인, 덮어써줍니다.
/Users/user/.docker/machine/machines/default/boot2docker.iso
이제 다시 로그인 시도를 해봅니다.
접속이 정상적으로 됩니다.
#docker #docker-machine #registry #problem
현재 목록 확인
$ sudo iptables -L
규칙 추가
$ sudo iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP
설명: 들어오는 패킷이 127.0.0.1 의 아이피를 가지고 있고 protocol 이 icmp 면 버려라.
번호 확인
$ sudo iptables -L --line-numbers
삭제
$ sudo iptables -D INPUT 3
#iptables #command
오늘은 Docker를 Mac에서 사용할 때 격는 문제에 대해 정리합니다.
저는 Docker toolbox
를 이용하고 있으며, Docker for Mac
과 의 차이점에 관련된 내용은 여기서 참고하시면 됩니다.
Docker
이미지 빌드 중에 이런 메시지를 만났습니다.
failed to register layer: Untar re-exec error: exit status 1: output: write /home/oracle/app/oracle/oradata/oracle/users01.dbf: no space left on device
no space left on device
틀림없이 제 맥북은 용량이 많이 남아있습니다.
Docker-machine
은 VirtualBox 를 이용해서 docker
를 실행합니다.
이에 docker
가 실행되는 환경 접속을 하려면 별도의 명령이 필요합니다.
$ docker-machine ssh
이제 도커가 돌고 있는 가상 환경으로 들어왔습니다.
디스크 용량을 확인합니다.
$ sudo df -h
...
/dev/sda1 20.0G 19.9G 0.1G 99% /mnt/sda1/var/lib/docker/aufs
...
저 녀석이 꽉차 있습니다.
그냥 docker-machine
의 가상머신 환경을 날리고 용량을 크게 다시 만듭니다.
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default * virtualbox Running tcp://192.168.99.101:2376 v17.06.0-ce
저 default
를 날립니다.
$ docker-machine rm default
이제 disk size 를 새로 지정합니다. 여기서는 80G 로 만듭니다.
$ docker-machine create --driver virtualbox --virtualbox-disk-size "80000" default
이 전 과정을 반복해서 용량을 확인합니다.
$ docker-machine ssh
$ sudo df -h
변경이 완료되었습니다.