티스토리 뷰

새 회사에 왔더니 엄청난 Docker 고수가 있었다.

그래서 몇몇 팁을 배웠다.

기존에 나는 pip니 npm이니... 하면서 온갖 lib니 sdk니 하는 것들을 로컬호스트에 잔뜩 설치했었는데.. 디펜던시가 꼬인다던지... 뭔가 설치가 잘못됐다던지... 하면 도저히 어떻게 돌이켜야할지 멘붕이었다.

Docker 고수님 가라사대.. Development Environment를 구성한 도커 컨테이너를 하나 만들고, 여기에 소스코드 폴더를 마운트 해서 쓰라고.. 그리고 온갖 Environment들은 다 이 도커 컨테이너 안에 구성하라고.....

어느정도 쓰다보면 나만의 environment set이 구성될텐데, 이걸 Base Image 스냅샷으로 만들어서 도커 허브에 올려놓고 계속 가져와서 쓰라고.... 엄청난 조언을 주었다.

이렇게 할 경우 디펜던시 등이 꼬여도 다시 롤백하기가 워낙 편하기에......

와우....

일단 기본 명령어

# 우분투 이미지 실행. -it 통해서 키보드 입력 받을 수 있게 한다.
$ docker run -it ubuntu /bin/bash

이러면 해당 컨테이너의 shell 로 접속하게 된다.

참고 : vi를 그냥 설치하려고 시도했더니 E: Unable to locate package vi 라면서 설치가 안된다.

$ apt-get update
$ apt-get install vim

했더니 이제 설치가 됐다.

이제 $ exit 치고 나와서 $ docker ps -a 를 해보자.

생성된 컨테이너를 확인 할 수 있다.

참고로 컨테이너를 지우려면 $ docker rm [container_id] 하면 된다.

이제 위 컨테이너로 다시 접속하려면 어떻게 해야할까?

아마도 컨테이너가 종료 됐을 것이기 때문에 우선 컨테이너를 다시 실행해주자

$ docker start [container_id]

그리고 아래 명령어로 도커에 다시 접속하자

$ docker exec -i -t [container_id] /bin/bash

하면 접속된다. 이후에는 $ exit 치고 나와도 컨테이너가 살아있더라. 왜 먼젓번 생성했던 컨테이너처럼 Exit되지 않고 계속 실행중인지는 나도 몰러...

이제 분산 개발 환경을 위해 특정 폴더를 마운트 해서 도커 컨테이너를 띄워보자.

기본적으로 내 Source Code가 들어있는 Workspace 폴더를 마운트하면 추후 도커 환경에서 해당 Workspace 빌드가 편리할 것이다.

아래의 명령으로 내 로컬 호스트의 Workspace와 컨테이너의 Workspace(/root/code)를 연결해주자.

# 기본 명령
$ docker run --name [이름] -i -t -v [로컬 호스트 워크스페이스 경로]:[컨테이너 워크스페이스 경로] ubuntu /bin/bash

# 현재 workspace일 경우 아래와 같이도 할 수 있다.
$ docker run --name [이름] -i -t -v `pwd`:/root/code ubuntu /bin/bash

# 내가 실행한 명령. (Workspace에 들어간 이후 아래 명령 실행)
$ docker run --name dev -i -t -v `pwd`:/root/code ubuntu /bin/bash

이러면 이제 내 로컬 호스트의 Workspace와 도커 컨테이너의 /root/code 디렉토리가 연결 완료 된다.

이름은 특별히 dev라고 지었다.

이제 위의 도커 컨테이너를 실행 해주고

$ docker start dev

접근해보자.

$ docker exec -i -t dev /bin/bash

앞으로 이 컨테이너 안에 각종 개발환경을 집어넣으면 끝!

빌드도 여기서 돌리고.. 굳!

이렇게 한번 start 명령으로 실행하고 나면 이제 컨테이너가 Stop 되지도 않는다.

참고1: 초기에 -v 명령어로 디렉토리를 마운트 해서 생성했으면, 이후 exec 할 때 -v 옵션을 안 줘도 자동으로 마운트 된 상태에서 컨테이너가 실행된다.

  • 궁금증1: 그럼 -i -t 명령어는 왜 계속 다시 줘야되는거지 ㅜㅜ?
  • 궁금증2: 어떤 컨테이너에 어떤 디렉토리가 마운트 돼있는지 알려면 어떻게 해야하지 ㅜ?
  • 궁금증3: 컨테이너 생성 이후에 마운트 옵션을 바꾸는 방법은 없나.. 찾아봐도 잘 안나온다.

참고2: -v 명령으로 디렉토리 마운트시, 호스트와 컨테이너 각각 없는 디렉토리 경로를 마운트 하려 할 경우 각각의 디스크에 디렉토리를 생성한다. 예를 들어 /asdf:/fdsa 할 경우 호스트에 /asdf가 생성되고 컨테이너 안에 /fdsa가 생성되어 서로 연결 된다.

참고3: 명령은 pipeline을 따르기 때문에, 인자의 순서가 매우 중요하다. 뒤바뀌면 오동작 한다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함