자주 사용하는 커맨드
# 실행중인 컨테이너에 들어가기
$ docker-compose exec hoge_app bash
# stop
$ docker-compose stop
# docker-compose관리 하의 컨테이너를 삭제하고, 연결된 볼륨도 삭제
$ docker-compose rm -v
# 캐시를 사용하지 않고 빌드
$ docker-compose build --no-cache
# 컨테이너를 일괄 삭제
$ docker rm `docker ps -a -q`
# 모든 볼륨을 삭제
$ docker volume rm $(docker volume ls -qf dangling=true)
# 이미지의 목록
$ docker images -a
# 이미지의 일괄 삭제
$ docker rmi `docker images -aq`
$ docker rmi -f `docker images -aq`
# docker images로 REPOSITORY가 <none> 이 되어있는 것을 삭제(클라이언트와 데몬API 양쪽 모두 1.25이후의 버전)
$ docker image prune
# docker images로 REPOSITORY가 <none> 이 되어있는 것을 삭제(1.25미만의 버전용)
$ docker rmi $(docker images | awk '/^<none>/ { print $3 }')
# 호스트로부터 컨테이너에 파일을 복사
# docker cp <복사할 파일의 경로> <컨테이너 명or ID>:<컨테이너 저장처 경로>
$ docker cp file.rc continername:/host/dir/
# 컨테이너로부터 호스트에 파일을 복사
# docker cp <컨테이너명or ID>:<복사할 파일의 경로> <호스트 저장처 경로>
$ docker cp continer_name:/var/www/html/ /User/meta/hoge
컨테이너의 생성과 실행
$ docker run [옵션] [이미지명:태그명] [인수]
옵션 | 설명 | 예 |
--name | 컨테이너명을 지정 | docker run --name "test" centos |
-d | 백그라운드 실행 | docker run -d centos |
-it | 콘솔에 결과를 출력 | docker run -it --name "test" centos /bin/cal |
-p host:cont | 포트 포워딩 | docker run -d -p 8080:80 httpd |
--add-host | 호스트명과 IP를 지정 | docker run -it --add-host=test.com:192.168.1.1 centos |
--dns | DNS 서버를 지정 | docker run --dns=192.168.1.1 httpd |
--mac-address | MAC 어드레스를 지정 | docker run -it --mac-address="92:d0..." centos |
--cup-shares | CPU 배분(모두 1024) | docker run --cpu-shares=512 centos |
--memory | 메모리의 상한 | docker run --memory=512m centos |
-v | 디렉토리의 공유 | docker run -v /c/Users/src:/var/www/html httpd |
-e | 환경변수를 설정 | docker run -it -e foo=bar centos /bin/bash |
--env-file | 환경변수 리스트로부터 설정 | docker run -it --env-file=env_list centos /bin/bash |
-w | 작업 디렉토리를 지정 | docker run -it -w=/tmp/work centos /bin/bash |
실행중의 컨테이너 조작
설명 | 커맨드 | 예(컨테이너ID=CID) |
컨테이너 목록 | docker ps [옵션] | docker ps |
컨테이너 확인 | docker stats 컨테이너ID | docker stats CID |
컨테이너 실행 | docker start [옵션] 컨테이너ID | docker start CID |
컨테이너 정지 | docker stop [옵션] 컨테이너ID | docker stop CID |
컨테이너 재실행 | docker restart [옵션] 컨테이너ID | docker restart CID |
컨테이너 삭제 | docker rm [옵션] 컨테이너ID | docker rm CID |
컨테이너 중단 | docker pause 컨테이너ID | docker pause CID |
컨테이너 재개 | docker unpause 컨테이너ID | docker unpause CID |
컨테이너 접속 | docker attach 컨테이너ID | docker attach CID |
컨테이너 로그 | docker logs [옵션] 컨테이너ID | docker logs CID |
프로세스 실행 | docker exec [옵션] 컨테이너ID 커맨드[인수] | docker exec -it CID /bin/cal |
프로세스 확인 | docker top 컨테이너ID | docker top CID |
포트 확인 | docker port 컨테이너ID | docker port CID |
컨테이너명 변경 | docker rename 현재의이름 새로운컨테이너명 | docker rename now new |
이미지 차이값(차분) | docker diff 컨테이너ID | docker diff CID |
파일 복사 | docker cp 컨테이너ID:파일경로 | docker cp CID:/var/www/a.txt /Users/ryo/ |
이미지 작성 | docker commit [옵션] 컨테이너ID 이미지명[:태그명] | docker commit CID my_image:1.0 |
이미지를 .tar형식으로 출력 | docker export 컨테이너ID | docker export CID |
.tar로부터 이미지 작성 | docker import 경로orURL - 이미지명[:태그명] | cat src.tar|docker import - web:1.0 |
이미지 저장 | docker save [옵션] 저장파일명[이미지명] | docker save -o src.tar web |
이미지 로드 | docker load [옵션] | docker load -i sec.tar |
- 컨테이너 ID부분은 컨테이너명으로 작성할 수 있다.
- docker ps는 실행중의 컨테이너 목록, docker ps -a는 정지중인 컨테이너를 포함한 컨테이너의 목록이다.
# 오래된 컨테이너 일괄 삭제
docker ps -a | grep 'weeks ago' | awk '{print $1}' | xargs docker rm
# 컨테이너 일괄 삭제
docker rm `docker ps -a -q`
이미지 조작
설명 | 커맨드 | 예(이미지ID=IID) |
pull | docker pull [옵션] 이미지명[:태그] | docker pull centos:7 |
목록 | docker images [옵션] [리포지터리명] | docker images -a |
상세 | docker inspect [옵션] [이미지ID] | docker inspect IID |
검색 | docker search [옵션] [키워드] | docker search nginx |
삭제 | docker rmi [옵션] 이미지명 | docker rmi nginx |
로그 | docker logs [옵션] 이미지명 | docker logs nginx |
태그 변경 | docker tag [이미지ID] [리포지터리명]:[태그] | docker tag IID hello-world:new_tag |
# 이미지의 일괄삭제
docker rmi `docker images -q`
Docker Compose
설명 | 커맨드 | 예 |
컨테이너 생성, 실행 | docker-compose up [옵션] [서비스] | docker-compose up -d |
생성 컨테이너의 수 | docker-compose scale [서비스=수] | docker-compose scale web=10 |
컨테이너의 목록 | docker-compose ps [옵션] | docker-compose ps |
컨테이너 로그 | docker-compose logs [옵션] [서비스] | docker-compose logs |
커맨드 실행 | docker-compose run [옵션] [서비스] [커맨드] | docker-compose run web /bin/cal |
모든 컨테이너를 실행 | docker-compose start [서비스] | docker-compose start |
모든 컨테이너를 재실행 | docker-compose restart [옵션] [서비스] | docker-compose restart |
모든 컨테이너를 강제 정지 | docker-compose kill [옵션] [서비스] | docker-compose kill |
모든 컨테이너를 삭제 | docker-compose rm [옵션] [서비스] | docker-compose rm |
모든 컨테이너를 빌드 | docker-compose build [옵션] | docker-compose build --no-cache |
DockerFile
설명 | 커맨드 | 예 |
원본이되는 이미지 | FROM | FROM name/web:ver1.0 |
작성자 | MAINTAINER | MAINTAINER name |
환경변수 | ENV | ENV KEY=VALUE |
지정 커맨드의 실행 | RUN | RUN yum -y install httpd |
이미지에 파일을 추가 | ADD | ADD index.html /var/www/html/index.html |
포트 번호를 지정 | EXPOSE | EXPOSE 3306 |
컨테이너 실행시에 실행할 커맨드 | CMD | CMD ["service","httpd","start"] |
현재 디렉토리를 지정 | WORKDIR | WORKDIR /var/www/html |
볼륨 지정 | VOLUME | VOLUME /var/log/httpd |
- DockerFile은 명령 옵션 형식의 행을 나열한 구성으로 되어 있다.
- #은 코멘트
- Dockerfile은 build 서브 커맨드로 빌드시에 이용된다.
- Docker 빌드는 커맨드 단위를 스텝으로써 실행한다
- 각 스텝은 컨테이너의 스냅샷을 캐시한다.
- Dockerfile을 부분 변경한 경우는 그 차이만큼 실행된다.
Docker Hub
설명 | 커맨드 | 예 |
로그인 | docker login [옵션] [서버] | docker login -u "name" -p "pass" |
로그아웃 | docker logout[서버명] | docker logout |
업로드 | docker push 유저명/이미지명[:태그명] | docker push user/my_image:v1.0 |
# Dockerhub에 로그인
docker login -u "name" -p "pass"
# 현재 디렉토리의 Dockerfile부터 이미지를 작성
# docker build -t 유저명/이미지명:태그명 .
docker build -t wmetaw/mylinux:1.0 .
# Dockerhub에 push
docker push wmetaw/mylinux:1.0
Docker 자체의 정보
설명 | 커맨드 |
버전 확인 | docker version |
실행 환경 확인 | docker info |
Docker 컴포넌트
Docker은 코어 기능을 제공하는 "Docker Engine"을 중심으로 "이미지의 작성 > 공개 > 컨테이너 실행"을 하기 위한 컴포넌트(부품)이 제공되어 있다. 주요 컴포넌트는 다음과 같다.
Docker Engine(Docker 코어 기능)
Docker 이미지의 생성이나 컨테이너의 궤도등을 실행하기 위한 코어 기능
Docker 커맨드의 실행이나 DockerFile에 의한 이미지의 생성을 한다.
Docker Machine(Docker 실행 환경 구축)
VirtualBox를 시작으로, AWS나 AZURE등의 클라우드 환경등에 Docker의 실행 환경을 커맨드로 자동 생성하는 툴
Docker Compose(여러 개의 컨테이너의 일원 관리)
여러 개의 컨테이너의 구성 정보를 코드로 정의하여, 커맨드를 실행할 때마다 어플리케이션의 실행 환경을 구성하는 컨테이너군을 일원 관리하기 위한 툴
Docker Swarm(클러스터 관리)
Docker Swarm은 여러 개의 호스트를 클러스터화하기 위한 툴
클러스터의 관리나 API 제공을 하는 역할이 "Manager", Docker 컨테이너를 실행하는 역할은 "Node"라고 말한다.
Docker Kitematic(Docker의 GUI 툴)
Docker 이미지의 생성이나 컨테이너의 실행 등을 하기 위한 GUI툴
그래픽 UI이므로 엔지니어가 아닌 사람에게 최적
Docker Registry(이미지 공개, 공유)
컨테이너의 원본이되는 이미지를 공개, 공유하기 위한 레지스트리 기능
Docker 공식의 레지스트리 서비스인 Docker Hub도 이 기능을 사용하고 있다.
Docker Hub(Docker 공식의 레지스트리)
CentOS, nginx등의 공식 이미지는 이 레포지스티로부터 얻는다.
public등의 많은 유저에 의해 제작된 이미지가 공개되어 있다.
참고자료
'IT > 기초 지식' 카테고리의 다른 글
[Docker/Singularity] Docker, Singularity의 차이 (0) | 2021.10.12 |
---|---|
[Docker] Docker 컨테이너에 네트워크 액세스하기(docker run -p 옵션) (0) | 2021.10.12 |
[Docker] Docker 컨테이너 실행 후, jupyter의 token 확인하는 방법 (0) | 2021.09.16 |
[Docker] docker-compose.yml 작성법 (항목 설명) (0) | 2021.09.15 |
[Docker] docker compose 사용법 (0) | 2021.09.14 |