- [docker] docker CLI (컨테이너/볼륨/네트워크)2024년 03월 03일 19시 15분 26초에 업로드 된 글입니다.작성자: @kimyu0218
컨테이너
생성하기: run & create
run
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Create and run a new container from an image
`run`은 이미지로부터 컨테이너를 생성하고 실행하는 명령어다. 로컬에 이미지가 없는 경우, 도커 이미지를 `pull`한 뒤 컨테이너를 생성`create`하고 시작`start`한다.
create
Usage: docker create [OPTIONS] IMAGE [COMMAND] [ARG...] Create a new container
`create`는 이미지로부터 컨테이너를 생성하는 명령어다. `run`과 달리 생성된 컨테이너를 시작하지 않는다.
💡 컨테이너의 기본 사용자는 root이며 호스트 이름은 무작위 16진수 해시값이다.
목록 확인하기: ps
Usage: docker ps [OPTIONS] List containers
`ps`는 실행중인 컨테이너를 출력하는 명령어다. 정지된 컨테이너를 포함한 모든 컨테이너를 출력하기 위해서는 `-a` 옵션을 추가해야 한다.
Options: -a, --all Show all containers (default shows just running)
- CONTAINER ID : 컨테이너 아이디
- IMAGE : 컨테이너를 생성할 때 사용된 이미지
- COMMAND : 컨테이너가 시작될 때 실행될 명령어
- CREATED : 컨테이너가 생성된 후 흐른 시간
- STATUS : 컨테이너의 상태 (Up 실행중 / Exited 종료 / Pause 정지)
- PORTS : 컨테이너가 개방한 포트와 호스트에 연결한 포트들의 배열
- NAMES : 컨테이너의 고유한 이름으로 `--name` 옵션으로 지정하지 않았다면 무작위로 설정된다.
삭제하기: rm
Usage: docker rm [OPTIONS] CONTAINER [CONTAINER...] Remove one or more containers
`rm`은 하나 이상의 컨테이너를 삭제하는 명령어다. 하지만 실행중인 컨테이너는 삭제할 수 없으므로 그 전에 컨테이너를 정지하는 과정이 필요하다.
docker stop [CONTAINER] docker rm [CONTAINER]
실행중인 컨테이너를 종료하는 또 다른 방법은 `-f` 옵션을 이용하는 것이다.
Options: -f, --force Force the removal of a running container (uses SIGKILL)
외부에 노출하기: -p
-p, --publish list Publish a container's port(s) to the host
컨테이너는 가상 IP 주소를 할당받는데, 아무런 설정을 하지 않았다면 도커가 설치된 호스트에서만 접근할 수 있다. 외부에서 컨테이너로 접속하기 위해서는 `-p` 옵션을 이용하여 호스트 포트와 컨테이너 포트를 바인딩 해야 한다.
-p [호스트 포트]:[컨테이너 포트]
💡 도커 컨테이너는 IP 주소로 `172.17.0.x`를 할당받는다.
💡 여러 개의 포트를 외부에 개방하려면 `-p` 옵션을 여러 번 사용하면 된다.
어플리케이션 구축하기
백그라운드로 실행하기: -d
-d, --detach Run container in background and print container ID
`-d`는 컨테이너를 백그라운드로 실행한 후 (detached 모드) 컨테이너 아이디를 출력하는 옵션이다. 즉, 컨테이너를 실행한 후 해당 컨테이너와 상호작용하지 않고 다른 작업을 수행할 수 있다.
환경변수 설정하기: -e
-e, --env list Set environment variables
`-e`는 컨테이너 내부의 환경변수를 설정하는 옵션이다.
다른 컨테이너 접근하기: --link
--link list Add link to another container
`--link`는 다른 컨테이너로 접근할 수 있는 링크를 추가하는 옵션이다. 내부 IP 주소를 알 필요 없이 별명으로 접근할 수 있다.
docker run -d --name db \ -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=web_db \ mysql:8.2.0 docker run -d --name web-server \ -e DB_HOST=mysql -e DB_USER=root -e DB_PASSWORD=passord \ --link db:mysql \ -p 80:80 wordpress
🚨 `--link`에 지정된 컨테이너가 실행 중이지 않거나 존재하지 않는 경우, `--link`를 적용한 컨테이너를 실행할 수 없다.
🚨 deprecated된 옵션이므로 브리지 네트워크를 사용하는 것을 권장한다.
볼륨
설정하기
호스트 볼륨 공유하기 : -v
-v, --volume list Bind mount a volume
`-v`는 볼륨을 공유하는 옵션이다. 이미지는 읽기 전용이기 때문에 컨테이너에 변경사항이 저장되는데, 컨테이너를 삭제하면 모든 변경사항이 날아간다. 이를 방지하기 위해 호스트와 볼륨을 공유하여 컨테이너를 삭제하더라도 호스트에 변경사항을 유지할 수 있다.
# -v [호스트 공유 디렉토리]:[컨테이너 공유 디렉토리] -v /home/db:/var/lib/mysql
💡 호스트에 호스트의 공유 디렉토리를 생성하지 않아도 도커에서 자동으로 생성한다.
🚨 이미지에 원래 존재하던 디렉토리에 호스트 볼륨을 공유하면 컨테이너의 디렉토리가 자동으로 오버라이드 된다.
볼륨 컨테이너 사용하기 : --volumes-from
--volumes-from list Mount volumes from the specified container(s)
`--volumes-from`은 `-v` 옵션을 적용한 컨테이너 (볼륨을 사용하는 컨테이너) 를 통해 볼륨을 공유한다.
도커 볼륨 사용하기 : docker volume
Usage: docker volume COMMAND Manage volumes Commands: create Create a volume inspect Display detailed information on one or more volumes ls List volumes prune Remove unused local volumes rm Remove one or more volumes update Update a volume (cluster volumes only)
`docker volume`을 이용하면 도커 자체에서 제공하는 볼륨 기능을 활용하여 데이터를 보존할 수 있다.
먼저 `create`를 통해 볼륨을 생성한다.
docker volume create --name docker-volume
해당 볼륨을 사용하는 컨테이너를 다음과 같이 생성한다.
docker run -d \ -v docker-volume:/root/ \ # -v [볼륨명]:[컨테이너의 공유 디렉토리] ubuntu:22.04
🚨 도커 볼륨은 도커 엔진에서 관리한다. 도커 볼륨이 실제로 어디에 저장되는지 알고 싶다면 `docker inspect`의 `MountPoint`를 확인하면 된다.
네트워크
설정하기
Usage: docker network COMMAND Manage networks Commands: connect Connect a container to a network create Create a network disconnect Disconnect a container from a network inspect Display detailed information on one or more networks ls List networks prune Remove all unused networks rm Remove one or more networks
# 브리지 네트워크 생성하기 docker network create --driver bridge custom-bridge # 브리지 네트워크 컨테이너에 연결하기 docker network connect custom-bridge my-container # 브리지 네트워크 컨테이너에서 끊어주기 docker network disconnect custom-bridge my-container
💡 도커 컨테이너를 실행할 때 네트워크를 연결하고 싶다면 `--net` 옵션을 활용하면 된다.
다음글이 없습니다.이전글이 없습니다.댓글