레이블이 setfacl인 게시물을 표시합니다. 모든 게시물 표시
레이블이 setfacl인 게시물을 표시합니다. 모든 게시물 표시

mac ls -l @ 확장 속성

# mac(맥)에서 ls -l 로 보면 퍼미션에 @ 가 붙어 있는 파일들을 볼 수 있다.
# 확장속성(extended attribute)을 가진 파일로, 파일시스템에서 파일과 관련된 메타 정보를 명시하고 있다.
# 확장속성의 자세한 내용 https://en.wikipedia.org/wiki/Extended_file_attributes
ls -l
-rw-r--r--@ 1 ysoftman  staff   387 12 20 15:10 iterable.html

# 확장속성이 추가되는 경우
iterm2 -> ls -> .html 파일 cmd+click -> 브라우저로 열였을때

# xattr 로 확장속성 파일의 내용을 확인할 수 있다.
xattr iterable.html
com.apple.lastuseddate#PS
com.apple.metadata:_kMDItemUserTags

# xattr -c 로 파일에서 확상속성을 제거할 수 도 있다.
xattr -c iterable.html

#####

# 맥에서 압축된 파일을 압출 풀때 다음과 같이 경고가 나오고, 추가적인 별도 파일들도 생성된다.
tar zxvf ysoftman.tar.gz
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.LaunchServices.OpenWith'

# 맥에서 확장 속성을 제거한 후 압축 하도록 한다.
# -r : act recursively
# -c : clear
xattr -rc ./ysoftman
tar czf ysoftman.tar.gz ./ysoftman

# 이제 압축 풀면 경고도 없이 압축이 풀린다.
tar zxvf ysoftman.tar.gz

#####

# + 는 ACL permission 속성을 나타낸다.
# xNix 에서 getfacl, setfacl 명령으로 acl 상태 보기 및 설정이 가능하다.

docker command

docker(도커)는 리눅스의 컨테이너 기술을 이용한 가상화 플랫폼이다.
기존 가상화 시스템인 VMware, VirtualBox 등과 달리 Guest OS 를 설치하지 않고 Host OS 의 자원을 공유해서 사용할 수 있어 빠른 장점이 있다.
(기존 가상화 시스템은 게스트 OS 와 호스트 OS 를 사이에 Hypervisor 가 존재하고 이과정으로 인해 전반적인 속도 저하가 발생한다.)
도커는 이미지(image)라는 일종의 파일 묶음을 컨테이너(container)라는 일종의 실행환경 인스턴스로 만들어 사용하게 된다.
도커는 리눅스에서 동작하지만 Mac 이나 Windows 에서 Docker ToolBox 를 이용해서 사용할 수 있다.

# 윈도우에서 docker 설치하기(legacy)
# DockerToolBox 다운로드 https://www.docker.com/products/docker-toolbox
# 아래 그림 처럼 docker compose, virtualbox, kitematic 를 모두 설치하자.


# Docker QuickStart Terminal 실행하면 도커의 마스코트 고래가 짜잔~ㅎ
# 참고로 초기 실행시 환경 설정으로 느리고 다음 실행 부터는 빠르게 프롬프트가 표시된다.


# dockertoolbox 는 legacy 로 대신 docker ce(community edition) 을 설치할 수 도 있다.
# 윈도우 도커 다운로드 https://docs.docker.com/docker-for-windows/install/

#####

# 맥에서 docker 설치
# Docker.dmg 다운로드 https://docs.docker.com/docker-for-mac/install/
# docker.app 실행 하면 도커 데몬이 실행되고 상단에 다음과 같은 고래 아이콘이 보인다.

# 2017년 현재 mac 에서 docker 사용시 몇자기 제한이 있다.
# docker0 브리지가 없고 컨테이너 ip 설정이 안된다.
https://docs.docker.com/docker-for-mac/networking/#known-limitations-use-cases-and-workarounds
# 설정 파일을 이용한다면
vi /etc/docker/daemon.json
{
  "data-root": "/home/ysoftman/docker",
  "insecure-registries" : ["myregistrydomain.com:5000", "ysoftman.com:5000"]
}
sudo service docker restart

#####

# centos 에서 docker 설치
# 기존 설치된 docker 모두 삭제
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine
# 도커 설치 파일 다운로드
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.12.1.ce-1.el7.centos.x86_64.rpm

# 설치(rpm 파일은 yum 으로도 설치할 수 있다.)
sudo yum install ./docker-ce-17.12.1.ce-1.el7.centos.x86_64.rpm

#####
# linux 에서 sudo 없이 docker 명령 사용하기
# 방법1 - docker 그룹 추가 (/etc/group)
sudo groupadd docker

# /etc/group 에 docker 그룹에 현재 사용자 추가
sudo gpasswd -a $USER docker

# 소켓파일 docker 그룹으로 변경
sudo chgrp docker /var/run/docker.sock

# 터미널 로그아웃/로그인
# 방법2 - socket 파일 권한 변경
# docker.sock file acl 보기
getfacl /var/run/docker.sock

# docker.sock docker 그룹 권한 설정
sudo setfacl -m g:docker:rw /var/run/docker.sock

# docker.sock docker 그룹 권한 삭제
sudo setfacl -x g:docker /var/run/docker.sock

# 방법3 - socket 파일 현재 사용자:그룹으로 권한 변경
sudo chown -R ysoftman:ysoftman /var/run/docker.sock

#####

# docker command
# 도커 이미지 저장 위치(docker root dir) 저장소(registry) 등 정보 확인
docker info

# 현재 가지고 있는 이미지 목록 보기
docker images

# 도커 hub 에 올라온 nginx 이미지 검색하기
docker search nginx

# description 에 Official 이라고 명시된 공식 이미지를 다운 받자.
# nginx:123 와 같이 태그를 명시하지 않으면 가장 최근 버전을 다운 받는다.
docker pull nginx

# nginx 에서 사용에 마운트해서 사용할 공간 만들기
mkdir /www
vi /www/index.html
ysoftman nginx test

# nginx 이미지로 컨테이너 만들기
# run : 컨테이터 생성(실행)
# --name : 컨테이너 이름 설정
# -d : 컨테이너를 백그라운드로 실행
# -i : interactive(stdin open)
# -t : tty 환경
# -v : 호스트 /www 를 컨테이너의 /usr/share/nginx/html 에 readonly 로 마운트, 둘다 절대경를 사용해얖 한다. readonly 를 빼면 디폴트로 쓰기도 가능하다.
# -p : 호스트 포트 8080 을 컨테이너 포트 80 에 바인딩
# nginx : 실행시킬 이미지 이름
docker run --name ysoftman_nginx -dit -v /www:/usr/share/nginx/html:ro -p 8080:80 nginx

# 컨테이너에 명령어 실행하기(쉘 실행하여 접속해보기)
docker exec -u root -it ysoftman_nginx /bin/bash

# 컨테이너 상태 파악
# -v 마운트를 했는데 Config -> Volumes 가 null 이라면 -v 을 사용하지 말자
docker inspect ysoftman_nginx

# 컨테이터의 ip 확인
docker inspect --format='{{.NetworkSettings.IPAddress}}' ysoftman_nginx

# 도커(호스트) ip 확인
# 윈도우의 경우 mingw64 환경(git bash사용)에서 도커가 동작하기 때문에 mingw64 가 호스트가 된다.
# http://도커ip:8080 로 nginx 동작 확인
docker-machine ip

# ysoftman_nginx 컨테이너에서 현재 실행중이 프로세스 보기
docker top ysoftman_nginx

# 컨테이너 목록 보기(STATUS 로 상태를 알 수 있기 때문에 top 대신 사용 가능)
docker ps -a  또는 --all


# 컨테이너 변경사항으로부터 이미지 만들기
# -m "ysoftman_nginx" : 커밋 메시지
# -a "ysoftman" : 작성자
# ysoftman/ysoftman_nginx:1.0 : 저장소:tag 로 이미지 생성
docker commit -m "ysoftman_nginx" -a "ysoftman" ysoftman_nginx ysoftman/ysoftman_nginx:1.0

# dockerfile 을 작성하여 이미지 빌드시
# --no-cache=true 캐시된 이미지를 사용하지 않고 새로 만들어 시간이 올래 걸린다.
# -t 태그 명시(저장소:태그)
# 자세한 내용은 https://docs.docker.com/engine/reference/builder/
docker build --no-cache=true -t ysoftman/ysoftman_nginx:1.0 .

# dockerfile 작성시 유념
# RUN,COPY 실행 마다 레이어가 생성된다.
# 이전 레이어가 실행한것을 알지 못하기 의존성이 있는 명령은 && 연결해 하나의 RUN 으로 실행해야 한다.
# CMD 는 한번밖에 사용하지 못한다.
# CMD "echo aaa; echo bbb" 는 shell(새로운 프로세스 생성) 방식이다.
# CMD ["echo aaaa"] 는 exec(현재 프로세스를 대체) 방식이다.
# exec 방식에서 여러개의 명령을 실행하려면
# CMD ["bash", "-c", "echo aaa; echo bbb;"] 와 같이 bash -c(뒤에 오는 스트링을 쉘명을 처리) 로 실행해야 한다.
# 참고 https://docs.docker.com/engine/reference/builder/#cmd
# 다음은 명령마다 생성된 이미지와 각각의 크기를 알 수 있다.
docker histsory ysoftman/ysoftman_nginx:1.0

# docker hub 로그인(없으면 계정 생성 https://hub.docker.com)
# $HOME/.docker/config.json 설정된 서버로 로그인한다.
docker login

# docker hub 에 이미지 푸시하기
docker push ysoftman/ysoftman_nginx:1.0

# 컨테이너 5초 후 중지
docker stop -t 5 ysoftman_nginx

# 컨테이너 시작하기
docker start ysoftman_nginx

# 컨테이너 로그(비정상 종료 코드로 exit 되는 경우 참고)
# -f, --follow
docker logs -f ysoftman_nginx

# 컨테이너 강제 삭제
docker rm -f ysoftman_nginx

# 컨테이너 전체 삭제
docker rm $(docker ps -aq)

# 이미지 강제 삭제
docker rmi -f ysoftman_nginx:1.0

# 이미지 전체 삭제
docker rmi $(docker images -q)

# 이미지 태깅이 안되거나 이미지 생성 중 실패된 상태의 <none> 이미지 삭제
docker rmi $(docker images -a | grep "<none>" | awk '{print $3}')

# docker 1.13 부터 image container ... 등 관리 명령이 추가되었다.
# 최신 docker 무료버전(ce) 를 설치하자
# 기존 old docker 삭제
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine

# yum 관련 유틸 설치
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# centos 용 docker 저장소 추가
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# docker ce 설치
sudo yum install docker-ce

# unused 이미지들 모두 삭제
docker image prune

# dangling 이미지들 모두 삭제
sudo docker rmi $(sudo docker images --filter "dangling=true" -q)

# 중지된 컨테이너들 모두 삭제
docker container prune

# exited 또는 created 상태 컨테이너들 삭제
sudo docker ps -a | grep -i -e exited -e created | awk '{print $1}' | xargs docker rm

# 도커 이미지,컨테이너등이 사용하는 디스크 용량 확인
docker system df
docker system df -v

# 사용안하는 이미지, 컨테이너들 모두 삭제
docker system prune

# 100일(2400시간)이 지난 이미지는 모두 삭제
# -a, --all  Remove all unused images, not just dangling ones
#     --filter filter   Provide filter values (e.g. 'until=<timestamp>')
# -f, --force           Do not prompt for confirmation
docker image prune -a -f --filter "until=2400h"

# 참고
http://pyrasis.com/docker.html
https://hub.docker.com/_/nginx
http://blog.iolo.kr/510
https://docs.docker.com/engine/reference/commandline/dockerd/
https://docs.docker.com/engine/installation/windows/#container-port-redirection
http://www.slideshare.net/pyrasis/docker-fordummies-44424016