How to install Docker on MacOS
and execute ubuntu
오늘 밤에 이거하다 시간 다 간듯...중간에 터미널 설정 꾸며보겠다고 난리치다가 포기,,,,, 담에 다시한다 너..
학교 모든 강의에서 모든 파일 linux로 실행되어야 한다고 해서
사실 맥북쓰면 맥북이 unix기반으로 되어있고 (linux는 unix기반) 간단한 것들은 비슷,,하다고 해서
그냥 설치하지 않으려 했으나, 마음 한켠 이거 작동 안 되면 어떡하지 하고 도커를 설치하게 되었다..
사실 맥북에서 리눅스를 실행하는 방법은 정말 여러가지이지만, 별로 무겁게 쓰고싶지도 않고 도커가 좋다는 말이 많아서 (그리고 잘 사용할 수 있으면 나중에 다 도움된다는 얘기에) 도커 설치 후 도커에서 우분투를 실행해기로 했다..
#도커의 개념은 여기서 (안 보고 실행했다가 애먹었음,,,다 도움되는 이야기니 정독하고 해보세요 ㅎ,,)
https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html
#맥북에 도커 설치는 여기서
https://hub.docker.com/editions/community/docker-ce-desktop-mac/
- Get docker 누르고 진행하면 되고
- 설치 관련 자세한 내용은 여기에 https://docs.docker.com/docker-for-mac/install/ 다 나와있다.
아이디 미리 생성후 설치하면 편하겠쥬?
- 보면 Desktop 이 있고 toolbox가 있는데, toolbox는 맥구형유저를 위한거라고한다. 그래서 난 desktop을 설치했음.
#도커에서 우분투 실행 기본과정(?)
도커 실행(귀여운 고래아이콘 누르기) - 터미널/쉘에서 ubuntu image를 pull(가져온다) - container생성 후 run해준다.
<위 과정에서 필요한 명령어>
#우선 도커 잘 설치되었는지 확인
docker run hello-world
아마 처음 설치했으면 hello-world 라는 이미지가 없어서, 도커가 없는걸 확인한 후 자동으로 이미지 pull해와서 실행할 것이다.
#우분투 이미지 설치 및 bash 실행
docker run -i -t --name hello ubuntu /bin/bash
우분투의 이미지를 가져와서 hello라는 이름을 가진 컨테이너를 생성하고 실행됨
만약 (--name hello) 생략시 임의로 도커가 컨테이너 이름 지정함..(이름들 다 웃기고 귀여움 ㅋㅋㅋ)
(-i: interactive / -t: Pseudo-tty)
이런식으로 docker 의 dashboard를 눌러보면 hello라는 우분투이미지를 pull한 컨테이너가 생성되었고 실행중인 모습을 볼 수 있다.
종료하고 싶으면 exit 입력하면 bash shell에서 빠져나오게되고
우분투 이미지에서 /bin/bash 에서 실행했기 때문에 여기서 빠져나오면 컨테이너 정지 됨.
자 그럼 이제, 내가 원하는건 linux기반의 우분투에서 내가 짠 c언어 코드를 실행시키는 것이다.
이를 위해선 docker cp 라는 명령어가 필요한데,,, 나 여기서 또 한차례 헤맸다 ㅋㅋㅋㅋ..ㅠ
컨테이너의 쉘 안에서 실행할게 아니라 밖에서 실행해야하는데 계속 이 뻘짓을 반복하고는 외 않돼냐고;; 이러고 있었다..후,,,
우선 도커 위의 우분투와 내 맥은 완전 별개의 OS라고 생각하면 된다.
따라서 내 맥의 Desktop에 있는 파일을 실행하고 싶다면 파일을 복사해서 컨테이너에 옮겨줘야하는데 이때 필요한 것이 cp 라는 명령어이다.
//컨테이너 -> 호스트
$ docker cp hello:/test/main.c ~/Users/Desktop
//호스트 -> 컨테이너
$ docker cp ~/Users/Desktop/main.c hello:/test/
#컨테이너 -> 호스트: hello라는 컨테이너 안에있는 miain.c를 호스트의 Desktop으로 복사
#호스트 -> 컨테이너: 내 맥북 Desktop안에 있는 main.c를 hello라는 컨테이너의 test 디렉터리로 복사
예시) Users/.../code1/main.c 라는 c언어 소스파일을 hello안의 test라는 디렉터리 안으로 복사할 것이다.
우선 hello라는 컨테이너 안에 test 디렉토리 만들어주고
(에어드랍보다 카톡으로 전송한 사진이 왜 더 선명하지......?)
맨 윗줄처럼 main.c 복사를 해주고
실행을 하려 했으나...!!!! 내 우분투가 gcc 가 깔린 버전이 아니어서 업데이트를 해줘야했다...
sudo apt-get update
sudo apt-get install gcc
를 하니까... 거짓말처럼 드디어 main.c gcc로 컴파일해서 실행이 되었다......드디어.................................
(도와주신 나노님께 무한한 감사를 드립니다 ㅠㅠ)
<기타 기억하면 좋을 명령어들>
#실행, 재시작, 정지
sudo docker start hello //정지된 컨테이너 실행
suco docker restart hello //재부팅한것처럼 다시 실행
sudo dockder attach hello
//시작한 컨테이너에 접속 -> 엔터 한 번 더 입력하면 bash shell 표시됨
sudo docker stop hello //컨테이너 정지
#목록 출력
sudo docker ps //실행중인 컨테이너 출력
sudo docker ps -a //정지된 컨테이너까지 모두 출력
sudo docker images //받은 이미지의 목록 출력
#삭제, 제거
sudo docker rm hello //컨테이너 삭제
sudo docker rmi hello-world //이미지 삭제
#검색 docker search
sudo docker search ubuntu
search 명령으로 Docker Hub에서 이미지 검색할 수 있음
(터미널, 배쉬, 쉘, 도커, 우분투)
#쉘(Shell)
- OS(운영체제)의 인터페이스로서, 커널과 대비되는 개념
- 쉘(껍데기) 커널과 사용자를 이어주는 인터페이스 / 커널(핵심) OS의 내부 처리
- CLI: Command Line Interface
#배쉬(배시, Bash(Bourne Again SHell))
- 리눅스 운영체제에서 사용하는 쉘의 일종
#터미널(Terminal)
- IO(input/output)이 이루어지는 지점
운영체제에 명령내리려면 쉘-명령어입력-쉘해석-출력
여기서 입출력 담당하는 것이 터미널
cmd: window의 shell
솔직히,,,,존나 헤맸다... 도커도 모르고 우분투도 모르고....... 우분투 도커를 설치하는 방법..? 뭐 이런것도 있어서 헤맸지만
나름 감을 잡아가는 과정에 있다고 생각한다.
다행인 거는 재밌다는 것이다.
내가 너무 느린게 아닌가 조급한 마음도 있지만 천천히 하나씩 하다보면 잘 되겠지 뭐 ^^;;;
저처럼 헤매시는 분들이 제 포스터가 조금이라도 도움이 되었길 바라며..
실행관련 참고 링크
https://subicura.com/2017/01/19/docker-guide-for-beginners-2.html
명령어 관련 참고 링크
http://pyrasis.com/Docker/Docker-HOWTO#section-6
'STUDY > CODING' 카테고리의 다른 글
열혈 C : 도전 프로그래밍4_1번, 2번 문제 (0) | 2020.03.21 |
---|---|
열혈 C : 문제 25-2 malloc, calloc, realloc 함수 이용하기 (0) | 2020.03.16 |
열혈 C: 문제25-2 1번 문제 (1) | 2020.03.14 |
열혈 C: 문제21-2 3번 문제 (0) | 2020.03.14 |
열혈 C : PopuResarch.c 1차원으로 표현하기 (0) | 2020.03.14 |
댓글