Linux Docker.

참고문서:
https://docs.docker.com/engine/installation/ubuntulinux/
https://docs.docker.com/engine/userguide/
https://docs.docker.com/engine/userguide/basics/

 

I. 설치

1. 설치(ubuntu 14.04 에서).

아래 커맨드로, docker repository를 위한 pgp key를 등록한다.

docker repository를 등록한다. /etc/apt/sources.list.d/docker.list 화일을(없으면 만들고) 아래와 같이 편집한다. os version이 ubuntu14.04이므로 trusty repository를 등록.

ubuntu 14.04 이전 버전에서는 설치 시 커널을 업그레이드 해 주어야 하지만, 여기서는 14.04 이기 때문에, 커널 업그레이드는 필요 하지 않다.

docker가 잘 설치되었는지 확인해 본다. 아래와 같이 보이면 잘 설치된 것이다.

2. 선택 사항(추가설정)

‘docker’ 그룹 만들기.

docker 데몬은 tcp 포트 대신 unix socket을 사용한다. unix socket은 보통 root 소유이고, 다른 사용자들은 sudo 를 통해 접근 가능하다. 이런 연유로 docker는 항상 ‘root’ 권한으로 실행된다.
‘docker’ 커맨드를 사용할 때, sudo 사용을 피하려면, ‘docker’ 그룹을 만들고, sudo 사용가능한 사용자를 ‘docker’그룹에 속하게 해주면 된다. docker 데몬이 시작 될 때, ‘docker’그룹이 unix socket을 읽고 쓸 수 있도록 한다.

ubuntu 14.04에서 docker를 설치하면, ‘docker’ 그룹이 만들어져 있을 것이다. 따라서, sudo 커맨드를 사용할 수 있는 사용자에게는 아래처럼 ‘docker’ 그룹을 추가해 주면 된다. 아래는 id가 snowfox인 사용자에게 ‘docker’ 그룹을 추가해주는 명령어이다.

이제, ID snowfox 로 로그인한 후 docker 커맨드를 사용했을 때, 아래와 같은 결과를 얻을 수 있다.

UFW 설정.
docker 호스트가 실행되는 서버에서 ufw가 실행되고 있다면, 추가 설정이 필요하다. docker는 bridge를 사용해서 container 네트워킹을 관리한다. UFW는 기본적으로 forward 패킷을 drop한다. 따라서 UFW가 enable되어 있는 상태에서 docker를 실행중이라면, forwarding 룰을 추가해주어야 한다.
또한 UFW는 기본적으로 모든 incoming 트래픽을 deny한다. 만약 다른 호스트에서 container에 연결하기를 원한다면 docker 포트에 incomming connect를 허용해 주어야 한다. docker의 기본 포트는 TLS 사용하는 경우 2376, 사용하지 않는 경우 2375 이다. TLS를 사용하지 않는다면, 통신은 암호화되지 않을 것이다. 기본적으로 docker는 TLS 사용하지 않고 실행된다.

UFW 사용 중인지 확인한다.

/etc/default/ufw에서 forward 정책을 수정한다.

수정하고 UFW룰을 reload한다.

docker 포트로 들어오는 연결을 허용해준다.

Docker에 의해 사용하는 dns 서버 설정.

/etc/default/docker에서 아래 부분처럼 주석을 제거해준다. 구글 public DNS를 사용하지 않는다면, 8.8.8.8 대신 사용할 dns서버의 ip주소를 넣어주면 된다.

II. 사용하기.

1. docker 명령어와 Dcker Hub
Dcker Hub는 Docker Inc.에 의해 관리되는 공개된 repository 이며, 이미 build된 15000 개 이상의 이미지를 제공한다. docker는 search, pull, login, push 명령어로 Docker Hub 서비스에 접근할 수 있다.

docker login : 계정이 없다면, 간단하게 만들 수 있다.

로그인을 하려고하면, 아래처럼 계정이 활성되지 않았다는 메시지가 나온다.

email을 확인하고, 계정을 활성화 하면, 아래처럼 로그인 할 수 있다.

docker search : Docker Hub 에서 이미 만들어진 image를 검색하여 보여준다.
ubunu를 검색하면 아래와 같은 결과를 볼 수 있다. 첫번째, 두번째줄의 official 항목에 OK 표시가 나오는 이미지가 공식 이미지이고, 아래쪽 toursware/speedus-ubuntu는 speedus-ubuntu라는 이미지 이름으로 toursware 사용자가 만든 것 이다.

docker pull : 원하는 이미지를 설치한다.
search로 원하는 이미지를 찾았으면, pull 명령어로 설치한다. 위에서 찾은 ubuntu 공식 이미지를 설치 하려면 아래와 같이 하면 된다.

docker images : 다운로드 받은 이미지를 확인 할 수 있다.

docker push : 내가 만든 docker 이미지를 업로드한다.
내가 만든 docker 이미지를 업로드하려면, docker push id/image_name 형식의 명령어를 사용한다.

docker run : container를 만든다.
-i 옵션은 interactive, -t 옵션은 Pseudo TTY 옵션으로 stdin/stdout으로 입출력이 가능하게 해준다.

container 에서 shell(bash)을 종료하지 않고 tty를 떼어내려면, Ctrl+p, Ctrl+q 를 순서대로 누른다. 그리고, docker ps -a 명령어로 확인해보면, 쉘을 종료하지 않았기 때문에, 상태가 Up 으로 나오는 것을 확인 할 수 있다.

docker ps : container 리스트를 확인한다.

옵션 없이 사용하면, 현재 running중인 container만 보여주며, -a 옵션을 사용하면 모든 container를 볼 수 있다.

docker start : 정지된 container를 실행한다.
exited 상태인 container를 아래처럼 시작할 수 있다.

docker stop : 실행중인 container를 정지시킨다.

docker restart : 정지된 또는 실행중인 container를 재 실행한다.
바로 위 예에서, 상태가 exited 인 container(ID 06e7caf1e9db)를 재 실행하려면, restart 뒤에 container ID를 붙여주면 된다. 재 실행하고 ps 로 확인해보면, 상태가 UP 된 것을 확인 할 수 있다.

이때, container를 처음 만들었을 때(docker run -it ubuntu /bin/bash) 처럼 shell 프롬프트가 떨어지지는 않는다. 이때는 attach 명령어를 사용한다.

docker attach :

docker rm : container를 삭제한다.
container를 삭제하려면, rm 명령을 사용한다. rm 뒤에 삭제하고자 하는 container id를 나열하면 된다.

docker top : container에서 실행중인 프로세스를 확인
docker top CONTAINER_ID 형식으로, 아래는 ID가 ed77cc644c46인 container에서 mysql 서버가 실행 중임을 알 수 있다.

docker info : docker가 설치되어 있는지 확인 설치되어 있다면, 아래와 비슷한 화면을 볼 수 있다.

댓글 남기기

Your email address will not be published.

%d 블로거가 이것을 좋아합니다: