이전

docker 기본 명령어

도커 기본 명령어

run - 컨테이너 실행

docker run [OPTIONS[ IMAGE:[:TAG|@DEGEST] [COMMAND] [ARG...]
  1. -d detached mode (백그라운드 모드)
  2. -p 호스트와 컨테이너의 포트를 연결
  3. -v 호스트와 컨테이너의 디렉토리를 연결
  4. -e 컨테이너 내에서 사용할 환경변수 설정
  5. –name 컨테이너 이름 설정
  6. –rm 프로세스 종료시 컨테이너 자동 제거
  7. -it -i 와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션
  8. –network 네트워크 연결

ubuntu 20.04 컨테이너 만들기

docker run ubuntu:20.04

run 명령어를 사용하면 사용할 이미지가 저장되어 있는지 확인하고 없다면 다운로드 (pull) 한 후 컨테이너를 생성(create)하고 시작(start)합니다. 컨테이너는 정상적으로 실행됐지만 뭘 하라고 명령어를 전달하지 않았기 때문에 컨테 이너는 생성되자마자 종료됩니다. 컨테이너는 프로세스이기 때문에 실행중인 프로세 스가 없으면 컨테이너는 종료됩니다.

조금 더 자세하게 설명하면 도커 이미지마다 컨테이너가 만들어질때 실행할 명령어를 지정할 수 있고 ubuntu:20.04는 “/bin/bash”가 지정되어 쉘이 실행되야 하지만, 입 력을 받을 수 있도록 “-it”옵션을 입력하지 않았기 때문에 바로 실행이 종료되었습니 다.


/bin/sh 실행하기

docker run --rm -it ubuntu:20.04 /bin/sh

컨테이너 내부에 들어가기 위해 sh를 실행하고 키보드 입력을 위해 -it 옵션을 줍니다. 추가적으로 프로세스가 종료되면 컨테이너가 자동으로 삭제되도록 –rm 옵션도 추가 합니다.

–rm 옵션이 없다면 컨테이너가 종료되더라도 삭제되지 않고 남아 있어 수동으로 삭제 해야 합니다.


CentOS 실행하기

docker run --rm -it centos:8 /bin/sh

도커는 다양한 리눅스 배포판을 실행할 수 있습니다. 공통점은 모두 동일한 커널을 사 용한다는 점입니다. Ubuntu 또는 CentOS에 포함된 다양한 기본기능이 필요 없는 경우, Alpine 이라는 초 소형 (5MB) 이미지를 사용할 수도 있습니다.


웹 어플리케이션 실행하기

docker run --rm -p 5678:5678 hashicorp/http-echo -text="hello world"

detached mode(백그라운드 모드)로 실행하기 위해 -d 옵션을 추가하고 -p 옵션을 추가하여 컨테이너 포트를 호스트의 포트로 연결하였습니다. 브라우저를 열고 localhost:5678에 접속하면 메시지를 볼 수 있습니다.


Redis 실행하기

docker run --rm -p 1234:6379 redis

Redis 라는 메모리기반 데이터베이스를 실행합니다.

$ telnet localhost 1234 # telnet이 설치되어 있다면..
set hello world
+OK
get hello
$5
world
quit

MySQL 실행하기

docker run -d -p 3306:3306 \
    -e MYSQL_ALLOW_EMPTY_PASSWORD=true \
    --name mysql \
    mysql:5.7

MySQL 데이터베이스를 실행합니다.

docker exec -it mysql mysql # 실행

create database wp CHARACTER SET utf8;
grant all privileges on wp.* to wp@'%' identified by 'wp';
flush privileges;
quit

워드프레스 블로그 실행하기

docker run -d -p 8080:80 \
 -e WORDPRESS_DB_HOST=host.docker.internal \
 -e WORDPRESS_DB_NAME=wp \
 -e WORDPRESS_DB_USER=wp \
 -e WORDPRESS_DB_PASSWORD=wp \
 wordpress

앞에서 만든 MySQL을 실행한 상태에서 생성합니다.


exec 명령어 exec 명령어는 run 명령어와 달리 실행중인 도커 컨테이너에 접속할 때 사용하며 컨테 이너 안에 ssh server등을 설치하지 않고 exec 명령어로 접속합니다.


✏ 도커는 다양한 데이터베이스를 손쉽게 생성/삭제할 수 있기 때문에 개발할때도 많이 사용합니다.


ps

docker ps

실행중인 컨테이너 목록을 확인 하는 명령어 입니다.

docker ps -a

중지된 컨테이너도 확인하려면 -a 옵션을 붙입니다.


stop

docker stop [OPTIONS] CONTAINER [CONTAINER...]

실행중인 컨테이너를 중지하는 명령어 입니다.
실행중인 컨테이너를 하나 또는 여러개 (띄어쓰기) 중지할 수 있습니다.


rm

docker rm [OPTIONS] CONTAINER [CONTAINER...]

종료된 컨테이너를 완전히 제거하는 명령어 입니다.


logs

docker logs [OPTIONS] CONTAINER

컨테이너가 정상적으로 동작하는지 확인하는 좋은 방법은 로그를 확인하는 것입니다.
기본 옵션과 -f, –tail 옵션등이 있습니다.


images

docker images [OPTIONS] [PEPOSITORYP[:TAG]]

도커가 다운로드한 이미지 목록을 보는 명령어 입니다.


pull

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

이미지를 다운로드 하는 명령어 입니다.


rmi

docker rmi [OPTIONS] IMAGE [IMEAGE...]

이미지를 삭제하는 방법 입니다.
컨테이너가 실행중인 이미지는 삭제되지 않습니다.


network creat

docker network create [OPTIONS] NETWORK

도커 컨테이너끼리 이름으로 통신할 수 있는 가상 네트워크를 만듭니다.

docker network create app-network

app-network 라는 이름으로 wordpress와 mysql이 통신할 네트워크를 만듭니다.

network connect

docker network connect [OPTIONS] NETWORK CONTAINER

기존에 생성된 컨테이너에 네트워크를 추가 합니다.

docker network connect app-network mysql

mysql 컨테이너에 네트워크를 추가합니다.

network option

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

워드프레스를 app-network에 속하게 하고 mysql을 이름으로 접근합니다.


volume mount (-v)

docker stop mysql
docker rm mysql
docker run -d -p 3306:3306 \
 -e MYSQL_ALLOW_EMPTY_PASSWORD=true \
 --network=app-network \
 --name mysql \
 -v mysql-data-vol:/var/lib/mysql \ mysql

mysql을 삭제후에 다시 실행하면 데이터베이스 오류가 발생합니다.

-v /my/own/datadir:/var/lib/mysql

볼륨 확인

docker volume list

컨테이너를 실행할 떄 -v {볼륨이름 || 로컬경로}:{컨테이너 안 경로} 또는 --volume={볼륨이름 ||로컬경로}:{컨테이너 안 경로} 옵션을 부여하여 볼륨을 직접 설정 할 수 있다. mysql 볼륨은 /var/lib/mysql 에 마운트 되어야한다.


docker run --name mysql -e MYSQL_ROOT_PASSWORD=1234 -v mysql-volume:/var/lib/mysql -d mysql
docker run -dp 5432:5432 --name postgresql01 -e POSTGRES_PASSWORD=test -v pgdata:/var/lib/postgresql/data postgres
docker exec -it postgres /bin/bash
psql -U postgres
docker run -d -p 6379:6379 --name redis01 redis 
docker exec -it redis-test redis-cli