티스토리 뷰
오늘 참 험난한 하루였다... 내가 Docker에 올린 프로그램은 scp로 파일을 외부로 전송하는 것이다. 그런데, UnKnownHostException, connection refused, ssh 문제 등 수 많은 다양한 에러들을 확인하고 드디어! 해결했다.
이 글은 내가 접한 모든 에러들은 제쳐두고, 그래서 제대로 사용하는 방법! 을 정리한다.
1.2.를 하기 전 공통사항
- Dockerfile에 Host와 연결할 포트를 설정한다.
아래 캡쳐화면은 22번을 Host 와 연결할 포트로 지정한 것이다.
ex) EXPOSE 22
- Dockerfile을 이용하여, Docker Image를 생성한다.
$docker build --tag [docker image 명(소문자여야 함)]:[Version 번호] [Dockerfile 경로]
ex) $docker build --tag dockerimage:1.0 .
※ docker image 소문자로 안적어서 몇 번 틀렸었음
1. docker run 명령어로 외부 포트 연결
- docker run 을 이용하여, image에 대한 Docker Container 의 create 및 start를 동시에 실행할 수 있다.
$docker run -P [host 포트]:[container 포트] [그 외 옵션] [docker이미지]
ex)$docker run -P 2000:22 --env JAVA_OPTS="-DBOOTSTRAP_SERVER=127.0.0.1:9092 -DTOPIC=topic" dockerimage:1.0
※ --env 는 도커를 통해 실행하는 프로그램에 대한 각종 환경설정을 제공한다. ENV로 설정한 환경 변수는 RUN,CMD,ENTRYPOINT에 적용된다.
2. Docker Engine API 를 이용하여 외부 포트 연결
- docker 에서는 API 또한 제공한다.
https://docs.docker.com/engine/api/v1.41/#operation/ContainerCreate
Docker API 를 이용하여, docker를 실행시키려면 다음과 같은 속성들을 추가해야 한다.
※ Docker API에서는 run 으로 한번에 create 및 start를 할 수 없으므로, Container 생성 후 Container 시작을 진행해야 한다.
아래 속성은 Create Container 할 때, Body에 작성해야 하는 것들이다.
* ExposedPort 설정
* HostConfig의 PortBindings 설정
위 속성 2가지 전부 설정해줘야 한다. (처음에 HostConfig의 PortBindings를 확인하지 못하고 ExposedPort만 했다가 여러번 UnknownHostException을 만났다.)
ex)
{
"Env":[
"JAVA_OPTS=-DBOOTSTRAP_SERVER=172.30.1.2:9092 -DTOPIC=topic"
],
"Image":"dockerimage:1.0",
"ExposedPorts":{
"22/tcp":{
}
},
"HostConfig":{
"PortBindings":{
"22/tcp":[
{
"HostPort":"2000"
}
]
}
}
}
이것저것 문제 다 겪고 막상 해결하면 별 것 아닌 것 같은데, 한 번 문제 터지기 시작하면 끝도 없이 꼬이는지... 후... 정리했으니깐 다음엔 덜 헤매겠지...
※ 자바로 scp를 전송하는 코드가 궁금하다면... 아래 클릭
2022.07.05 - [etc] - [JAVA] JAVA 로 SCP 실행하는 방법 (jSch 라이브러리)
'etc' 카테고리의 다른 글
[mongodb] image, video 저장하기 (0) | 2022.09.27 |
---|---|
[JAVA] JAVA 로 SCP 실행하는 방법 (jSch 라이브러리) (0) | 2022.07.05 |
[Maven] Maven 프로젝트 실행가능한 Jar 파일 만들기 (0) | 2022.07.01 |
[ wireshark ] 와이어샤크(wireshark) 사용법 (0) | 2022.06.10 |
[ java ]날짜 String -> ZonedDateTime 변환 (0) | 2022.05.30 |