기본 콘텐츠로 건너뛰기

[Docker ] Docker 실습

 https://sddev.tistory.com/218

위 링크 내용을 가져와서 내용 습득을 위해 다시 한번 정리한 것입니다.


[Docker ] Docker 실습


Docker 설치

공식 사이트 주소 : https://www.docker.com/get-started

Desktop 버전 설치, Community로도 왠만한 기능은 사용 가능



 


# Dockerfile 작성하기

@ Dockerfile 만드는 순서


1.베이스 이미지를 명시하기(파일 스냅샷에 해당)

2.추가적으로 필요한 파일을 다운 받기 위한 몇가지 명령어를 명시

3.컨테이너 시작시 실행 될 명령어를 명시

- FROM

    생성할 이미지의 베이스가 될 이미지를 뜻합니다. 

    FROM 명령어는 Dockerfile을 작성할 때 반드시 한 번 이상 입력해야 합니다.

- MAINTAINER

    이미지를 생성한 개발자 정보를 나타냅니다.

- RUN

    이미지를 만들기 위해 컨테이너 내부에서 명령어를 실행합니다.

    RUN 명령어에 ["/bin/bash", "echo hello" >> test.html"] 같이 입력하면 

    /bin/bash 셸을 이용해 'echo hello >> test2.html'을 실행한다는 뜻입니다.

- ADD

    파일을 이미지에 추가합니다.

    Dockerfile이 위치한 디렉터리에서 파일을 가져옵니다.

    ADD <DockerFile 경로 기준 파일 상대경로> <컨테이너 내 폴더 경로>

    ex) ADD test.html /var/www/html 이라면 Dockerfile과 같은 디렉토리에 있는 test.html 파일을 

        이미지 내부의 /var/www/html에 추가한다는 뜻입니다.

- WORKDIR

    명령어를 실행할 디렉터리를 나타냅니다. 배시 쉘에서 cd 명령어를 입력하는 것과 같은 기능을 합니다. 

    즉, 컨테이너 내부에서 작동을 합니다.

- EXPOSE

    Dockerfile의 빌드로 생성된 이미지에서 노출할 포트를 설정합니다. 

    그러나 EXPOSE를 설정한 이미지로 컨테이너를 생성했다고 해서 반드시 이 포트가 호스트의 포트와 바인딩되는 것은 

    아니며, 단지 컨테이너의 80번 포트를 사용할 것임을 나타내는 것뿐입니다.

- CMD

    CMD는 컨테이너가 시작될 때마다 실행할 명령어를 설정하며, Dockerfile에서 한 번만 사용할 수 있습니다.

- ADD, COPY

    ADD와 COPY는 큰 차이점이 없는 것처럼 보입니다. 하지만 차이점이 존재합니다.

    COPY는 로컬 디렉터리에서 읽어 들인 컨텍스트로부터 이미지에 파일을 복사하는 역할을 합니다.

    ADD는 외부 URL 및 tar 파일에서도 파일을 추가할 수 있다는 점이 다릅니다.

    ADD를 사용하는 것은 그다지 권장하지 않습니다.

- ENTRYPOINT, CMD

    ENTRYPOINT, CMD는 역할 자체는 비슷하지만 서로 다른 역할을 담당하는 명령어입니다.

    위의는 entrypoint를 사용하지 않은 경우입니다. 이 때는 /bin/bash에 접속한 것을 볼 수 있습니다.

    이번에는 entrypoint를 사용하였습니다. 이 때는 /bin/bash를 출력한 것을 볼 수 있습니다.

    즉 둘 다 컨테이너가 시작될 때 수행할 명령을 지정한다는 점에서 같지만, entrypoint는 커맨드를 인자로 받아 

    사용할 수 있는 스크립트의 역할을 할 수 있다는 점에서 다릅니다.


Dockerfile 작성

# 베이스 이미지는 ubuntu:18.04 를 사용

FROM ubuntu:18.04


# 이미지 생성한 개발자 정보

MAINTAINER sddev1002 <sddev1002@gmail.com>


# 명령어 실행(일반 텍스트)

RUN apt-get update

RUN apt-get install -y apache2 # Install Apache web server (Only 'yes')


# 로컬 파일 추가

ADD test.html /var/www/html


# 컨테이너 내 명령어 실행될 경로 지정

WORKDIR /var/www/html


# 명령어 실행(리스트 형태)

RUN ["/bin/bash", "-c", "echo hello >> test2.html"]


# 컨테이너를 80번 포트로 설정 (외부 노출)

EXPOSE 80


# apache 서버가 죽지 않고 백그라운드로 돌아가기 위해서 아래의 명령어 실행

# 컨테이너 생성 후, apachectl -D FOREGROUND 명령어가 실행됨

CMD ["apachectl", "-D", "FOREGROUND"]

# CMD apachectl -D FOREGROUND

^z


# Dockerfile로 이미지 만들기


# dockerfile이 존재하는 폴더로 이동

docker build -t <이미지명> .

docker images # 생성된 이미지 목록 조회


해당 Dockerfile이 있는 위치에서 위의 명령어를 입력하면 <이미지명> 이라는 이름의 Image가 생성된다.

.은 Dockerfile이 존재하는 현재 폴더 위치를 의미한다.

-t : tag의 약자로, 이미지에 대한 이름을 tag로 지정할 수 있다.

 


 


# 이미지로 컨테이너 생성 및 실행하기


댓글

이 블로그의 인기 게시물

[c#.net] WPF 사용 중 xaml관련 실행시 오류 와 대처 방법

wpf 사용 중 xaml관련 실행시 오류 가 발생해서 자그마치 2일을 소비 했다..--;; 오류 내용은 아래와 같다. ================================== 'System.Windows.Markup.XamlParseException' 형식의 첫째 예외가 PresentationFrameWork.dll에서 발생했습니다. 추가 정보: '지정된 바인딩 제약 조건과 일치하는 'PapaZone.MainWindow' 형식에 대한 생성자 호출에서 예외가 throw 되었습니다.' 줄 번호 '21' 및 줄 위치 '9' 이 예외에 대한 처리기가 있으면 프로그램을 안전하게 계속할 수 있습니다. [] 이 예외 형식이 throw되면 중단 ================================== 위 Xaml 오류 메세지만으로는 내용 추적 불가하여, 도대체 뭔가 했다. 검색해도 뚜렷한 답변은 없었지만, 여러가지 의견을 종합해 보면 아래와 같다. 1. xmlns 관련 파일 과 관련된 파일 로딩 실패 이거나, 2. 신규로 추가된 namespace 에 속한 태그 사용시 오류로 판단되어 태그 하나씩 삽입하며 테스트 해봐야 한다고 함. 해결한 지금에 원인을 보면, xaml 에서 clr-namespace 로 추가된 항목들이 로딩에 실패해서 발생한 것이며, 추가된 항목은 있었으나, 이것과 연결된 파일이 없어서 로딩되지 않는 것이 문제였다. 오늘도 즐거운 하루~~

[MSSQL] SQL Server 에 원격 접속을 못하는 경우 조치 방법

[MSSQL] SQL Server 에 원격 접속을 못하는 경우 조치 방법 내부 오류 추적 결과 다음과 같이 나옴. [Microsoft][ODBC Driver 13 for SQL Server]TCP Provider: 대상 컴퓨터에서 연결을 거부했으므로 연결하지 못했습니다. SqlState : 08001, NativeError : 10061 오류 원인과 처리 1.SQL 서버 로그인 계정 틀린 경우 -> A.SQL Managerment Studio에서 사용할 DB 접속 '로그인' 사용할 계정의 아이디/암호 확인 2.TCP/IP 접속 권한이 없는 경우 -> A.SQL Server 구성 관리자를 실행에서 TCP/IP 허용 되어 있는지 확인 B. 서비스 포트 값이 (보통 1433) 맞는지 확인 C. 외부에서 접속하는 경우에는 방화벽 허용 되엉 있는지 확인 C. 서비스 재시작 3.Windows 인증 모드만 허용 인 경우 -> A.SQL Managerment Studio에서 사용할 DB 접속하고, 우클릭 하여 속성 정보 확인해서 B.연결에서 인증모드 '로그인' 사용할 계정의 아이디/암호 확인 4.'exec Sp_ReadErrorLog' 명령어를 사용해서, 로그인 실패 로그를 확인해서 원인을 분석한다.

[링크] [Python] Kivy 한글 예제

링크:  http://www.complexity.co.kr/?p=443 폰트 복사를 하고, 폰트 경로를 지정해 줘야 한글 출력이 됨... 나는 kivy를 아래의 폴더처럼 구성이 되어 있다. \Kivy-1.9.0-py2.7-win32-x64 윈도우 시스템 폴더의 한글 폰트를 가져다 아래의 폴더에 복사하면 된다 \Kivy-1.9.0-py2.7-win32-x64\kivy27\kivy\data\fonts 난 네이버 나눔 고딕이 좋아보여서 나눔 고딕 폰트('NanumGothic.ttf')를 복사 했음 아래는 실행한 결과, 그리고, 아래는 kivy 이용한 한글 Hello World 코드 # coding: utf-8 from   kivy . app   import   App from   kivy . uix . button   import   Button   import   os class   TestApp ( App ): def   build ( self ): fontName = '/' . join ([ os . getenv ( 'SystemRoot' ), '/fonts/NanumGothic.ttf' ]) return   Button ( text = 'Hello World\n안녕?' , font_name = fontName ) TestApp (). run ()