Docker 기본 flow 정리 + 네트워크

2star_·2024년 12월 6일

Docker

목록 보기
2/6

Docker의 기본 flow

docker hub -(pull)-> image -(run)-> container

Docker hub에서 image 가져오기

https://hub.docker.com/
위 링크로 들어가서Explore를 클릭하고 원하는 소프트웨어가 들어있는 소프트웨어를 찾으면 된다.

예를들어

nginx에 들어가서

이렇게 소개되는 명령어로, image를 다운로드 받을 수 있다. 아래에 설명도 자세하게 적혀 있다. (httpd로 들어가서 아파치로 실습해,,,)

https://docs.docker.com/reference/cli/docker/image/pull/

docs.docker에 접속해서 다양한 Reference들을 볼 수 있다.

image pull을 어떻게 사용하는지 자세하게 쓰여있고 뭘 의미하는지도 찾을 수 있다.


이렇게 이미지를 다운 받았으면 확인을 해야한다!

docker image 명령어를 통해 pull을 시도했던 이미지가 잘 나오는지 확인 할 수 있다.
(TAG : latest는 최신버전이라는 뜻)

커맨드라인이 익숙하지 않으면 설치했던 Docker Desktop에서 확인 할 수 있다 ^^...


image 실행시켜 container 만들기

https://docs.docker.com/reference/cli/docker/container/run/

docs에서 docker container run에 대해 자세히 알 수 있다.

docker run 과 docker container run은 같은 동작을 한다.

사용법을 살펴보면, IMAGE앞에 옵션을 주고 뒤에 IMAGE container 안에서 실행하고 싶은 명령어를 실행하고 싶은 부분을 쓸 수 있다.
(대괄호로 써 있는 부분은 생략 가능하다는 뜻이다.)
대표적으로 [OPTIONS]--name {이름}을 사용해서 container의 이름을 지을 수 있다.

만든 container를 확인하는 명령어

docker container ls [OPTIONS]
docker container list
docker container ps
docker ps

이렇게 확인 할 수 있다.


container 명령어

container 중지

docker stop + (container id 또는 container name)

stop을 통해 container의 실행을 중지시켰다고 해서 삭제되는것은 아니다. docker ps -a을 통해 전체 container를 확인 할 수 있다.

재실행

docker start

로그를 확인하고 싶으면,

docker logs 이름

실시간 로그를 확인하고 싶으면

docker logs -f 이름

컨테이너 삭제는

docker rm 이름

현재 실행중인 container는 바로 지울 수 없다 stop 후에 rm하면 지워진다. --force를 붙이면 스탑을 하지 않고도 삭제가 되긴 한다.!

이미지 지우기

Docker Desktop 에서 간단하게 삭제 할 수 있다.
커맨드라인
docker rmi i > image


네트워크

docker Host는 container에 설치된 웹 서버의 운영체제다.

하나의 docker host에는 여러개의 container가 만들어 질 수 있다. container와 host 모두 독립적인 실행환경으로 각자 독립적은 포트와 file system을 가지고 있다.

여기서 Host와 container의 연결이 되어있지 않기 때문에,

docker run -p 80:80 [image]

명령어를 통해서 포트를 연결시켜 줘야 한다.

호스트:컨테이너 순으로 포트번호 설정한다.

이렇게 연결된 포트로 신호를 전달하는 것이
port forwarding이라고 한다.

요청 신호가 웹 서버로 전송이 정상적으로 된다.


예시

docker pull httpd를 통해서 image를 만들고
container를 만들어 보자

Docker desktop에서 해당 image에 run을 누르면 위와 같은 인터페이스를 볼 수 있다.

(이렇게 8080으로 적어주면 8080포트로 들어왔을때 container에 80으로 포트포워딩을 한다는 뜻이다)

지정하고 run을 누르면

이렇게 container가 만들어졌다!

그렇다면 커맨드로 어떻게 할 수 있을까

여기 [OPTIONS]에 지정을 해 주면 된다.
https://docs.docker.com/reference/cli/docker/container/run/

이 옵션을 이용해서 할 수 있다.
(컨테이너의 포트를 호스트로 퍼블리시한다!)

docker ps를 통해 앞서 만든 container 들의 정보를 확인하면 8080->80 이렇게 연결되어 있는것을 확인 할 수 있다.

새롭게 docker run --name ws3 -p 8081:80 httpd 이 명령어로 ws3의 이름을 가진 container를 8081 ->80 포트로 설정하여 run시켰다.

잘 설정된것을 확인할 수 있다.


로컬 호스트에 접속하여 리로드를 할 때마다 데스크톱에서 container의 로그도 확인 할 수 있다.


index.html의 내용을 어떻게 수정 할 수 있을까?

container안에 들어가서 수정을 해야한다.

desktop에서 수정하기

container에서 Open in terminal을 클릭하고

Open in external terminal을 클릭하면 CIL을 열 수 있다.

이렇게 나오는 커맨드 창에서 #pwd를 입력하면, host에서 명령어를 입력한 것이 아니라, container 내부의 명령어라고 생각하면 된다.
(ls -al도 마찬가지다.)


커맨드 라인에서 container 수정하기
https://docs.docker.com/reference/cli/docker/container/exec/

이 명령어를 사용하면 된다.

CONTAINER : 컨테이너의 이름
COMMAND : 실행시킬 명령어

이런식으로 명령어를 입력하면, container에서 pwd는 컨테이너를 대상으로 실행된 명령어다

연속적으로 계속 ws3를 대상으로 명령을 내리고 싶으면 어떻게 할까?

명령어
docker exec -it ws3 /bin/sh
docker exec -it ws3 /bin/bash

이렇게 계속 명령을 내릴 수 있는 상태가 된다.

-i, --interactive Keep STDIN open even if not attached
-t, --tty Allocate a pseudo-TTY

exec 명령어의 옵션들 중 it를 결합해서 사용한 명령어임.

exit를 사용하면 container에서 나갈 수 있다!


이렇게 오늘 docker로 container 안의 파일을 수정할 수 있는 상태를 만드는 방법을 배웠다.

하지만 container를 직접 수정한다면, 컨테이너가 사라진다면 수정한 작업들이 사라질 수 있다.


(출처 - 생활코딩 유튜브)

호스트의 타겟 index.html 과 컨테이너의 index.html을 연결시켜 로컬에서 작업한 것이 보여지게 하는 식으로 작업을 하면 안전하게 할 수 있다. 실행환경만 container에게 맡긴다고 생각하면 쉽다.

작업하고 있는 IDE에서 터미널을 열고

docker run -p 8888:80 -v ~/Desktop/htdocs:/usr/local/apache2/htdocs/ httpd

-v : 볼륨 옵션을 사용

~/Desktop/htdocs : 현재 로컬에서 작업하고 있는 파일 경로

: 연결

/usr/local/apache2/htdocs/ httpd : 아파치 공식문서에서 찾은 index.html을 수정할 수 있는 경로

이렇게 실행하면 로컬에서 수정한 작업물이 호스트와 연결되어 있는 container에 반영되어 결과가 노출된다. 결론 - 호스트 환경 안에서 안전하게 작업 할 수 있다!


짧은 영상을 열심히 시청했다. 이제 지급 받은 강의로 돌아가서 어떤 것들을 또 배울 수 있을지 확인하자.

profile
안녕하세요.

0개의 댓글