-
[Docker] Container 관련 명령어 정리 with(실습 - container만들기, 종료, 삭제, 실제 주소와 마운트하기 등)CI-CD/Docker 2022. 5. 31. 10:40반응형
이번글은 Docker의 구성요소 image, container, docker hub 중 Container 관련 명령어를 알아 보려고 합니다. 구성요소로 나눠서 명령어를 알아보는 이유는 좀 더 이해도를 높이기 위해서입니다.
먼저 container관련 명령어를 알기 전에 docker image에 대한 개념을 알아야 합니다. image는 container를 실행 시키기 위한 설계도 라고 보면됩니다. 이 설계도가 있어야 container를 생성 및 실행을 할 수 있습니다. 꼭 docker hub에서 자신이 사용할 것이나 test해볼 image를 골라서 확인 해본 뒤에 pull 받아서 아래 내용을 진행해 봅시다. 여기서는 간단한 과정을 보기 위해서 tomcat server를 골라서 실행되는지 접속이 잘 되는지 확인 해보고 끝낼 예정입니다. 이번글에서는 container 관련 명령어 및 내용을 실습 및 적용해보자. 아래는 관련 명령어 입니다.
# image 내려받기 # docker pull {imageName}:{tag} - tag는 생략하면 latest로 자동 적용 docker pull tomcat:latest # image를 container로 실행하기 기본명령어 # docker run {OPTION} {imageName}:{tag} {command} docker run -it tomcat:latest /bin/bash # container에 이름을 할당하여 실행하기 # docker run {OPTION} --name {containerName} {imageName}:{tag} {command} docker run -it --name tomcatserver tomcat:latest /bin/bash # 백그라운드로 실행하기 # docker run {OPTION} -d --name {containerName} {imageName}:{tag} # 백그라운드에서 실행 하니 command를 정하지 않아도 된다. docker run -it -d --name tomcatserver tomcat:latest # 포트포워딩 # docker run {OPTION} --name {containerName} -p {외부접속포트}:{내부연동포트} {imageName}:{tag} {command} # 아래와 같이 설정하면 9999포트로 들어온것을 8080포트와 매칭해준다. docker run -it --name tomcatserver -p 9999:8080 tomcat:latest /bin/bash # 환경 설정 추가하여 실행하기 # docker run {OPTION} --name {containerName} {imageName}:{tag} -e {ENV변수명}={value} docker run -d -p 9999:8080 --name mysql-container -e TOMCAT_ID=tomcat # 실제 내가 파일을 관리하고 싶을 때 마운트 시켜 실행 시키기 # 마운트를 안시키면 내부적으로 생성된 파일은 모두 사라지기 때문에 마운트 시키는 법은 꼭 알아두자. docker run -d --name {containerName} -v {local 마운트 위치}:{container내부 마운트 위치} {imageName}:{tag} docker run -d --name mysql-container -v c:/users/path:/home/tomcat # container 종료와 함께 사라지게 하기 # docker run -it -rm {containerName} docker run -it -rm tomcatserver # --------------------------------------------------------------------- # continer 목록 확인 # 실행 되어있는 것 docker ps # 종료 되어있는것 모두 docker ps -a # --------------------------------------------------------------------- # run해서 container가 만들어진 상황이라면 아래의 container 동작 명령어 사용가능 # container 시작 docker start {containerName} # container 종료 docker stop {containerName} # container 재시작 docker restart {containerName} # container 삭제 - container 종료 후에 실행 docker rm {containerName} # container 삭제 - 강제 삭제 docker rm -f {containerName} # 실행 된 docker container 접속하기 # container 실행시 사용한다. docker attach {containerName} # 외부에서 컨테이너 진입할 때 사용한다. docker exec -it [container_name] /bin/bash # ---------------------------------------------------------------------- # command로 실행 했을 때 Container terminal에서 빠져나오기 exit ctrl + c
실습
- docker hub에서 tomcat image pull 받기
- docker 실행해보기 (기본 컨테이너 생성, 컨테이너 백그라운드로 실행, 포트포워딩 등등)
- 생성된 container 확인하기
- 생성된 container 조작하기(종료, 삭제, container접속 및 접속 해제)
docker hub에서 tomcat image pull 받기
명령어 - docker pull tomcat 으로 다운로드
명령어를 치면 프로세스 바가 나오게 되고 프로세스가 다 완료가 되면 설치가 완료가 된다. docker desktop에도 추가 된 것을 볼 수 있고, docker images를 활용하여 확인도 가능하다. 그리고 docker pull tomcat:{tag}형식으로 해야하는데 tag를 생략하면 latest로 자동 적용 된다
docker 실행해보기 (기본 컨테이너 생성, 컨테이너 백그라운드로 실행, 포트포워딩 등등)
-d : 백그라운드 실행 옵션
—name : container이름 설정
-p : 포트 포워딩
마지막에는 container로 만들고 싶은 image명
docker run -it -d —name {containerName} -p {외부접속포트}:{내부연동포트} {imageName}
docker run -it -d —name con-tomcat -p 9999:8080 tomcat
-p옵션으로 포트를 9999로 정해 주었기 때문에 localhost:9999로 접속하면 응답이 오는 것을 볼 수 있다. tomcat특성상 webapp 폴더에 webapp 파일이 없으면 매칭이 되지 않기 때문에 http 404오류를 반환해 주는 것이다. tomcat은 정상 작동 하고 있는 것을 볼 수 있다. 일단 tomcat에 배우는 것이 아니므로 넘어가자 예로 tomcat이 올라가지 않은 상태이면 오른쪽 그림이 페이지에 뜰것이다.
생성된 container 확인하기
docker ps -a 명령어를 사용하여 어떤 container가 있는지 확인 가능
생성된 container 조작하기(종료, 삭제, container접속 및 접속 해제)
- container 종료
docker stop {containerName} 명령어로 종료하기 desktop에 종료 된것을 볼 수 있다.
- container 시작
docker start {containerName} 명령어로 container 시작하기 desktop에서도 running인것을 확인 할 수 있다.
- container 재시작
docker restart {containerName} 명령어로 container desktop에서도 번쩍이며 다시 실행 되는 것을 볼 수 있다.
- container 삭제
docker rm -f {containerName} 명령어로 container삭제 desktop에서사라진 것을 볼 수 있다.
-f 옵션을 사용하지 않고 안정적으로 삭제 하려면 docker stop {containerName}, docker rm {containerName}을 하면 된다.
- container 접속 및 접속 해제
docker exec -it {containerName} /bin/bash 로 container내부에 접속 linux여서 /bin/bash로 설정함 os에 맞게 바꾸면 됨
Container 마운트 조작해보기
마운트는 pull받은 tomcat으로 하면 조작하기 어려운 점이 있어 하나의 실습 도커 파일을 준비해보겠습니다.
FROM node:12.18.4 RUN npm install -g http-server WORKDIR /home/node/app CMD ["http-server", "-p", "20000"]
파일 내용은 node 베이스로 구성을 했으며, http-sever로 노드 서버를 구성해 보도록 하겠습니다. image만들 때 RUN이 작동을 하며 container를 만들 때 working dir 설정 및 CMD의 명령어가 바로 실행이 된다. dockerfile작성법은 나중에 잘 익히면 될것같다 일단 이것을 복붙하여 사용하는 걸로
파일명은 dockerfile로 생성을 하고 terminal에서 필자에서 composetest/example/frontend/dockerfile에 위에 소스를 넣었고, dockerfile을 빌드를 하면 image가 만들어 진다.
# 해당 파일로 이동 cd composetest/example/frontend/ # docker image 생성 docker build -t front:latest .
docker image에 대해서 더 자세히 알고 싶으면, 여기를 클릭
docker container 만들기
# front라는 이미지를 docker run -it -p 9999:8080 -v /Users/planit/airflow/targetmount:/home/ --name con-front front
서버가 돌아가는 것을 볼 수 있으며 오른쪽 desktop에서도 돌아가고 있는 것을 확인 할 수 있다. 또한 왼쪽 target 폴더 안에 폴더들 이 생긴 것을 볼 수 가 있다. 위에서 dockerfile workdir을 /home/node/app으로 설정을 하였다. 그런데 마운트는 /Users/planit/airflow/targetmount:/home/ 으로 하였는데 이렇게 마운트를 하게 되면 오른쪽과 같이 node/app이라는 기본 폴더가 생기게 되는 것을 볼 수 가있다. 이렇게 변경된것을 보니 마운트가 잘 된 것 같다.
마운트를 /Users/planit/airflow/targetmount:/home/node/app으로 하면 폴더가 생성이 되지 않는 모습을 볼 수 있다.
touch test.txt 명령어를 이용하여 test.txt 생성해 보았는데, 왼쪽에 targetmount/node/appdp 파일이 생성 된것을 볼수 있다. app 폴더 안에 파일을 생성해 봐도 생성이 된다.
여태껏 마운트 하는 법에 대해 알아 보았는데, mount에서는 dockerfile에서 workdir이 과 env와 cmd 등을 고려해서 mount해야한다. 앞서 tomcat은 workdir /usr/local/tomcat으로 되어있는데 이것을 그냥 마운트 하는 순간 오류가 나게 되어있다. 왜그러냐면 container실행시 실행되는 명령어 중에 catalina를 실행해주는 곳이 있는데 이 명령어가 /usr/bin/의 주소로 되어있어 mount하게 되는 주소안에 usr/bin이라는 속성이 없으면 작업이 되지 않기 때문이다. 암튼 workdir을 잘 고려해서 마운트를 해야한다. tomcat image를 자세히 보게 되면 아래와 같은 Layer를 구성하고 있다. dockerfile에 쓰는 내용과 동일하다. 암튼 아래 내용을 정상 작동 하게 할려면 곡 내부주소를 ‘/’만 작성하여 usr/local/tomcat 폴더를 만들어 주어야 한다. docker를 잘 사용하려면 layers를 보는 법도 알아 두어야 한다.
docker run -it -p 9999:8080 --name con-tomcat -v /users/targetdir:/ tomcat
tomcat image layer 주소
반응형'CI-CD > Docker' 카테고리의 다른 글
[Docker]Dockerfile ubuntu FROM으로 지정하고 빌드시 오류 executor failed running [/bin/sh -c apt-get update]: exit code: 100 나는 문제 해결해 보기 (0) 2022.06.10 [Docker] image 관련 명령어 정리 with(실습-image 생성, 실행, 종료, 삭제) (0) 2022.05.30 [Docker] DockerFile 작성법 (0) 2022.04.24 [Docker] Docker Flow 이해하기 (0) 2022.04.24