D+41-컨테이너.컨테이너생성,목록,로그,중지,재시작,접속,삭제 이미지.목록,hub에올리기및삭제,삭제, 컨테이너활용.유틸리티설치,ip확인, 이미지제작.이미지선택,docker파일만들기,빌드하기,실행하기

Bku·2024년 2월 25일

학원 일기

목록 보기
38/67
post-thumbnail

컨테이너 기초

컨테이너에 생성

컨테이너 생성하기

컨테이너는 이미지를 실행하면 자동으로 생성이 된다. 즉 실행하면서 생성이 된다는 것이다.

  • 명령어 : "docker run 옵션 --name 생성될컨테이너명 이미지명 셀명"
    여기서는 -it --name옵션과, test1이라는 컨테이너와, centos:7이라는 이미지를 실행시키고 셀로는 bash를 사용하기에 다음과 같은 명령어가 된다.
C:\Users\PC>docker run -it --name test1 centos:7 bash
[root@4cae0846704a /]#

다음과 같이 리눅스 처럼 #프롬프트가 생긴것을 볼수 있다. 이렇게 되면 컨테이너가 실행된 것이다.

옵션 설명

docker run은 컨테이너 최초 실행 명령어이다. 하지만 이걸로 바로 실행이 되지 않고 여러 옵션을 넣어주어야한다.

기본 명령어에 추가적인 기능을 부여하는 것이 옵션이다.

  1. -it : docker 컨테이너 실행후 docker안의 리눅스에 접속하라는 옵션이다. 이걸 안하면 실행만 하고 접속은 안된다.
  2. "--name 별명": 컨테이너 별명 붙이기 옵션이다. 이걸 해주지 않으며 랜덤이름이 부여된다. 웬만하면 붙여주자. 이건 "-"를 두개 붙여야한다.
  3. "centos:7" : 실행할 이미지명
  4. "bash" : 사용할 셀 이름을 적어줌으로 셀 설정을 할 수 있다.

컨테이너 목록 보기

목록을 보는 방법에는 두가지가 있다.
도커 데스킅탑에서 볼 수 있고, 리눅스 환경에서는 도커 데스크탑을 확인 할 수 없으니 명령어로 해야한다.

실행중인 컨테이너 목록보기

  • 명령어 : docker ps
C:\Users\PC>docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

현재 실행중인 컨테이너가 없어서 목록이 없다.

모든 컨테이너 목록보기

  • 명령어 : docker ps -a
    a는 all의 약자이고, 실행/중지 된 모든 컨테니어를 볼 수 있다.
C:\Users\PC>docker ps -a
CONTAINER ID   IMAGE                     COMMAND       CREATED          STATUS                      PORTS     NAMES
4cae0846704a   centos:7                  "bash"        19 minutes ago   Exited (0) 44 seconds ago             test1
2a6d2173023a   centos:7                  "/bin/bash"   20 minutes ago   Exited (0) 20 minutes ago             stupefied_greider
8fd27fab22d2   centos:7                  "/bin/bash"   2 days ago       Exited (0) 2 days ago                 vigorous_haslett
345d3756f1ff   kangtaegyung/ubuntu-win   "/bin/bash"   4 days ago       Exited (0) 

컨테이너 id을 외우기가 힘드니 이름(이름은 고유해야한다.)을 붙여주는 것이 좋다. command는 사용하는 셀의 종류이고, 현재 상태와 만들어진 시간, 별명, 이미지명을 알 수 있다.

컨테이너 로그 출력

로그(log)란

이력을 남기는 것으로 실행이나 에러, 정상출력메세지, 로그인이력등을 파일에 남긴다. 언제 이런 일들이 일어났는지를 알아야하므로 항상 로그를 남겨야한다.

로그 출력 방법

  • 명령어 : "docker logs 컨테이너명(ID 또는 이름)"

해당 컨테이너의 실행이력을 볼 수 있다.

C:\Users\PC>docker logs test1
[root@4cae0846704a /]# ls
anaconda-post.log  dev  home  lib64  mnt  proc  run   srv  tmp  var
bin                etc  lib   media  opt  root  sbin  sys  usr
[root@4cae0846704a /]# [wd
bash: [wd: command not found
[root@4cae0846704a /]# pws
bash: pws: command not found
[root@4cae0846704a /]# pwd
/
[root@4cae0846704a /]# exit
exit

아래에 test1에서 우리가 한 실행들의 기록을 볼 수 있다.

컨테이너 중지 및 다시 시작하기

컨테이너 중지하기

도커데스크탑에서 중지


컨테이너 탭에서 네모 버튼을 눌러주면된다.

명령어로 중지

컨테이너를 종료하는 것이 아닌 일시 중지 시켜보자

  • 명령어 : "docker stop 컨테이너명"
    이렇게 하면 종료되어 컨테이너를 삭제하는 것이아니고 잠깐 중지를 시킬 수 있다.
C:\Users\PC>docker stop test2
test2

컨테이너명이 뜨면 잘 된것이다.

컨테이너 강제중지

컨테이너가 정상적으로 중지가 안 될 경우(예를 들어 다른 사람이 리눅스를 사용하고 있을경우 ) 강제적으로 중지를 시키는 명령어가 있다.

  • 명령어 : "docker kill 컨테이너명"
C:\Users\PC>docker kill test2
test2

컨테이너명이 뜨면 잘 된거이고, 일반중지보다 중지가 빠르다.

컨테이너 재시작

중지된 컨테이너를 다시 시작해보자.

도커 데스크탑에서 시작

도커데스크탑 - container 탭 클릭 - action아이콘 클릭

명령어로 시작

  • 명령어 : "docker start 컨테이너명(ID 또는 이름)"
C:\Users\PC>docker start test1
test1

컨테이너 이름이 뜨면 성공한 것이다.

컨테이너 접속하기

접속은 실행중인 컨테이너에만 가능하다.

  • 명령어 : "docker attach 컨테이너명"
C:\Users\PC>docker attach test1
[root@4cae0846704a /]#

플롬프트가 #으로 바뀌면서 리눅스로 접속이 된다.

근데 컨테이너를 만들 때 -it를 해주면 attach로 따로 접속을 안해도 된다.

이미지 목록 보기

이것도 데스크탑에서 볼 수도있고 명령어로도 가능하다. 데스크탑은 간단하니 스킵하고 며령어를 알아보자.

  • 명령어 : docker images
C:\Users\PC> docker images
REPOSITORY                TAG       IMAGE ID       CREATED       SIZE
kangtaegyung/ubuntu-win   latest    fd6e87cdbbbc   4 days ago    265MB
ubuntu                    latest    3db8720ecbf5   11 days ago   77.9MB
centos                    7         eeb6ee3f44bd   2 years ago   204MB

이렇게 현재 컴퓨터에서 가지고 있는 이미지를 보여준다.

이미지도 이름과 id를 가지는데 id를 사용하는것도 가능하다.

docker hub에 이미지 올리기 및 삭제

도커허브에 나의 이미지를 올리고 다른 사람이 사용하게 업로드를 할 수 있다. 또한 손쉽게 보관이 가능하다.

이미지를 올리기 위해서는 로그인이 필수적이다.

이미지 업로드

도커 로그인

이미지를 올리기 위해서는 로그인이 필수적이다. 로그인도 명령프롬프트로 가능하다.

  • 명령어 : docker login
C:\Users\PC>docker login
Authenticating with existing credentials...
Login Succeeded

Login Succeeded이 뜨면 성공한 것이다.

이미지 명에 계정명 붙이기

계정명을 해주지 않으면 이름이 겹치기 때문에 고유성을 해친다. 그래서 반드시 내계정의 이름을 붙여주어야한다. 그래서 올리기 전에 계정명이 붙은 이미지명으로 이미지명을 바꾸어주어야한다.

  • 명령어 : "docker tag 이미지명 계정명/이미지명"
C:\Users\PC>docker tag ubuntu bku1/ubuntu

C:\Users\PC>docker images
REPOSITORY                TAG       IMAGE ID       CREATED       SIZE
kangtaegyung/ubuntu-win   latest    fd6e87cdbbbc   4 days ago    265MB
bku1/ubuntu               latest    3db8720ecbf5   11 days ago   77.9MB
ubuntu                    latest    3db8720ecbf5   11 days ago   77.9MB
centos                    7         eeb6ee3f44bd   2 years ago   204MB

새로운 bku1/ubuntu라는 이름의 ubuntu이미지가 생긴 것을 확인 할 수 있다. 크기와 이미지 id, 생성날짜가 같은것을 보니 복사본이 생기는 것으로 볼 수 있다.

이미지 올리기

  • 명령어 : "docker push 계정명/이미지명:버전"
C:\Users\PC>docker push bku1/ubuntu
Using default tag: latest
The push refers to repository [docker.io/bku1/ubuntu]
d101c9453715: Mounted from library/ubuntu
latest: digest: sha256:bf95d30007470fc826d727620d7d6a43f3abcd02ea0a0039814346e38337380e size: 529

docker hub의 repository 탭에서 확인이 가능하다.

잘 업로드 된것을 확인 할 수 있다.

이미지 삭제하기

내가 올린 이미지를 클릭해서 들어가면 settings 탭이 있다. settings에서 제일 밑에 보면 deledt repository가 있는데 여기서 삭제를 하면된다.

  • 만든이미지 클릭해서 들어가기 -> settings -> deledt repository

컨테이너와 이미지 삭제하기

컨테이너 삭제하기

컨테이너를 삭제하는 방법도 두가지가 있다. 데스크탑과 명령어. 여기서도 데스크탑은 스킵하고 명령어만 알아보자.

명령어로 컨테이너 삭제하기

  • 명령어 : "docker rm 컨테이너명"

여기서 rm은 remove의 약자이다.

C:\Users\PC>docker rm test2
test2

컨테이너명이 뜨면 삭제가 잘 된것이다.

데스크탑에서도 test2가 잘 사라진 것을 볼 수 있다.

이미지 삭제하기

이미지도 마찬가지로 두가지 방법이고 명령어만 알아보자

명령어로 이미지 삭제하기

  • 명령어 : "docker rmi 이미지명:버전"
    이미지에 버전이 여러개가 있어서 버전도 적어주어야한다.
C:\Users\PC>docker rmi centos:7
Untagged: centos:7
Untagged: centos@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Deleted: sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9
Deleted: sha256:174f5685490326fc0a1c0f5570b8663732189b327007e47ff13d2ca59673db02

centos:7을 삭제했다.

데스크탑에도 잘 삭제가 된 것을 확인 할 수 있다.

주의점

컨테이너를 먼저 삭제하고 이미지를 삭제해야한다. 이미지를 가진 컨테이너들이 남아있으면 오류가 발생할 수도 있다.

컨테이너 활용

ubuntu에 유틸리티 프로그램 설치하기

유틸리티 프로그램을 설정할때는 관리자프로그램에 접근을 해야한다. apt-get을 해주면 관리자프로그램에 접근할 수 있다.

업데이트

  • 명령어 : apt-get update

    업데이트가 완료되면 다음과 같은 화면이 나온다.

업그레이드

  • 명령어 : apt-get upgrade

    업그레이드가 완료되면 다음과 같은화면이 나온다.

네트워크 유틸리티 설치하기

  • 명령어 : "apt-get 유틸리티명"
    만약 질문에 다 yes로 대답하고 싶으면 -y옵션을 추가해주면된다.

사이트가 잘 운영중인지 핑을통해 알아보는 툴과 네트워크 주소 관리하는 툴을 설치해보자.

# apt-get install -y iputils-ping
# apt-get install -y net-tools
# apt-get install -y iproute2

리눅스의 컴퓨터 ip보기

네트워크 기본 지식

외부(공인)ip는 회선을 깔면 하나씩 부여된다. 하지만 ip하나 당 하나의 기기에만 연결이 가능하다. 이 때 여러개의 기기에 네트워크를 연결하려면 ip의 갯수를 늘려야하고 이건 돈이 많이 드니까 내부ip라는 개념을 이용한다. 외부 ip를 쪼개서 각각의 기기에 ip를 부여하는 것이다. 외부 ip는 255로 시작하고ㅡ, 내부ip는 시작을 192나 172로 시작한다.

리눅스에서 ip확인 방법

웹을 만들면 ip를 확인해야하는 상황이 많이 생긴다. 리눅스에서 ip를 확인하는 방법을 알아보자.

  • 명령어 : ifconfig eth0

여기서 eth0는 기본 하드웨어인 이더넷(ethernet) 네트워크 카드이다. 여기에 ip번호를 설정을 한다. 이게 없으면 ip를 부여받을 수 없다.

1이 내부이고 2가 외부이다.

docker의 os구조

docker의 컨테이너는 os로 리눅스를 사용한다. 하지만 우리는 윈도우나 ios를 os로 많이 사용하는데 이때 리눅스를 사용하기 docker desk탑이 우리의 os에 가상공간을 만들어서 리눅스를 실행할 수 있는 os를 만든다음 거기서 컨테이너를 실행하는 것이다.

이런 구조로 실행이 된다.

특징

  • 컨테이너와 윈도우는 기본적으로 통신이 불가하고, 만약 통신을 하고싶다면 port를 개방하는 추가작업을 해야한다.
  • 컨테이너는 독립적인 ip를 가지고있다.
  • 컨테이너끼리는 서로 통신이 가능하다.

이미지 제작(build)

이미지 제작의 개요

베이스(기본) 이미지 선택

이미지를 만들때는 이미 있는 이미지(샘플)를 베이스로 선택해서 만들어야한다. 이미지제작에는 os가 필요한데 보통 리눅스를 사용한다.

리눅스의 종류

리눅스의 종류는 2가지가 있다. 데비안계열은 무료이고, 레드햇계열은 상용과 무료가 있다.

  • 데비안계열 - 우분투, 수세리눅스
  • 레드헷계열 - redha, centos:7

애플리케이션 응용 소스코드 넣기

docker파일 만들기 순서

docker파일은 이미지 제작 처리 순서를 작성한 파일로, docker가 이 파일을 읽어서 이미지를 만든다.
1. 기본 이미지 선택(os, os가 설치된 프로그램 등)
2. 애플리케이션 코드와 설정 파일 복사
3. 최초 컨테이너 실행시 자동 실행할 명령어 작성(생략가능)

docker파일 만들기

컨테이너를 실행하면 파일을 읽어서 화면에 출력하는 이미지와 컨테이너를 만들어보자.

파일 생성과 코드 작성

VScode에서 Docker이라는 파일을 만들고 아래의 코드를 작성하면된다. 파일의 이름은 Docker로 항상 이어야한다.

# 베이스 이미지 선택
FROM ubuntu:18.04
# 도커 컨테이너 내부에서 실행할 명령어
# 리눅스 업데이트 실행
RUN apt-get update -y
# 윈도우파일인 /message.txt => 리눅스/message.txt에 복사
ADD ./message.txt /message.txt
# 컨테이너 실행후에 1번 실행할 명령어 출력
CMD cat /message.txt
  • FROM은 베이스 이미지를 선택하는 코드이다. 이번에는 ubuntu:18.04을 베이스로 한다.
  • RUN은 도커의 Dockerfile에서 사용되는 RUN 명령어는 이미지를 빌드할 때 사용된다. 이 명령어는 새로운 레이어를 생성하고 그 레이어에서 지정된 명령어를 실행한다. 주로 이미지를 구성할 때 필요한 패키지 설치, 파일 다운로드, 설정 변경 등의 작업을 수행하는 데 사용된다.
  • ADD는 Dockerfile에서 사용되며 파일이나 디렉토리를 이미지에 추가할 때 사용된다. 이 명령어는 파일 또는 디렉토리를 Docker 빌드 컨텍스트에서 이미지로 복사한다.
  • CMD는 Dockerfile에서 사용되며, 컨테이너가 실행될 때 실행할 기본 명령을 지정한다. 이 명령어는 Dockerfile에서 한 번만 사용할 수 있으며, 보통 Dockerfile의 맨 끝에 위치한다.

cmd로 빌드하기

  1. VS코드에서 파일이 들어있는 경로로 들어가서 cmd를 실행해준다. 이걸 누르면 경로로 바로 갈 수 있다.
  2. cmd창에서 Docker파일 빌드 명령어인 "docker build --tag 빌드될파일이름 docker파일경로"를 입력한다.
C:\Users\PC\Desktop\class_things\04_MSA\02_docker\build>docker build --tag hello .

-- tag는 빌드될 파일에 이름을 부여하는 옵션이다. 그리고 docker파일이 현재 위치에 있으므로"."을 해주었다.

결과
C:\Users\PC\Desktop\class_things\04_MSA\02_docker\build>docker build --tag hello .
빌드내용을 보여주며 에러가 없으면 빌드 성공이다.

제작된 이미지 컨테이너 실행

이제 만든 이미지 파일을 실행해보자.

  • 명령어 : "docker run 제작된파일명"
C:\Users\PC\Desktop\class_things\04_MSA\02_docker\build>docker run hello
hello world

우리가 원하는 hello world가 출력되는 파일이 잘 실행된다. docker desktop에서도 이미지와 컨테이너가 만들어졌는지 확인이 가능하다.

profile
기억보단 기록

0개의 댓글