일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- function
- list
- ReactNative
- AWS
- enum
- docker-compose
- union
- 생명주기
- Swift
- Generic
- MINUS
- CLASS
- elementAt
- Service
- class component
- animation
- recyclerview
- mongoose
- react native
- map
- lifecycle
- vuex
- collection
- ConstraintLayout
- Foreign Key
- Filter
- docker
- Interface
- LiveData
- Kotlin
- Today
- Total
개발 일기
Docker - (1) 본문
도커를 사용하기 위해서는 일단 간단한 웹서버를 도커 컨테이너에서 실행을 해보겠습니다.
다음과 같이 go lang으로 작성된 웹서버를 작성하였습니다.
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
log.Println("receive request")
fmt.Fprintf(w , "Hello World")
})
log.Println("start server")
log.Fatal(http.ListenAndServe(":8080" , nil))
}
그런 다음 해당 파일을 도커 이미지를 만들기 위해 다음과 같이 Dockerfile을 작성합니다.
FROM golang:1.9
RUN mkdir /gunwook
COPY main.go /gunwook
CMD ["go" , "run", "/gunwook/main.go"]
FROM
이미지를 빌드 할때 베이스 이미지를 미리 지정합니다.
여기서 받아오는 도커 이미지는 도커 허브라는 레지스트리에 공개 된 것 입니다.
RUN
도커 이미지를 실행할 때 실행할 명령을 적습니다. 여기서는 gunwook 이라는 폴더를 만드는데 사용하였습니다.
( 이미지를 빌드 할 때 )
COPY
도커가 동작 중인 호스트 머신의 파일이나 디렉터리를 도커 컨테이너 안으로 복사합니다.
CMD
도커 컨테이너를 실행할 때 컨테이너 안에서 실행할 프로세스를 지정합니다.
인자 표기 방식 |
동작 |
CMD ["실행 파일" , "인자1" , "인자2"] |
실행 파일에 인자를 전달합니다. |
CMD 명령 인자1 인자2 |
명령과 인자를 지정합니다. 셸에 정의된 변수를 참조 가능 |
CMD ["인자1" , "인자2"] |
ENTRYPOINT에 지정된 명령에 사용할 인자를 전달합니다. |
( 컨테이너를 실행 할 때 )
ENTRYPOINT
도커 컨테이너를 실행을 시킬때 기본 프로세스를 지정할수 있습니다.
예를 들어 CMD같은 경우에는 도커를 실행을 시킬 때 인자를 주게 되면 사라지지만 ENTRYPOINT을 주면 뒤에 인자 값을 넣어도 사라지지 않습니다.
( 컨테이너를 실행 할 때 )
LABEL
이미지를 만든 사람의 이름등을 적을 수 있습니다.
ENV
도커 컨테이너 안에서 사용할 수 있는 환경 변수를 지정합니다.
ARG
이미지를 빌드 할때 관련된 정보를 함께 넣을 수 있습니다. ( 이미지를 빌드 할때만 사용 할수 있습니다. )
이제 다음과 같이 도커 이미지를 생성합니다.
docker image build -t 이미지명[:태그명] Dockerfile의 경로
// namespace는 이미지명의 충돌을 피하기 위해서 이렇게 네임 스페이스를 붙일 수 있습니다.
// docker image build -t gunwook/namespace:latest .
이제 성공을 했다면 다음과 같이 입력합니다.
docker image ls
생성된 이미지의 REPOSITORY , TAG , IMAGE ID , CREATED , SIZE 을 알수가 있습니다.
이제 다음과 같이 실행을 시킬수 있습니다.
실행을 시킬 때에는 두가지 방법이 있습니다.
- docker container run -d -p 9000:8080 gunwook:latest (일반형)
- docker run -d -p 9000:8080 gunwook:latest (축약형)
기본적으로는 포어그라운드에서 동작을 하지만 백그라운드로 컨테이너를 등록하고 싶을 때에는 -d를 사용하여 컨테이너를 실행시킬수 있습니다.
애플리케이션에서 8080포트를 리스닝 하고 있지만 이 포트는 컨테이너 포트입니다. 그래서 접근을 했을 때 올바른 응답을 받을수가 없습니다. 따라서 외부에서 온 요청을 컨테이너안에 전달해주는 포트포워딩을 해야합니다. 이 기능이 -p 옵션 입니다.
'컨테이너 > Docker' 카테고리의 다른 글
도커 컨테이너의 운영 및 관리 ? (0) | 2020.05.05 |
---|---|
Docker Container (0) | 2020.04.21 |
docker image (2) (0) | 2020.04.19 |
Docker UI? (0) | 2020.04.18 |
Docker 기본 개념 ? (0) | 2020.04.18 |