본 게시물은 스스로의 공부를 위한 글입니다.
틀린 내용이 있을 수 있습니다.
curl -s https://get.docker.com/ | sudo sh //리눅스 배포판에 따라 자동으로 최신버전 도커 설치
sudo usermod -aG docker ubuntu //ubuntu 유저 권한 추가
docker version
우리가 스마트폰에서 app store
에서 program
을 다운로드 후 process
를 실행하는 것처럼, 도커는 docker hub
에서 image
을 다운로드 받아 container
로 실행한다.
이때 docker hub
에서 image
를 다운로드 하는것을 pull
이라 하고, image
를 contatiner
로 실행하는 것을 run
이라 한다.
run 명령어를 사용하면 사용할 이미지가 저장되어 있는지 확인하고 없다면 다운로드(pull) 한 후 컨테이너를 생성(create)하고 시작(start)한다.
도커 컨테이너 실행
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
-d
: detached mode (백그라운드 모드)-p [hostPort]:[ContainerPort]
: 호스트와 컨테이너의 포트를 연결-v
: 호스트와 컨테이너의 디렉토리를 연결-e
컨테이너 내에서 사용할 환경변수 설정--name
컨테이너 이름 설정--rm
프로세스 종료시 컨테이너 자동 제거-it
-i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션--network
네트워크 연결예제를 통해 설치와 실행 방법에 대해 알아보자
docker pull httpd
을 볼 수 있다.docker pull httpd
입력 -> 이미지가 다운로드 된다.docker images
를 통해 현재 도커에 설치되어 있는 이미지들 확인TAG
= 이미지 버전, IMAGE ID
= 이미지 식별자docker run httpd
를 통해 container로 실행docker run --name [컨테이너이름] httpd
를 통해 컨테이너에 이름 붙여주기 가능docker ps
를 통해 현재 실행중인 container 확인CONTAINER ID
또는 NAMES
를 확인해두자docker stop [CONTAINER ID]
또는 docker stop [NAMES]
를 통해 실행 중인 컨테이너 중지docker ps -a
를 통해 중지된 컨테이너도 모두 확인 가능하다. docker start [NAMES]
를 통해 가능docker logs -f [names]
docker rm [names]
입력docker stop
을 통해 중지시킨 후 삭제해야 한다.docker rm --force [names]
를 통해 가능docker rmi [REPOSITORY]
를 통해 가능docker run ubuntu:20.04
docker run --rm -it ubuntu:20.04 /bin/sh //우분투 설치 및 bash 실행
docker run --rm -it centos:8 /bin/sh //centOs 설치 및 셸 실행
컨테이너 내부에 들어가기 위해 sh를 실행하고, 키보드 입력을 위해 -it
옵션을 줬다.
--rm
옵션이 없다면 컨테이너가 종료되더라도 삭제되지 않고 남아 있어 수동으로 삭제해야 한다.
exit
를 하면 종료된다.
docker run --rm -p 5678:5678 hashicorp/http-echo -text="hello world"
-text
뒤 문자열을 그대로 출력해줌-p 5678:5678 ~
내 pc의 5678포트가 컨테이너의 5678포트로 연결localhost:5678
에 접속하면 메시지를 볼 수 있다.docker run -d -p 3306:3306 \
-e MYSQL_ALLOW_EMPTY_PASSWORD=true \
--name mysql \
mysql:5.7
-d
: 백그라운드로 실행을 해서 로그가 안보임-e MYSQL_ALLOW_EMPTY_PASSWORD=true
: 비밀번호 입력을 안하겠다. --name mysql
: 이름 설정exec
: 현재 구동 중인 컨테이너에 접속(백그라운드 실행 컨테이너 내부 접속)docker exec -it mysql mysql
docker ps
: 현재 실행중인 컨테이너 확인docker ps -a
: 중지된 컨테이너도 확인하려면 -a옵션docker stop [options] container [container...]
--name
으로 지정된 이름을 입력한다.docker rm [options] container [container..]
종료된 컨테이너를 완전히 제거docker logs [options] container [container]
컨테이너가 정상적으로 동작하는지 확인하는 좋은 방법은 로그를 확인하는 것이다.-f
계속 대기하면서 새로 생기는 로그들도 보여준다. Ctrl + P, Q
컨테이너 정지하지 않고 빠져나오기docker rename [변경전컨테이너이름] [변경후컨테이너이름]
컨테이너 이름 변경docker images [options] [repository[:tag]]
도커가 다운로드한 이미지 목록을 보여줌
docker pull [options] name[:tag|@digest]
이미지를 다운로드
docker run ~
했을 때, 이미지 파일이 없다면 자동으로 pull한다.docker rmi [options] image [image...]
이미지id를 입력하면 이미지삭제가 된다. 단, 컨테이너가 실행중인 이미지는 삭제되지 않는다.
docker network create [options] networkName
도커 컨테이너끼리 이름으로 통신할 수 있는 가상 네트워크를 만든다.
docker network connect [options] networkName container
기존에 생성된 컨테이너에 네트워크를 추가한다.
예제 - mysql과 wordpress를 한 네트워크에 묶기
docker network create app-network //네트워크를 만들고
docker network connect app-network mysql //--name mysql로 만든 컨테이너를 네트워크에 속하게하기
//워드프레스를 네트워크에 속하게 하고 mysql을 이름으로 접근한다.
docker run -d -p 8080:80 \
--network=app-network \
-e WORDPRESS_DB_HOST=mysql \
-e WORDPRESS_DB_NAME=wp \
-e WORDPRESS_DB_USER=wp \
-e WORDPRESS_DB_PASSWORD=wp \
wordpress
-v 호스트경로:컨테이너내부경로
호스트와 컨테이너 디렉터리를 연결해준다.
즉, 앱 데이터를 유지할 수 있는 옵션
컨테이너를 rm
으로 지우면 데이터도 함께 삭제된다.
하지만 run
할때 -v
옵션을 주면 삭제 후 다시 설치해도 그 폴더로 다시 연결되기 때문에 데이터를 복구할 수 있다.
도커툴박스는 가상머신을 이용하기 때문에 로컬경로에는 보이지 않는다. 경로를 만든 경우 가상머신에 생성이 된다.
docker run -d -p 3306:3306 \
-e MYSQL_ALLOW_EMPTY_PASSWORD=true \
--network=app-network \
--name mysql \
-v /my/own/datadir:/var/lib/mysql \
mysql:5.7