Docker: 두 판 사이의 차이

학교의 모든 지식. SMwiki
둘러보기로 이동 검색으로 이동
 
(같은 사용자의 중간 판 11개는 보이지 않습니다)
1번째 줄: 1번째 줄:
==개요==
{{Docker}}
 
=개요=
반가상화 기술.
반가상화 기술.


=기본 사용=
=기본 사용=
===설치===
{| class="wikitable"
!과정
!설명
!방법
|-
|설치
|그냥 설치.
|sudo apt update && sudo apt-get install docker.io && sudo apt-get install docker-compose
|-
|설치확인
|
|docker --version
docker-compose --version
|-
|포테이너 설치
(선택사항)
|아무래도 GUI 환경보단 직관적인 게 좋지...?
이후 대충 localhost로 접속해서 계정 생성하고 사용하면 된다.
--restart=always 옵션은 docker를 재시작 해도 자동으로 구동하라는 옵션.
|sudo docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data --restart=always portainer/portainer
|}


===기본설정===
===기본설정===
38번째 줄: 15번째 줄:
|공간이 넉넉한 파티션에 저장하는 편이 옳다.
|공간이 넉넉한 파티션에 저장하는 편이 옳다.
|
|
|}
==이미지 관련==
{| class="wikitable"
!과정
!설명
!방법
|-
|-
|이미지 확인
|부팅 시 컨테이너 자동실행
|이미지리스트를 본다.
 
용량과 태그, ID, 생성날짜, 크기를 볼 수 있다.
|docker images
|-
|이미지 삭제
|이미지에서 파생된 컨테이너를 삭제해야 삭제할 수 있다.
컨테이너가 있어 삭제가 안될 경우, -f 옵션으로 컨테이너까지 삭제.
|docker rmi 이미지:태그
|-
|모든 이미지 삭제
|
|
|docker rmi $(docker images -q)
|<code>docker update --restart=always <container-id></code>
|-
|-
|이미지 히스토리
|부팅 시 컨테이너 자동실행
|이미지의 변경 히스토리를 조회한다.
|서버가 꺼졌다 다시 시작될 때 컨테이너가 자동 시작되게끔.
|docker history 이미지:태그
rc.local 안에 다음의 내용을 담아준다.<syntaxhighlight lang="bash">
|-
#!/bin/bash
|
|
|
|}


==컨테이너 관련==
docker start $(docker ps -a -q)  # 모든 컨테이너 실행.
</syntaxhighlight>다른 방법
{| class="wikitable"
{| class="wikitable"
!과정
!과정
!설명
!설명
!방법
|-
|생성
|가능하면 옵션들은 이미지 이름 앞에 두는 편이 좋다.
{| class="wikitable"
!옵션
!설명
|-
| -v 호스트경로:컨테이너경로
|호스트의 파일을 컨테이너에 연결한다.(-v옵션 여러 개 사용 가능)
|-
|-
| --expose 포트번호
|systemd 서비스 파일 생성
|다른 컨테이너에서 접속할 수 있는 포트번호를 설정한다.
|아래 예시처럼 system 디렉토리 안에 .service 파일을 생성한다.
<code>sudo vim /etc/systemd/system/mydocker.service</code>
|-
|-
| --link 컨테이너:별칭
|내용 작성
|컨테이너를 다른 컨테이너와 연결해서 실행한다.(연결할 것이 실행되어 있어야 함)
|<syntaxhighlight lang="bash">
 
[Unit]
호스트파일에 IP주소가 설정되어 별칭으로 접속할 수 있다.
Description=My Docker Container
Requires=docker.service
After=docker.service


/별칭:포트번호/연결한컨테이너하위디렉터리
[Service]
Restart=always
ExecStart=/usr/bin/docker start -a 컨테이너이름
ExecStop=/usr/bin/docker stop -t 2 컨테이너이름


(포트번호는 docker ps로 확인 가능)
[Install]
|-
WantedBy=multi-user.target
| -p 호스트포트:컨테이너포트
</syntaxhighlight>
|포트를 연결한다.
|-
| -d
|데몬으로 실행(백그라운드에서 실행)
|-
|<code>--privileged</code>
|모든 기능을 사용할 수 있게끔, 권한을 부여한다는 의미.
IP주소 등 네트워크 설정을 만질 수 있다.
|-
| -e
|환경변수 설정. 보통 다음과 같이 UTF-8로 인코딩함을 알려주기 위해 사용.
-e LANG=ko_KR.UTF-8
|}
|}
로컬에 이미지가 없으면 자동으로 이미지를 받아온다.
|vi /etc/rc.local
|docker run 옵션 이미지이름:태그
chmod 755 /etc/rc.local
|-
|실행
|이미 만들어진 컨테이너가 종료되었을 때 다시 실행한다.
|docker start 컨테이너
|-
|종료
|도커를 재시작 할 때 도커 내부에서 서비스도 함께 종료된다.


systemctl apache2 start, service start mysql와 같은 명령으로 서비스를 실행해주어야 한다.
systemctl enable rc-local.service
|docker stop 컨테이너
|-
|현재 실행 컨테이너 확인
| -a 옵션을 붙이면 종료된 컨테이너도 볼 수 있다.
|docker ps
|-
|컨테이너에서 파일 꺼내기
|컨테이너에서 파일을 꺼낸다.
|docker cp 컨테이너:경로 호스트경로
docker cp hello:/etc/file.conf ./  # 현재경로로 컨테이너의 파일을 꺼낸다.
|-
|변경파일 확인
|컨테이너가 실행되며 변경된 파일목록 출력.
기준은 컨테이너를 생성한 이미지 기준.


A: 추가된 파일
systemctl start rc-local.service
 
C: 변경된 파일
 
D: 삭제된 파일
|docker diff 컨테이너
|-
|이미지로 저장
|변경사항을 이미지로 생성한다.
{| class="wikitable"
!옵션
!설명
|-
| -a, --author="생성자"
|생성자 정보를 기입한다.
|-
| -m, --message="코멘트"
|코멘트를 단다.
|-
|
|
|}
|}
<code>docker images</code>로 확인한다.


예시) docker commit -a "id8436" -m "JHwiki" 94b5dde4a907 id8436/jhwiki
|docker commit 옵션 컨테이너 이미지:태그
이미지, 태그는 소문자로만 가능하다.
|-
|도커허브에 올리기
|docker login 을 입력하면 ID, PW를 입력하게 된다.


<code>docker push 계정/이미지이름</code>을 입력하면 도커허브에 올라간다.
=에러=
|
|}
{| class="wikitable"
!과정
!설명
!방법
|-
|호스트에서 컨테이너로
|호스트의 파일을 컨테이너로 옮긴다.
|docker cp 호스트경로 컨테이너:컨테이너경로
|-
|컨테이너에서 호스트로
|컨테이너의 파일을 호스트로 옮긴다.
|docker cp 컨테이너:컨테이너경로 호스트경로
|}<br />
==저장공간 사용==
{| class="wikitable"
!과정
!설명
!방법
|-
|이미지 올리기
|레지스트리 서버에 이미지를 올린다.
192.000.000.000:포트번호 형태로 개인저장소에 올라간 이미지를 받아올 수도 있다.
|docker push
|-
|이미지 받기
|서버에서 이미지를 받는다.
localhost:포트번호 형식으로 개인저장소에 올릴 수도 있다.
|docker pull 레지스트리URL/이미지:태그
|}


==컨테이너에 접속하기==
===docker: Error response from daemon: Get "<nowiki>https://registry-1.docker.io/v2/</nowiki>": dial tcp: lookup registry-1.docker.io: Temporary failure in name resolution.===
컨테이너 내부로 접속한다.
sudo vi /etc/resolv.conf를 통해 <code>nameserver 8.8.8.8</code>을 등록한다.(구글 DNS를 등록.)


docker exec -it 컨테이너명 /bin/bash
=주석=
[[분류:도커]]
[[분류:도커]]
<references />
<references />

2024년 3월 14일 (목) 15:53 기준 최신판

  1. 틀:Docker


  1. Docker
  2. 도커:설치
  3. 사용법
    1. 도커:이미지 관련
    2. 도커:컨테이너 관련

개요[편집 | 원본 편집]

반가상화 기술.

기본 사용[편집 | 원본 편집]

기본설정[편집 | 원본 편집]

과정 설명 방법
도커파일 저장경로 확인 공간이 넉넉한 파티션에 저장하는 편이 옳다.
부팅 시 컨테이너 자동실행 docker update --restart=always <container-id>
부팅 시 컨테이너 자동실행 서버가 꺼졌다 다시 시작될 때 컨테이너가 자동 시작되게끔. rc.local 안에 다음의 내용을 담아준다.
#!/bin/bash

docker start $(docker ps -a -q)  # 모든 컨테이너 실행.
다른 방법
과정 설명
systemd 서비스 파일 생성 아래 예시처럼 system 디렉토리 안에 .service 파일을 생성한다.

sudo vim /etc/systemd/system/mydocker.service

내용 작성
[Unit]
Description=My Docker Container
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker start -a 컨테이너이름
ExecStop=/usr/bin/docker stop -t 2 컨테이너이름

[Install]
WantedBy=multi-user.target
vi /etc/rc.local

chmod 755 /etc/rc.local

systemctl enable rc-local.service

systemctl start rc-local.service


에러[편집 | 원본 편집]

docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp: lookup registry-1.docker.io: Temporary failure in name resolution.[편집 | 원본 편집]

sudo vi /etc/resolv.conf를 통해 nameserver 8.8.8.8을 등록한다.(구글 DNS를 등록.)

주석[편집 | 원본 편집]