기본 콘텐츠로 건너뛰기

[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' 명령어를 사용해서, 로그인 실패 로그를 확인해서 원인을 분석한다.

osx 터미널에서 이미지 파일 보기 open

맥(OSX) 터미널에서 이미지파일 바로 보기 UI의 시대에 누가 터미널을 사용하려나 하겠지만, 여러가지 작업을 하다보면, 터미널에서만 지속적으로 작업을 할 경우가 자주 발생한다. 간단한 것은 커맨드라인 명렬을 모른다해도, 경로만 알면,  UI 프로그램으로 약간의 삽질(?)을 통해 해당 프로그램을 수행하면 된다. 하지만, 터미널에서 주로 작업을 수행하고, 자주 반복되는 일이라면 명령어를 알아놓는게 훨씬 유리할 터... 터미널에서 쓰다 보니, 다른 건 비교적 unix 명령어로 해결이 되는데, 이미지 파일 보기 같은 경우는 텍스트 기반 프로그램에서는 쉽지가 않다. 결국, 관련 명령어를 검색 했고, 이전에도 몇번 언급을 했지만, 결국 타고난 능력(여러번의 기억의 망각)으로 다시 검색하게 되고, 또 다시 알게되었다. open 또 찾아보게 될줄이야..--;; 난 아래 2가지 형태를 가장 많이 사용하는 듯 open image/log.png    --> 파일과 관련된 Viewer? 띄우기 보통은 Preview가 뜸 open .    --> 현재 폴더 위치로 된 Finder 아래 명령들에 대한 설명들도 추가로 있으니, 추가적인 설명이 필요하면 맨 아래쪽 링크를 참고 하면 됨. open  pbcopy pbpaste mdfind screencapture launchctl say diskutil brew 관련한 검색 결과중 나중에 또 보게 된다해도 괜찮을 것이 보여서 글을 하나  남긴다. 제목 Eight Terminal Utilities Every OS X Command Line User Should Know 관련 링크:  http://lifehacker.com/eight-terminal-utilities-every-os-x-command-line-user-s-1593793109