Docker 2 : 실습
1. Docker 설치하기.
Docker 공식 홈페이지에서 우리 운영체제에 맞는 Docker Desktop을 설치하자.
이후 제대로 실행됐는지확인하기 위해 터미널에 docker를 입력해보자.
'Docker'를 찾을 수 없다는 내용이 아닌, 관련 정보가 나온다면 제대로 설치된 것이다.
2. Docker 실습
(1) Docker 다운로드
Docker 이미지를 만든다고 했는데, Docker 이미지를 받아오는 명령어는 다음과 같다.
docker pull "이미지 이름 : 태그"
위 코드는 어딘가에 올라와 있는 Docker 이미지를 받아오는 것이다.
예시: 'docker pull mysql:8' 은 mysql 8 버전의 이미지를 다운로드하는 것이다.
(2) Docker 확인하기
이제 다운로드가 제대로 됐는지 확인해보자.
docker images
위 명령어를 입력하면 우리 컴퓨터에 다운받은 이미지를 볼 수 있다.
만약 'docker pull mysql:8'를 실행하고 'docker images'를 입력했다면 mysql에 태그가 8인 항목이 보일거다.
(3) Docker 실행하기
이제 다운로드 받은 이미지 기반으로 Container를 띄우는 방법을 알아보자.
이때 사용하는 것은 다음과 같다.
docker run "이미지 이름:태그"
위 코드는 단순히 실행 뿐만 아니라 다양한 옵션도 줄 수 있다.
docker run --name '컨테이너 이름' -e MYSQL_ROOT_PASSWORD=1234 -d -p 3306:3306 '이미지 이름':'태그'
--name '컨테이너 이름'
- 지정하지 않으면 랜덤하게 생성된다.
-e
- 환경 변수를 설정하는 구간이다.
- MYSQL은 항상 ROOT_PASSWORD를 입력해줘야 하는데, 사용하는 이미지에 따라 설정이 다를 수 있다.
- 이런 설정을 Docker로 할 때 주입해주는거다.
-d
- 데몬의 약자로 백그라운드 모드를 의미한다.
- 컨테이너를 백그라운드 형태로 실행하겠다는 의미다.
- 그래서 이 옵션을 주면 컨테이너가 띄워졌다는 말만 하고, 다시 명령어를 쓸 수 있는 상황이 된다.
- 이걸 하지 않으면 그냥 컨테이너로 들어가진다.
- 이 설정하지 않으면 실행한느 쉘 위에서 컨테이너가 실행된다.
- 컨테이너 로그를 바로 볼 수 있으나, 컨테이너를 나가면 실행 종료가 된다.
- 때문에 백그라운드로 켜는 것을 권장하고 있다.
-p
- 포트를 지정한다.
- 로컬 호스트 포트 : 컨테이너 포트 형태다.
- 코드에 따르면 3306:3306으로 되어 있는데, 이 의미는 다음과 같다.
- '로컬 포트 3306으로 접근하면 컨테이너 포트 3306으로 연결되도록 설정한다.'
- 이로 인해 누군가가 로컬 호스트 포트 3306으로 들어오면 컨테이너와 연결되어 있으니, 컨테이너로 접근하게 해주는 것이다.
- 보통 포트를 다르게 쓰면 헷갈리므로 같이 쓰도록 권장하는 편이다.
'이미지 이름': '태그'
- 가장 뒤에 있는 것은 이미지 이름과 태그를 기입해주는거다.
- 예시: 'mysql: 8'
이렇게 입력하고 실행하면 컨테이너가 띄워진다.
(4) 컨테이너 확인하기
실행한 컨테이너는 다음 코드로 확인할 수 있다.
docker ps
그 결과 어떤 컨테이너가 띄워져있고, 어떤 이미지이며, 어떤 커맨드인지 등에 대해 알 수 있다.
이걸 보면서 내가 실행한 컨테이너가 실제로 동작하는지 확인하기 위해 위 코드로 확인할 수 있다.
(5) 컨테이너 접근하기
컨테이너를 작동시켰는데, 그 안에서 어떤 일이 일어나는지 궁금할거다.
이제 그 컨테이너 안으로 접근하고 싶을 수 있다.
이때 다음과 같은 명령어를 입력하자.
docker exec -ot "컨테이너 이름 혹은 ID" /bin/bash
이를 통해 컨테이너 안으로 진입할 수 있다.
(6) 내부에서 MYSQL 실행하기
이제 컨테이너 안으로 들어왔고 mysql이 깔려있으므로 다음과 같은 코드를 입력하자.
mysql -u root -p
그러면 쉘 화면이 보일거다.
이렇게 나오면 된다.
정리하면 다음과 같다.
(1) 우리는 컨테이너를 실행해서
(2) 컨테이너 안에 들어가고
(3) 컨테이너 안에서 mysql을 실행한 것이다.
(7) 모든 컨테이너 확인하기
그런데 컨테이너를 만들었는데 작동이 멈출 수도 있다.
그런 경우 다음 코드로 확인할 수 있다.
docker ps -a
위 명령어는 모든 컨테이너 목록을 보여준다.
(이전에 우리가 입력했던 'docker ps' 는 실행중인 컨테이너 목록만 보여준다.)
위 코드를 통해서 우리가 안 쓰는 컨테이너가 있으면 없애는게 낫다.
(8) 컨테이너 삭제하기
그럼 멈춘 컨테이너를 삭제하는 방법에 대해 알아보자.
docker rm "컨테이너 이름 혹은 ID" # 멈춘 컨테이너만 삭제 가능
docker rm "컨테이너 이름 혹은 ID" -f # 실행중인 컨테이너도 삭제 가능
3. 그 외
docker run을 할 때 파일을 공유하는 방법이 있다.
로컬과 컨테이너가 있다고 하자.
컨테이너의 데이터 저장 공간에 파일이 있을 수 있다.
하지만 별도의 옵션이 없다면 컨테이너가 꺼질 때 그 파일은 사라진다.
이를 위해 Volume Mount 옵션을 사용한다.
Volume Mount 옵션을 사용하면 로컬의 저장소와 컨테이너의 저장소에 같이 저장시킨다.
즉, Docker 내부에 있는 파일이랑 로컬에 있는 파일을 같이 저장하고 싶을 때 사용한다.
예를 들어 우리가 쥬피터 노트북 docker를 띄웠는데 Volume Mount를 안한 상태에서 컨테이너가 꺼지면, 파일이 사라진다.
때문에 반드시 Volume Mount을 해주자.
Volume Mount는 -v옵션을 사용하며, -p처럼 사용한다.
-v Host_Folder:Container_Folder
docker run -v <호스트_경로>:<컨테이너_경로> <이미지_이름>
예시
docker run -it -p 3306:3306 -v /host/folder/forClass/examples:/home/vamba/workspace jupyter/minimal-notebook
3. 정리
docker pull : 이미지 다운로드
docker images : 다운로드 받은 이미:지 확인
docker run : 이미지 기반으로 컨테이너 생성
docker ps : 실행 중인 컨테이너 확인
docker ps -a : 모든 컨테이너 확인
docker exec -it "컨테이너 이름 혹은 ID" /bin/bash : 컨테이너 내부 접근
docker stop "컨테이너 이름 혹은 ID" : 실행중인 컨테이너 중지
docker rm "컨테이너 이름 혹은 ID" : 멈춘 컨테이너 삭제
docker rm "컨테이너 이름 혹은 ID" -f : 실행중인 컨테이너 삭제