본문 바로가기

개발/Linux & DevOps

docker 공부 노트

모든 이미지의 출처 : https://www.youtube.com/watch?v=Bhzz9E3xuXY

 

 

개념 한마디 요약 :

리눅스에 있는 컨테이너를 이용해서,

OS를 설치하고 뭐쩌고 하는 과정을 없이,

내가 필요한 개발환경을 싹 세팅해주는 기능 정도로 이해할 수 있겠다.


1. 사용자 계정 추가

거두절미하고 바로 본론으로 들어간다

wget을 사용해서 docker를 설치한다.

sudo wget -qO- https://get.docker.io/ | sh

무조건 sudo 권한으로 실행해야한다.

sudo usermod -aG docker 사용자이름

이 말은 즉 docker라는 그룹에 사용자 계정을 추가하는 것.

이렇게 하면, 그룹에 대해 설정이 반영이 안되어있기 때문에,
로그아웃하고 다시 접속해야 반영이 되어있는 것을 확인할 수 있다.

exit를 사용하여 로그아웃 하자.

 

2. 이미지 받아오기

운영체제를 설치하는 것이 아니라,
도커에서 제공하는 패키지관리자가 설치된 이미지를 받아오기.

윈도우로 치면 img 파일을 받아오는 것과 같다.

깃허브와 마찬가지로 push pull이 있다.
인터넷으로 주고 받는 환경이 만들어져 있다.
dock&docker = git&github

docker search ubuntu

도커에서 기본으로 제공하는 서치기능.
유저들이 만들어놓은 수많은 이미지가 bash창에 리스트업 된다.

하지만 이건 너무 복잡하게 생겼기 때문에,
검색을 한다면 docker사이트에 들어가서 검색하는 거나

docker pull ubuntu:14.04

아예 공식이미지를 찾는다면 위와 같은 형식을 사용할 수 있다.

docker images

로 pull이 정상적으로 됐는지 확인.

(내 로컬 저장소에 pull 된 도커 이미지를 보여주는 명령어)

 

3. 이미지를 선택해 컨테이너 생성, 실행

docker run -i -t ubuntu:14.04 /bin/bash

옵션설명:

i = interactive 사용자입출력
t = 터미널 환경 에뮬레이트 가능하게
/bin/bash 처럼 실행할 프로그램을 같이 호출해줘야 한다.

이렇게 되면 새로운 컨테이너가 생성되고, 그 컨테이너를 bash로 제어할 수 있게 된다.

 

실행화면 :

egoing@ubuntu 에서 root@78bfbb044e74로 바뀐 것을 보아,

도커에 올려져있는 우분투로 접속하게 된 것을 알 수 있다.

 

기본적으로 컨테이너의 원본이미지가 ubuntu 14.04이기에,

ls명령어로 디렉토리를 확인하는 모오습.

root권한을 갖고 있고, apt-get으로 설치도 가능하다.

exit 를 사용해서 종료가 된다.

 = 컨테이너가 shutdown된 것이다.

리눅스의 ps 명령어처럼, 실행중인 혹은 실행했던 프로세스를 확인할 수 있듯이,

docker ps 도 같은 기능을 한다. 기본적으로 실행중인 컨테이너를 보여주며,

docker ps -a 를 입력하면 종료된 컨테이너까지 보여준다.

좌우 가로 길이가 짧아서 줄바꿈됨; 잘 확인해보길 바란다.

도커는 컨테이너가 생성될 때 임의로 이름을 부여한다.
물론 생성시 옵션을 줘서 이름을 설정할 수도 있다.
이 이름을 사용해

docker start 컨테이너이름

방식으로 시작을 한다.
혹은 컨테이너 아이디를 사용해도 된다.

 

4. 명령어들 (feat. 몇가지 질문)

Q. docker start & docker run 의 차이?
start는 그냥 도커를 실행시키는 명령어.
run은 실행과 동시에 위 명령문 처럼 옵션을 주어 bash로 접속할 수 있다.

docker attach 도커이름

헷갈릴 수 있는데, attach는 이미 실행된 컨테이너에 접속하는 명령어이다.

그렇게 보면, docker start, docker attach = docker run ~~ 와 같다고 할 수 있겠다.

* 아참, 참고로 docker attach 도커이름 + 엔터키를 쳐야 다음으로 넘어간다.

 

Q. 컨테이너를 백그라운드에 실행시켜 놓을 수 있나?

** > Ctrl + P + Q**
를 사용하면 도커가 종료가 안 된 상태로 bash에서 빠져나올 수 있다.

컨테이너는 종료 되더라도 계속 남아있다.

 

삭제하려면

docker rm 컨테이너 이름

 

Q. 같은 이미지로 여러개의 컨테이너 실행가능한가?

가능하다.

 

Q. 컨테이너에서 apt-get으로 여러가지를 설치했다. 이미지에 영향이 있는가?

전혀 없다.

마치 JAVA에서 이미지 = class, 컨테이너 = instance

와 같은 개념으로 이해했다.

docker pull nginx latest

도커로 엔진X 최신버전을 다운 받는 명령어

docker run -d --name hello-nginx nginx:latest

nginx는 데몬이라서 띄우고 끝이기 때문에, "-d"옵션을 줘서 백그라운드로 돌아가게 한다.
--name 옵션으로 이름 지정

 

Q. 포트를 자동지정해주는데, 만약 포트가 겹친다면?
도커 포트 옵션으로 바꿔주기!
-p 8000:80
호스트 포트 8000, 컨테이너 포트 80번
외부 접속은 8000으로 접속, 도커에선 80번으로 포트포워딩해줌
(도커 내부적으론 80번 포트를 오픈해놓으면 된다)

 

5. 도커 근황 (20.05.01 기준)

docker exec 최근에 들어간 기능
원래는 메인 프로세스만 실행 가능했음.
근데 이 기능으로 다른 기능도 실행 가능하게 됨.

( = 당장 선택된 하나의 컨테이너에서 명령어를 입력하는 것만 가능했는데,

exec를 사용하면 docker exec 컨테이너이름 명령어 를 통해 명령어 실행이 가능하다)

 

예제를 보자.

docker run -i -t --name hello ubuntu:14.04 /bin/bash

실행후 Ctrl P Q 로 나와서, 바깥에서 실행중인 컨테이너에 echo 를 실행하기!

docker exec hello echo 1

를 실행하면 컨테이너에서 1이 실행됨.

docker exec hello touch /hello.txt

를 실행하고,

docker attach hello

를 실행하고 ls 를 실행하면
hello.txt 가 생성되어 있다.

 

 

 

반응형