docker 시작하기
docker image, container
- image : 필요한 프로그램, 라이브러리, 소스 등을 설치한 뒤에 이를 파일로 만든 것이다.
- container : 이미지가 실행된 상태가 컨테이너(Container) 이다. 운영체제로 본다면 이미지는 일종의 실행파일, 컨테이너는 프로세스와 유사한 개념이다.
- 아래에서 사용되는 명령어는 [] 는 하나의 입력값을, <> 는 여러개의 입력값을 의미한다.
1. docker 상태 확인
-
버전 확인 : docker 의 버전이나 go 언어의 버전, OS, 아키텍처를 확인 할 수 있다.
docker version
-
실행 환경 확인 : docker 실행 환경의 상세 설정 표시(컨테이너 수, docker 버전, 스토리지 드라이버 종류, OS 종류, 아키텍처 등)
docker system info
-
디스크 이용 상황 : 상세 내용을 확인할 때는 —v 옵션을 지정한다.
docker system df
2. docker 이미지 조작
-
이미지 다운로드 : docker image pull [옵션] 이미지명[:태그명]
-
태그명을 생락하면 최신판(latest)을 취득한다.
docker image pull centos:7
-
-a 옵션을 지정하면 모든 태그를 취득 할 수 있다. 또한 -a 옵션을 지정할 때는 docker 이미지명에 태그를 지정할 수 없다.
docker image pull -a centos
- 이미지명에 취득할 url 을 지정할 수도 있다. url 은 프로토콜(https://)을 제외하고 지정한다.
-
-
이미지 목록 표시
docker image ls [옵션] [리포지토리명]
-
지정 할 수 있는 주요 옵션
옵션 설명 -all, -a 모든 이미지를 표시 --digests 다이제스트(이미지를 고유하게 식별하기 위한값)를 표시할지 말지 --no-trunc 결과를 모두 표시 --quiet, -q docker 이미지 ID만 표시
-
-
이미지 상세 정보 확인 : 이미지 ID, 작성일, docker 버전, cpu 아키텍처 등을 JSON 형태로 표시한다.
docker image inspect <이미지명>
-
이미지 commit 히스토리 보기
docker image history <이미지명>
-
이미지 태그 설정 : docker hub 에 등록하기 위해서는 [사용자명/repository명:태그명] 과 같은 명명 규칙을 사용해야 한다.
docker image tag [원본이미지명] [변경할이미지명:태그명]
-
이미지 검색 : docker hub 에 공개되어 있는 이미지를 검색한다.
docker search [옵션] <검색 키워드>
-
지정할 수 있는 주요 옵션
옵션 설명 --no-trunc 결과를 모두 표시 --limit n n건의 검색 결과를 표시 --filter=stars=n 즐겨찾기의 수(n 이상)를 지정
-
-
이미지 삭제
docker image rm [옵션] 이미지명 [이미지명]
-
지정할 수 있는 주요 옵션
옵션 설명 --force, -f 이미지를 강제로 삭제 --no-prune 중간 이미지를 삭제하지 않음
-
-
사용하지 않는 이미지 삭제
docker image prune [옵션]
-
지정할 수 있는 주요 옵션
옵션 설명 --all, -a 사용하지 않는 이미지를 모두 삭제 --force, -f 이미지를 강제로 삭제
-
-
docker hub 에 로그인
docker login [옵션] [서버]
-
지정할 수 있는 주요 옵션
옵션 설명 --password, -p 비밀번호 --username, -u 사용자명
-
-
이미지 업로드 : 업로드 하는 이미지명은 유저명/repository:태그명 이어야 하고, repository 는 docker hub 에서 생성해 주어야 한다. 태그명이 없을 경우 latest 버전으로 업로드 된다.
docker image push 이미지명[:태그명]
3. docker 컨테이너 생성 / 시작 / 정지
-
컨테이너 생성 : 이미지로부터 컨테이너를 생성한다. 이미지의 실체는 ‘docker 에서 서버 기능을 작동 시키기 위해 필요한 디렉토리 및 파일들’ 이다. 구체적으로는 Linux의 작동에 필요한 /etc 나 /bin 등과 같은 디렉토리 및 파일들이다.
docker container create [이미지명]
-
컨테이너 상세 정보 확인
docker container inspect <컨테이너 식별자>
-
컨테이너 생성 및 시작
docker container run [옵션] 이미지명[:태그명] [인수]
-
지정할 수 있는 주요 옵션
옵션 설명 --attach, -a 표준 입출력, 오류 출력 --cidfile 컨테이너 ID를 파일로 출력 --detach, -d 컨테이너를 생성하고 백그라운드에서 실행 --interactive, -i 컨테이너의 표준 입력을 연다. --tty, -t 단말기 디바이스를 사용한다. docker container run -it --name "test1" centos /bin/cal
- docker container run : 컨테이너를 생성 및 실행
- -it : 콘솔에 결과를 출력하는 옵션
- --name “test” : 컨테이너명
- centos : 이미지명(해당 이미지가 없을 경우 pull 받는다.)
- /bin/cal : 컨테이너에서 실행할 명령. /bin/bash를 실행하면 컨테이너 안에서 명령 조작을 할 수 있고 컨테이너를 종료시키려면 exit 명령을 입력하여 쉘을 종료 시킨다.
-
-
컨테이너의 백그라운드 실행
docker container run [실행 옵션] 이미지명[:태그명] [인수]
-
지정할 수 있는 주요 옵션
옵션 설명 --detach, -d 백그라운드에서 실행 --user, -u 사용자명을 지정 --rm 명령 실행 완료 후에 컨테이너를 자동으로 삭제 --restart=<옵션> 명령의 실행 결과에 따라 재시작을 하는 옵션 -
--restart 옵션
설정값 설명 no 재시작하지 않는다. on-failure 종료 스테이터스가 0이 아닐 때 재시작한다. on-failure:횟수n 종료 스테이터스가 0이 아닐 때 n번 재시작한다. always 항상 재시작한다. unless-stopped 최근 컨테이너가 정지 상태가 아니라면 항상 재시작한다.
docker container run -d centos /bin/ping localhost
- docker container run : 컨테이너를 생성 및 실행
- -d : 백그라운드에서 실행하는 옵션
- centos : 이미지명
- /bin/ping localhost : 컨테이너에서 실행할 명령
-
-
-
컨테이너의 네트워크 설정
docker container run [네트워크 옵션] 이미지명[:태그명] [인수]
-
지정할 수 있는 주요 옵션
옵션 설명 --add-host=[호스트명:IP 주소] 컨테이너의 /etc/hosts에 호스트명과 ip주소를 정의 --dns=[IP 주소] 컨테이너용 DNS 서버의 IP 주소 지정 -expose 지정한 범위의 포트 번호를 할당 --mac-address=[MAC 주소] 컨테이너의 MAC 주소를 지정 --net=[bridge |none |container:<name | id> |host|NETWORK] 컨테이너의 네트워크를 지정(default:host) --hostname, -h 컨테이너 자신의 호스트명을 지정 --publish, -p[호스트의 포트 번호]:컨테이너의 포트 번호] 호스트와 컨테이너의 포트 매핑(-p 옵션을 여러개 사용하여 컨테이너의 멀티 포트를 호스트 포트와 매핑 할 수 있다.) --publish-all, -P 호스트의 임의의 포트를 컨테이너에 할당 -
예시
docker container run -d -p 8080:80 nginx
-
-
-
자원을 지정하여 컨테이너 생성 및 실행
docker container run [자원 옵션] 이미지명[:태그명] [인수]
-
지정할 수 있는 주요 옵션
옵션 설명 --cpu-shares, -c CPU 사용 배분(비율) --memory, -m 사용할 메모리를 제한하여 실행(단위는 b, k, m, g 중 하나) --volume=[호스트의 디렉토리]:[컨테이너의 디렉토리], -v 호스트와 컨테이너의 디렉토리를 공유 -
예시
docker container run --cpu-shares=512 --memory=1g centos
docker container run run -v /Users/home/webapp:/usr/share/nginx/html nginx
-
-
-
컨테이너를 생성 및 시작하는 환경을 지정
docker container run [환경설정 옵션] 이미지명[:태그명] [인수]
-
지정할 수 있는 주요 옵션
옵션 설명 --env=[환경변수], -e 환경변수를 설정한다. --env-file=[파일명] 환경변수를 파일로부터 설정한다. --read-only=[true | false 컨테이너의 파일 시스템을 읽기 전용으로 만든다. --workdir=[패스], -w 컨테이너의 작업 디렉토리를 지정한다. ---user=[사용자명], -u 사용자명 또는 UID를 지정한다.
-
-
가동 컨테이너 목록 표시
docker container ls [옵션]
-
지정할 수 있는 주요 옵션
옵션 설명 --all, -a 실행 중/정지 중인 것도 포함하여 모든 컨테이너를 표시 --filter, -f 표시할 컨테이너의 필터링 --format 표시 포맷을 지정 --last, -n 마지막으로 실행된 n건의 컨테이너만 표시 --latest, -l 마지막으로 실행된 컨테이너만 표시 --no-trunc 정보를 생략하지 않고 표시 --quiet, -q 컨테이너 ID만 표시 --size, -s 파일 크기 표시 -
예시
docker container ls -a -f name=test1
docker container ls -a -f exited=0
-
-
-
컨테이너 가동 확인 : 상태 확인 종료는 Ctrl + c
docker container stats [컨테이너 식별자]
-
컨테이너에서 실행 중인 프로세스 확인
docker container top [컨테이너 식별자]
-
실행중인 컨테이너 size 확인
docker ps --size
-
정지하고 있는 컨테이너 시작
docker container start [옵션] <컨테이너 식별자> [컨테이너 식별자]
-
지정할 수 있는 주요 옵션
옵션 설명 --attach, -a 표준 출력, 표준 오류 출력을 연다. --interactive, -i 컨테이너의 표준 입력을 연다.
-
-
컨테이너 정지
docker container stop [옵션] <컨테이너 식별자> [컨테이너 식별자]
-
지정할 수 있는 주요 옵션
옵션 설명 --time, -t 컨테이너의 정지 시간을 지정(default:10초)
-
-
컨테이너 재시작
docker container restart [옵션] <컨테이너 식별자> [컨테이너 식별자]
-
지정할 수 있는 주요 옵션
옵션 설명 --time, -t 컨테이너의 정지 시간을 지정(default:10초)
-
-
컨테이너 삭제
docker container rm [옵션] <컨테이너 식별자> [컨테이너 식별자]
-
지정할 수 있는 주요 옵션
옵션 설명 --force, -f 실행 중인 컨테이너를 강제로 삭제 --volumes, -v 할당한 볼륨을 삭제
-
-
정지 중인 모든 컨테이너 삭제
docker container prune
-
컨테이너 중단/재개
docker container pause/unpause <컨테이너 식별자> [컨테이너 식별자]
-
네트워크 목록 표시 : docker 는 기본값으로 bridge, host, none 이 세 개의 네트워크를 만들고, 컨테이너 시작 시에 네트워크를 지정하지 않을 때는 기본값인 bridge 로 컨테이너가 시작된다.
docker network ls [옵션]
-
지정할 수 있는 주요 옵션
옵션 설명 --filter=[driver | id | lable | name | scope| type], -f 출력 필터 --no-trunc 상세 정보를 출력 --quite, -q 네트워크 ID만 표시
-
-
네트워크 작성
docker network create [옵션] 네트워크 컨테이너명
-
지정할 수 있는 주요 옵션
옵션 설명 --driver=[bridge | overlay], -d 네트워크 브리지 또는 오버레이(default:bridge) --ip-range 컨테이너에 할당하는 IP 주소의 범위를 지정 --subnet 서브넷을 CIDR 형식으로 지정 --ipv6 IPv6 네트워크를 유효화할지 설정(true/false) --lable 네트워크에 설정하는 라벨
-
-
네트워크 연결/연결해제
docker network connect/disconnect [옵션] 네트워크 컨테이너명
-
네트워크 연결 시 지정할 수 있는 주요 옵션
옵션 설명 --ip IPv4주소 --ip6 IPv6주소 --alias 앨리어스명 --link 다른 컨테이너에 대한 링크
-
-
네트워크 상세 정보 확인
docker network inspect [옵션] 네트워크 컨테이너명
-
네트워크 삭제 : 네트워크를 삭제하려면 docker network disconnect 명령을 사용하여 연결 중인 모든 컨테이너와의 연결을 해제해야 한다.
docker network rm [옵션] 네트워크 컨테이너명
4. 가동 중인 docker 컨테이너 조작
-
가동 컨테이너 연결
- -d 옵션으로 백그라운드에서 실행중인 컨테이너에는 attach 할 수 없다.
-
컨테이너에서 분리 : Ctrl + p, Ctrl + q
docker container attach [컨테이너 식별자]
-
가동 컨테이너에서 프로세스 실행 : 실행 중인 컨테이너에서만 실행 가능.
docker container exec [옵션] <컨테이너 식별자> <실행할 명령> [인수]
-
지정할 수 있는 주요 옵션
옵션 설명 --detach, -d 명령을 백그라운드에서 실행 --interactive, -i 컨테이너의 표준 입력을 연다. --tty, -t 단말기 디바이스를 사용한다. --user, -u 사용자명을 지정한다. -
예시
docker container exec -it nginx /bin/echo "Hello world"
-
-
컨테이너 이름 변경
docker container rename [현재이름] [변경할이름]
-
컨테이너 안의 파일을 복사
docker container cp [컨테이너 식별자]:[컨테이너 안의 파일 경로] [호스트의 디렉토리 경로]
docker container cp [호스트의 파일] [컨테이너 식별자]:[컨테이너 안의 파일 경로]
-
컨테이너 조작의 변경 내용 확인 : A-파일 추가, D-파일 삭제, C-파일 수정
docker container diff [컨테이너 식별자]
5. docker 이미지 생성
-
컨테이너로부더 이미지 작성
docker container commit [옵션] <컨테이너 식별자> [이미지명:[태그명]]
-
지정할 수 있는 주요 옵션
옵션 설명 --author, -a 작성자를 지정 --message, -m 메시지를 지정 --change, c commit 시 dockerfile 명령을 지정 --pause, -p 컨테이너를 일시 정지하고 commit
-
-
컨테이너를 tar 파일로 출력
docker container export [컨테이너 식별자] > [출력경로\파일명].tar
-
예시
docker container export nginx > latest.tar
-
-
tar 파일로부터 이미지 작성
docker image import [파일 또는 URL] [이미지명:[태그명]]
-
예시
docker image import d:\test.tar test:1.0
-
-
이미지 저장
docker image save -o [출력경로\파일명].tar [이미지명]
-
이미지 읽어 들이기 : 파일명이 아닌 save 로 저장한 이미지명으로 읽어 들인다.
docker image load -i [입력경로\파일명].tar
-
불필요한 이미지/컨테이너 일괄 삭제
docker system prune [옵션]
-
지정할 수 있는 주요 옵션
옵션 설명 --all, -a 사용하지 않는 리소스를 모두 삭제 --force, -f 강제적으로 삭제
-