$ docker run [OPTIONS] IMAGE[:TAG | @DIGEST] [COMMAND] [ARG...]
옵션 | 설명 |
-d | detached mode 흔히 말하는 백그라운드 모드 |
-p | 호스트와 컨테이너의 포트를 연결(포워딩) |
-v | 호스트와 컨테이너의 디렉토리를 연결(마운트) |
-e | 컨테이너 내에서 사용할 환경변수 설정 |
--name | 컨테이너 이름 설정 |
--rm | 프로세스 종료시 컨테이너 자동 제거 |
-it | -i과 -t를 동시에 사용한것으로 터미널 입력을 위한 옵션 |
--link | 컨테이너 연결 [컨테이너 별칭] |
정상적으로는 docker create 와 start를 사용하지만 run 명령어는 현재 그 이미지가 없으면 다운 까지 받아 동시에 실행까지 시켜줍니다.
run 명령어 뒤에 [OPTIONS] 에 위와 같은 옵션들을 사용할 수 있습니다.
그리고 이미지를 실행 및 다운 할때 사용하고자하는 이미지의 버전을 입력하게 되어 있는데 IMAGE:[TAG] 여기서 TAG를 붙이지 않으면 자동으로 latest 가 붙게 되면서 가장 최신 버전이 다운받아집니다.
-d 옵션은 백그라운드로 실행하게 됩니다. 이 옵션을 안 붙이게 되면 포그라운드로 실행되게 되며 창을 닫으면 종료가 됩니다.
-p 옵션은 포트를 연결시켜주는 역할을 합니다. 여기서 호스트는 현재 내 PC를 말하며 우리가 실행하고자하는 컨테이너와 연결하고자 할때 어떤 포트로 사용할것인지 지정하는것입니다.
-v 옵션은 호스트와 컨테이너의 디렉토리를 공유하고자 할때 사용합니다. 이것은 볼륨의 약자 v를 사용하고 마운트, 볼륨마운트라고 합니다.
-e 옵션은 environment 의 약자로 환경변수를 설정할 수 있습니다.
--name 옵션은 이름을 할당하지 않으면 랜덤으로 이름이 생성됩니다. 따라서 수십개의 컨테이너가 만들어진다고하면 관리하기 어려워 집니다. 그래서 직접 내가 정의한 이름으로 기억하고 있는것이 관리하는데 편리합니다.
-rm 옵션은 remove 라고해서 컨테이너가 종료가 되면 컨테이너가 스탑됩니다. 이러면 docker start 라는 명령어로 다시 실행시킬 수 있습니다. 이 옵션은 컨테이너가 스탑될때 해당 컨테이너를 자동 제거 되게 합니다.
-it 옵션은 컨테이너가 한번 실행된 다음에 우리가 부가적으로 컨테이너에 어떤 명령어를 전달하기 위해서 사용하는 명령어입니다.
-i: 사용자가 입출력 할 수 있는 상태
-t: 가상 터미널 환경을 에뮬레이션 하겠다.
그러면 현재 PC에 ubuntu 이미지를 다운 받아보겠습니다.
docker images | grep ubuntu
위와 같이 터미널에 명령어를 입력하면 ubuntu 가 다운되어있는지 확인 가능합니다.
docker pull ubuntu:16.04
위의 명령어를 입력하면 우분부를 다운 받게 됩니다.
docker run ubuntu:16.04
위의 명령어를 치면 우분투 이미지가 실행은 되지만 바로 종료 됩니다.
그 이유는 실행한 우분투 이미지는 프로세스를 지속적으로 진행할만한 어떠한 코드도 만들어지지 않습니다. 그렇기 때문에 프로세스가 실행되었다가 바로 종료가 됩니다. 이렇게 컨테이너에서는 도커파일에서 컨테이너가 지속적으로 운영할 수 있는 커맨드가 포함되어 있어야 합니다. 위의 명령어에서는 그런 명령어가 포함되어 있지 않기 때문에 바로 종료가 되는것입니다.
그래서 우분투 이미지는 이 자체로 사용된다기 보다는 베이스 이미지가 되어서 추가적인 어플리케이션과 서비스 같은것들을 만들때 사용되게 됩니다.
docker container ls , docker ps
현재 실행중인 컨테이너를 보여줍니다.
docker container ls -a, docker ps -a
실행, 종료된 모든 컨테이너들을 보여줍니다.
docker container rm {containerID}
컨테이너를 삭제할 수 있습니다.
Docker Hub Container Image Library | App Containerization
Deliver your business through Docker Hub Package and publish apps and plugins as containers in Docker Hub for easy download and deployment by millions of Docker users worldwide....
hub.docker.com
이제 도커 허브에 이미지를 올려보도록 하겠습니다.
현재 스프링 부트 어플리케이션을 이미지를 만들고 도커허브 레포지토리에 올린뒤 이미지만 다운 받으면 어플리케이션을 실행 할 수 있도록 해보겠습니다.
Dockerfile
FROM openjdk:17-ea-11-jdk-slim
VOLUME /temp
COPY target/user-service-1.0.jar UserService.jar
ENTRYPOINT ["java","-jar","UserService.jar"]
위와 같이 루트 경로에 Dokerfile을 만들어 줍니다.
그리고 pom.xml 에 기본적으로 다음과같이 버전이 적용되어있을것입니다.
<version>0.0.1-SNAPSHOT</version>
이것을 다음과 같이 변경해줍니다.
<version>1.0</version>
그러면 패키징을 했을때 jar의 이름이 user-service-1.0.jar로 만들어지게됩니다.
이제 패키징을 다음 명령어로 합니다.
mvn clean compile package -DskipTests=true
-DskipTests=true 옵션은 테스트코드가 통과되지 않았을때 빌드가 되지 않기 때문에 옵션에서 테스트를 스킵해주는 옵션입니다.
그리고 터미널에서 현재 어플리케이션 루트 경로로 이동한뒤 다음과 같이 명령어를 입력합니다.
docker build --tag jisu3268/user-service:1.0 .
그러면 repository가 jisu3268/user-service , tag가 1.0으로 이미지가 생성됩니다.
이제 위의 도커허브에 올려봅시다.
docker push jisu3268/user-service:1.0
위의 명령어을 입력하면 됩니다.

그러면 내 레포지토리에 올라가는것을 확인할 수 있습니다.
docker rmi 5b87d8bd5418
도커 이미지를 위의 명령어로 삭제한 뒤
docker pull jisu3268/user-service:1.0
원격 레포지토리에서 다운받으면 똑같은 이미지를 사용할 수 있습니다.
'docker' 카테고리의 다른 글
[docker] Volume (3) | 2023.10.23 |
---|---|
[Docker] Docker 로그인 방법 (0) | 2023.10.21 |
[Docker] Docker MySQL사용하기 (0) | 2022.10.09 |
[doker] 도커 빌드 및 도커 컨테이너 실행 (0) | 2022.07.22 |
[docker] window10 도커 설치 (0) | 2022.07.21 |
댓글