Docker의 기본 동작
5125 단어 도커ubuntu18.04
소개
Docker 컨테이너가 어떻게 움직이는지 쉽게 정리한 것입니다.
주로 이쪽의 서적을 참고로 하고 있습니다.
Docker/Kubernetes 실습 컨테이너 개발 입문 Docker/Kubernetes를 활용한 컨테이너 개발 스타일을 익힌다!
소스 코드와 Dockerfile 준비
아래의 리포지토리에, 본고에서 소개하는 Docker의 기본 동작 확인용의 소스와 Dockerfile를 두고 있으므로
git clone하여 사용하십시오.
아래의 리포지토리에, 본고에서 소개하는 Docker의 기본 동작 확인용의 소스와 Dockerfile를 두고 있으므로
git clone하여 사용하십시오.
Go 언어의 코드로, 이하와 같은 거동을 하는 서버 어플리케이션으로서 동작합니다.
이 코드의 내용은 Docker/Kubernetes 실습 컨테이너 개발 입문의 2장에서 소개된 것과 거의 같습니다.
…라고 할까 만마입니다(웃음)
Docker 이미지 빌드
소스 파일과 Dockerfile을 준비한 후 docker image build
명령으로 Docker 이미지를 만듭니다.
다음 예제에서는 sample/echo
라는 이미지 이름입니다. sample
는 네임스페이스이며 충돌 회피를 위해 네임스페이스를 추가하는 것이 좋습니다.
$ docker image build -t sample/echo:latest .
실행 결과Sending build context to Docker daemon 56.32kB
Step 1/4 : FROM golang:1.13
1.13: Pulling from library/golang
376057ac6fa1: Pull complete
5a63a0a859d8: Pull complete
496548a8c952: Pull complete
2adae3950d4d: Pull complete
039b991354af: Pull complete
036abadca78f: Pull complete
0514917ef7dc: Pull complete
Digest: sha256:c56dbb28a169f9bccdf398dc9d4bc8d41463352843dbcf03b6ef2fb3472c1794
Status: Downloaded newer image for golang:1.13
---> 84125009cb55
Step 2/4 : RUN mkdir /echo
---> Running in 2fea51c650a5
Removing intermediate container 2fea51c650a5
---> ec45bfb228d7
Step 3/4 : COPY main.go /echo
---> f1692e49f33b
Step 4/4 : CMD [ "go", "run", "/echo/main.go" ]
---> Running in 09eddbb7e969
Removing intermediate container 09eddbb7e969
---> d8956f84209a
Successfully built d8956f84209a
Successfully tagged sample/echo:latest
이미지 확인
docker image ls
명령으로 작성된 이미지를 나열할 수 있습니다.
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
sample/echo latest d8956f84209a 4 minutes ago 803MB
hello-world latest bf756fb1ae65 5 months ago 13.3kB <--以前作成したイメージ
컨테이너 실행
$ docker container run sample/echo:latest
2020/06/07 09:10:44 start server
Docker 컨테이너의 애플리케이션이 올바르게 실행되고 있는지 확인하기 위해,
다른 터미널에서 http 요청을 제출해 봅시다.
로컬 8080 포트가 공개되지 않아야 합니다.
$ curl http://localhost:8080
curl: (7) Failed to connect to localhost port 8080: 연결이 거부되었습니다.
컨테이너 외부의 요청을 컨테이너 내에서 실행 중인 애플리케이션에 도달해야 합니다.
거기에 필요한 것이 포트 포워딩이 됩니다.
포트 포워딩
포트 포워딩을 사용하면 호스트 시스템의 포트를 컨테이너 포트에 연결하고 컨테이너 외부에서 오는 통신을 컨테이너 포트로 전달할 수 있습니다.
이제 포트 포워딩을 실행해 보겠습니다.
컨테이너를 한 번 중지
먼저 정지시키고 싶은 컨테이너의 CONTAINER ID 혹은 NAMES 를 docker container ls 로 확인합니다.
$docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
16af6b5417d7 sample/echo:latest "go run /echo/main.go" About an hour ago Up About an hour lucid_burnell
CONTAINER ID 또는 NAMES로 컨테이너를 중지합니다.
# ID로 중지하는 경우
$docker stop 16af6b5417d7
# NAMES에서 중지하는 경우
$docker stop lucid_burnell
포트 포워딩
호스트 측 9000 포트를 컨테이너 측 8080 포트로 포트 포워딩합니다.
$ docker container run -d -p 9000:8080 sample/echo:latest
http 요청 제출
9000 포트를 지정하여 http 요청을 보냅니다.
이번에는 Hello Docker!!와 응답이 돌아올 것입니다.
$ curl http://localhost:9000
Hello Docker!!
컨테이너 삭제
$docker rm <ID or Name>
이미지 삭제
연습용 이미지를 만들었으므로 앞으로 필요하지 않으면 삭제해 주세요.
정리 정돈 소중!
컨테이너가 없는 이미지 삭제
$ docker rmi d8956f84209a
컨테이너가 있는 이미지 삭제(컨테이너도 삭제됨)
$docker rmi -f d8956f84209a
Reference
이 문제에 관하여(Docker의 기본 동작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/M-jan/items/0d5fa60e92bc0cb26e60
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ docker image build -t sample/echo:latest .
Sending build context to Docker daemon 56.32kB
Step 1/4 : FROM golang:1.13
1.13: Pulling from library/golang
376057ac6fa1: Pull complete
5a63a0a859d8: Pull complete
496548a8c952: Pull complete
2adae3950d4d: Pull complete
039b991354af: Pull complete
036abadca78f: Pull complete
0514917ef7dc: Pull complete
Digest: sha256:c56dbb28a169f9bccdf398dc9d4bc8d41463352843dbcf03b6ef2fb3472c1794
Status: Downloaded newer image for golang:1.13
---> 84125009cb55
Step 2/4 : RUN mkdir /echo
---> Running in 2fea51c650a5
Removing intermediate container 2fea51c650a5
---> ec45bfb228d7
Step 3/4 : COPY main.go /echo
---> f1692e49f33b
Step 4/4 : CMD [ "go", "run", "/echo/main.go" ]
---> Running in 09eddbb7e969
Removing intermediate container 09eddbb7e969
---> d8956f84209a
Successfully built d8956f84209a
Successfully tagged sample/echo:latest
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
sample/echo latest d8956f84209a 4 minutes ago 803MB
hello-world latest bf756fb1ae65 5 months ago 13.3kB <--以前作成したイメージ
Reference
이 문제에 관하여(Docker의 기본 동작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/M-jan/items/0d5fa60e92bc0cb26e60텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)