Docker 설치 및 사용법
데이타베이스(Database)/DockerDocKer란 무엇인가?
Docker란 간단하게 말하면 가상화된 컨테이너(virtualization container)입니다. 필요한 프로그램이나 라이브러리를 설치한 뒤 만들어낸 파일을 도커(Docker)를 통해서 실행하게 됩니다. 이 때, 만들어진 파일을 도커 이미지(Docker image)라고 합니다. 도커 이미지는 컨테이너를 구동하기 위한 기능과 환경설정 등의 모든 정보를 가지고 있습니다.
Docker 설치하기
Docker는 설치 환경에 따라서 설치 방법이 다릅니다. 여기서는 Mac OS를 기준으로 합니다.
다음 링크를 참조하여 Docker를 설치할 수 있습니다.
https://www.docker.com/products/docker-desktop
설치가 완료되었으면 터미널에서 docker 명령어를 실행하여 다양한 명령어들을 출력할 수 있습니다.
터미널에 docker 를 입력하여 잘 출력되는지, 설치가 잘 되었는지 확인해 봅니다.
만약, docker명령어를 입력했는데 실행되지 않는다면, sudo docker 와 같이 root권한으로 실행해 보시기 바랍니다.
Docker 명령어 실행하기
도커는 기본적으로 'docker + 명령어' 형태로 실행합니다.
docker search [OPTIONS] TERM 명렁어를 실행하면 Docker Hub라는 곳에 공유되어 있는 이미지들을 검색할 수 있습니다.
docker search mysql 명령어를 입력하여, mysql이라는 이름을 가진, Docker Hub라는 곳에 공유되어 있는 도커 이미지가 어떤것이 있는지 살펴보겠습니다.
mysql이라는 이름을 가진 많은 도커 이미지가 공유되어 있습니다. 공식(Official) 이미지의 경우에는 따로 표기가 되어있습니다. 그 외에는 사용자들이 직접 만들어서 공유한 도커 이미지 입니다.
Docker Hub에서 직접 검색할 수도 있습니다.
docker pull [OPTIONS] NAME[:TAG|@DIGEST] 명령어를 사용하면 도커 이미지를 다운받을 수 있습니다.
그럼 명령어를 통해서 mysql 이미지를 다운받아봅시다. docker pull mysql 명령어를 입력하여 mysql 도커 이미지를 다운받겠습니다.
- 이미지 이름:태그명 등을 통해서 특정 버전을 받을 수 있습니다.
- 태그명에 latest를 입력하면 가장 최신 버전을 다운 받습니다.
- 이미지 이름에서 슬래시(/) 앞에 사용자 이름을 입력하면 해당 사용자가 올린 이미지를 받습니다.
- 공식 이미지의 경우는 사용자 이름이 없습니다.
$ docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
a5a6f2f73cd8: Pull complete
936836019e67: Pull complete
283fa4c95fb4: Pull complete
1f212fb371f9: Pull complete
e2ae0d063e89: Pull complete
5ed0ae805b65: Pull complete
0283dc49ef4e: Pull complete
a7e1170b4fdb: Pull complete
88918a9e4742: Pull complete
241282fa67c2: Pull complete
b0fecf619210: Pull complete
bebf9f901dcc: Pull complete
Digest: sha256:b7f7479f0a2e7a3f4ce008329572f3497075dc000d8b89bac3134b0fb0288de8
Status: Downloaded newer image for mysql:latest
docker images [OPTIONS] [REPOSITORY[:TAG]] 명령어를 사용하면 다운받은 도커 이미지를 확인할 수 있습니다.
docker images 를 입력하여 다운받은 mysql 도커 이미지가 있는지 확인해봅시다.
이제 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 명령어를 실행하여 다운받은 도커 이미지를 생성 및 실행해보겠습니다.
우선, 간단하게 몇 가지 옵션들을 살펴보겠습니다.
- –name : 컨테이너에 이름을 지정할 수 있습니다.
- -e –env : 컨테이너에 환경 변수를 설정합니다. 비밀번호나 설정 값을 전달할 수 있습니다.
- -d –detach : 백그라운드로 실행하게 됩니다.
- -i –interactive : : 컨테이너와 상호작용을 하겠다는 뜻이고 컨테이너와 표준 입력을 유지합니다.
- 대부분 이 옵션을 사용하여 bash 명령어를 인자로 같이 사용합니다.
- -t –tty : TTY 모드를 사용합니다. Bash를 사용하려면 이 옵션과 같이 사용해야 합니다.
- -p –publish : 호스트에 연결된 컨테이너의 특정 포트를 외부에 노출하게 됩니다.
- 예를 들어 -p 80:80
그럼, 아래의 명령어를 입력하여 컨테이너를 생성 및 실행해 봅시다.
// []는 빼고 입력합니다.
docker run —name [네임입력] -e MYSQL_ROOT_PASSWORD=[패스워드입력] -d mysql:latest
// ex) docker run —name mysql_project -e MYSQL_ROOT_PASSWORD=1234 -d mysql:latest
docker ps 명령어를 입력하여 [name] 이라는 이름을 가진 컨테이너가 실제로 동작하고 있는지 살펴보겠습니다.
컨테이너가 종료되어 위처럼 보이지 않는 경우에는 docker ps -a 명령어를 입력하여 확인할 수 있습니다.
docker exec [OPTIONS] CONTAINER COMMAND [ARG...] 명령어를 실행하면 외부에서 컨테이너에 특정 명령을 줄 수 있습니다.
이 명령어와 bash를 인자로 전달하여 컨테이너에 직접 접속할 수 있습니다.
다음과 같이 명령어를 입력하여 컨테이너의 shell에 접속해봅시다.
docker exec -it [컨테이너name] bash
// ex) docker exec -it mysql_project bash
접속 후에는 mysql을 실행합니다.
mysql -u root -p
//컨테이너 실행시에 -e 파라미터로 입력한 pw 입력
Enter password:
//테스트로 database 목록 출력
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
//mysql실행 종료
mysql> exit
//컨테이너 접속 종료
root@07b264efd0d2:/# exit
docker start [OPTIONS] CONTAINER [CONTAINER...] 명령어를 입력하면 컨테이너를 시작할 수 있습니다. (참고로, 컨테이너의 name이 아닌 ID값을 사용해도 됩니다.)
//도커 이미지가 종료되어있다면, 도커 이미지를 실행
docker start [컨테이너name]
// ex) docker start mysql_project
docker stop [OPTIONS] CONTAINER [CONTAINER...] 명령어를 수행하면 컨테이너를 정지시킬 수 있습니다.
//도커 이미지를 종료
docker stop [컨테이너name]
// ex) docker stop mysql_project
docker rm [OPTIONS] CONTAINER [CONTAINER...] 명령어는 도커 컨테이너를 삭제할 수 있습니다.
docker rm [컨테이너name]
// ex) docker rm mysql_project
docker rmi [OPTIONS] IMAGE [IMAGE...] 명령어는 도커 이미지를 삭제할 수 있습니다.
docker rmi [이미지ID]
// ex) docker rmi b8fd9553f1f0
cat /etc/issue 명령어
docker -v 버전확인
docker create [OPTIONS] [이미지 명] 컨테이너 생성
docker restart [컨테이너name] 컨테이너 재실행
docker rename [기존컨테이너name] [새로운 컨테이너name] 컨테이너name변경