greendreamtrre.tistory.com/434?category=891838 : 도커 자바 서버 구성하기 과제 정리

 

1. 도커 설치

sudo apt update

sudo apt install curl

curl -s https://get.docker.com | sudo sh

docker -v

또는

sudo apt update

sudo apt install docker.io

sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker

2020/06/30 - [개발자/OS(Linux, Docker, VM...)] - Docker (도커) 자바 서버 구성하기

 

docker-compose로 설치할 경우

sudo apt update

sudo apt install curl

sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

docker-compose -v

 

 

2. 도커 그룹에 사용자 계정 추가하기

sudo usermod -aG docker $USER    ## 현재 접속 중인 사용자를 도커 그룹에 넣기

sudo su - $USER   ## 적용을 위해 현재 사용자 재로그인 하기

만약 해당 계정에 sudo 권한이 없다면
addgroup 계정명 sudo
으로 sudo 그룹에 넣어준다.

현재 접속 중인 사용자가 아닌 다른 계정을 도커 그룹에 넣어주고 싶다면

sudo usermod -aG docker [유저이름]

을 하면 된다.

 

3. 도커 이미지 명령어

docker images : 로컬에 보유한 이미지 목록 보기
docker search [이미지이름] : 이미지 검색하기
docker pull [이미지이름][:태그] : 도커허브에서 이미지 내려받기
docker rmi [이미지이름] : 이미지 삭제하기 (해당 이미지를 사용하는 컨테이너가 있다면 삭제가 되지 않는다.)
docker rmi -f [이미지이름] : 이미지 강제 삭제하기 (해당 이미지를 사용하는 컨테이너도 함께 삭제한다.)

 

4. 도커 컨테이너 명령어

Create
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

Start <-> Stop
docker start [OPTIONS] CONTAINER [CONTAINER...]

Attach
docker attach [OPTIONS] CONTAINER

 

Run : docker run = docker create + docker start + docker attach

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

@DIGEST는 특정 이미지의 고유 해시값으로
docker run ubuntu:14.04 이렇게 태그 대신 고유의 해시값을 이용할 수 있다.
docker run ubuntu@sha256:9cacb71397b640eca97488cf08582ae4e4068513101088e9f96c9814bfda95e0
이런식으로 사용할 수 있다.

옵션  
-d detached mode : 백그라운드 모드로 실행
-p [서버 포트]:[컨테이너 포트] port forwarding
-v=[서버 디렉토리]:[컨테이너 디렉토리] volume mount : (docker volume create [볼륨이름] 으로 생성한 경우 [서버 디렉토리]에 [볼륨이름]만 넣으면 된다. 물론, 내가 원하는 서버 내 디렉토리로 설정하는 것도 가능하다.)
-e environment : 환경변수
-env -e 옵션처럼 line by line이 아니라 여러 환경변수 일괄 적용
-it -i : interactive(사용자 입출력), -t : tty -> 컨테이너에서 터미널을 사용하기 위해 넣는 옵션
--name 컨테이너 이름 설정
--link="" 컨테이너 연결 : Add link to another container (<name or id>:alias or <name or id>)
--rm 컨테이너 종료시 자동 삭제

참고 : docs.docker.com/engine/reference/run/

 

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
ex ) docker run -d -it --name greendreamtree -p 8080:80 ubuntu:latest /bin/bash

 

docker volume create [볼륨이름] : /var/lib/docker/volumes 디렉토리 안에 [볼륨이름]으로 디렉토리를 생성한다. (이렇게 생성하지 않고 내가 원하는 디렉토리 경로를 마운트 시켜도 된다.)

(참고 CentOS 7에서는 SELinux 때문에 도커가 도커 기본 볼륨 디렉토리에 접근이 불가능하다는 것 같다.)

 

 

docker ps : start 상태의 도커 컨테이너 보기
docker ps -a : 모든 상태의 도커 컨테이너 보기

docker top [컨테이너이름] : 실행중인 [컨테이너이름] 도커의 프로세스 보기

docker exec : 이미 실행중인 컨테이너에 명령을 실행
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

docker exec -d greendreamtree touch /tmp/execWorks
: 이미 실행중인 greendreamtree라는 이름을 가진 컨테이너에 touch 명령을 수행한다. /tmp/execWorks에 빈 파일 생성하는...

이미 실행중인 도커에 bash 쉘로 접속하기

$ docker exec -it <container> /bin/bash

# Use this if bash is part of your PATH

$ docker exec -it <container> bash

 

 

도커 컨테이너 내부 쉘에서 나가기

1 ) 컨테이너 종료시키지 않고 나오기
Ctrl + P, Q     이후 다시 컨테이너로 들어가려면 docekr attach [컨테이너이름]

2 ) 컨테이너 종료시키고 나오기
Ctrl + D
터미널에 'exit'입력

 

컨테이너, 이미지 관리 명령어

docker container logs -t [컨테이너이름] : 백그라운드로 실행중인 컨테이너 로그 보기

docer container rename [기존컨테이너이름] [새컨테이너이름] : 컨테이너 이름 변경

 

docker container rm -v [컨테이너이름] : 컨테이너에 할당한 볼륨 삭제

docker rmi가 이미지 삭제이기 때문에 
docker container rm [컨테이너이름] : 컨테이너 삭제
docker container rm -f [컨테이너이름] : 실행중인 컨테이너 강제 삭제
docker container prune : stop 상태의 도커 컨테이너를 모두 삭제

 

위에 rmi 명령어를 더 많이 쓸 것 같다.
docker image rm
[이미지이름]
: 이미지 삭제
docker image rm -f [이미지이름] : 이미지 강제 삭제
docker image prune  : unused 상태의 도커 이미지를 모두 삭제
docker image prune -a : 버전이 다른 동일 이미지 여러개가 있을 경우 가장 마지막 버전을 남기고 모두 삭제

 

image docker rmi [이미지이름]
= docker image rm [이미지이름]
이미지 삭제
docker rmi f [이미지이름]
= docker image rm -f [이미지이름]
이미지 강제 삭제
docker image prune unused 상태의 이미지 모두 삭제
docker image prune -a latest version만 남기고 모두 삭제
docker image prune -f ! 와 같다. 묻지만 않고 기능은 동일.
container docker rm [컨테이너이름]
=docker container rm [컨테이너이름]
컨테이너 삭제
docker rm -f [컨테이너이름]
=docker container rm -f [컨테이너이름]
컨테이너 강제 삭제
docker rm -l [컨테이너이름]
=docker container rm -l [컨테이너이름]
컨테이너 링크 삭제
docker rm -v [컨테이너이름]
=docker container rm -v [컨테이너이름]
컨테이너 볼륨 삭제
docker container prune stop 상태의 컨테이너 모두 삭제
docker container prune -f ! 와 같다. 묻지만 않고 기능은 동일.

마찬가지로, 'docker volume prune'을 하게 되면 도커 컨테이너에서 사용하지 않는 모든 볼륨을 삭제하고, 'docker network prune'을 하게 되면 사용하지 않는 모든 네트워크를 삭제한다. 마법의 명령어 prune

 

5. 도커허브

docker commit [컨테이너이름] [이미지이름][:태그] : 컨테이너 -> 이미지 (태그는 버전을 붙이면 된다)

docker tag [SOURCE_IMAGE][:TAG] [TARGET_IMAGE][:TAG] : 이미지에 태그 달기 (깃의 브랜치 정도로 볼 수 있다)
                       (TARGET_IMAGE 이름과 [:TAG] 버전명은 원본과 아무런 연관이 필요 없다. 식별하기 좋게만 만들면 된다.)

cf.

더보기
docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
myubuntu            1.0.0               64a7aa9f814b        About an hour ago   1.13GB
test                2.0.0               64a7aa9f814b        About an hour ago   1.13GB
ubuntu              20.04               74435f89ab78        2 weeks ago         73.9MB

## ubuntu:20.04는 도커 허브에서 pull 해서 받은 최초의 이미지다. (docker pull ubuntu:20.04)
## ubuntu:20.04를 ub라는 컨테이너로 만들어 여러 앱을 설치했고, (docker run -d -it --name ub ubuntu:20.04 /bin/bash)
## ub라는 컨테이너를 myubuntu:1.0.0 이라는 이미지로 commit을 해서 생성했다. (docker commit ub myubuntu:1.0.0)
## myubuntu:1.0.0 이라는 이미지를 test:2.0.0 이라는 이미지로 태그를 달아줬다. (docker tag myubuntu:1.0.0 test:2.0.0)
## IMAGE ID를 보면 myubuntu:1.0.0은 이미지를 새로 생성해서 IMAGE ID가 부여되었다는 것을 알 수 있다.
## test:2.0.0은 태그를 달아준 것이기 때문에 myubuntu:1.0.0과 IMAGE ID가 같다는 것을 알 수 있다.
## 이런식으로 태그를 여러개 따면 이미지를 여러개 만들지 않고도 브랜치 따듯 관리를 할 수 있다.

 

아래는 도커허브를 사용하기 위해 로그인이 필요한 명령어다

docker login <-> docker logout

docker push [이미지이름][:태그] : 이미지를 도커허브에 업로드 

단, 도커허브에 이미지를 push 할 때는 이미지 이름에 규칙이 따른다.

[도커허브ID]/[이미지이름][:TAG]
 형식으로 이미지를 만들어야한다.

이것은 컨테이너에서 이미지로 commit할 때 이렇게 만들어도 되고, 이미지에 새 태그를 달 때 만들어도 된다. 다만 이미지를 만든 다음 도커허브에 올릴 이미지를 하나 더 태그하는 방식으로 브랜치처럼 관리하는 것이 권장된다.
( 주의 : [이미지이름][:TAG] 으로 만들고 push할 때 앞에 '[도커허브ID]/'를 붙여도 될 것 같지만 '[도커허브ID]/[이미지이름][:TAG]' 전체를 하나의 문자열로 인식해 해당하는 이미지가 없다고 에러가 발생한다.)

 

 

docker save : 하나 또는 그 이상의 이미지를 tar archive로 저장한다.

docs.docker.com/engine/reference/commandline/save/

 

docker load : tar archive로부터 하나의 이미지를 불러온다.

docs.docker.com/engine/reference/commandline/load/

 

docker cp : 호스트와 도커 컨테이너간 파일/폴더를 복사한다. (맥에서 Parallels에 설치된 VM 내에 파일/폴더를 보내고 받고 하는 것을 생각하면 된다.)

docs.docker.com/engine/reference/commandline/cp/

 

 

+ Recent posts