도커:컨테이너 관련
개요
컨테이너 사용과 관련된 기초적인 지식.
기초 사용
생성
- 기본적으로
docker run 옵션 이미지이름:태그
형태로 컨테이너를 생성한다. - 로컬에 이미지가 없으면 자동으로 이미지를 받아온다.
옵션은 아래와 같은 것들이 있다. 가능하면 옵션들은 이미지 이름 앞에 두는 편이 좋다.
옵션 | 설명 |
---|---|
-v 호스트경로:컨테이너경로 | 호스트의 파일을 컨테이너에 연결한다.(-v옵션 여러 개 사용 가능) |
--expose 포트번호 | 다른 컨테이너에서 접속할 수 있는 포트번호를 설정한다. |
--link 컨테이너:별칭 | 컨테이너를 다른 컨테이너와 연결해서 실행한다.(연결할 것이 실행되어 있어야 함)
호스트파일에 IP주소가 설정되어 별칭으로 접속할 수 있다. /별칭:포트번호/연결한컨테이너하위디렉터리 (포트번호는 docker ps로 확인 가능) |
-p 호스트포트:컨테이너포트 | 포트를 연결한다. |
-d | 데몬으로 실행(백그라운드에서 실행) |
--privileged
|
모든 기능을 사용할 수 있게끔, 권한을 부여한다는 의미.
IP주소 등 네트워크 설정을 만질 수 있다.
|
-e | 환경변수 설정. 보통 다음과 같이 UTF-8로 인코딩함을 알려주기 위해 사용.
-e LANG=ko_KR.UTF-8 |
--restart=always | docker를 재시작 해도 자동으로 구동하라는 옵션. |
이외 사용
의도 | 설명 | 방법 |
---|---|---|
재실행 | 이미 만들어진 컨테이너가 종료되었을 때 다시 실행한다. | docker start 컨테이너 |
종료 | 도커를 재시작 할 때 도커 내부에서 서비스도 함께 종료된다.
systemctl apache2 start, service start mysql와 같은 명령으로 서비스를 실행해주어야 한다. |
docker stop 컨테이너 |
현재 실행 컨테이너 확인 | -a 옵션을 붙이면 종료된 컨테이너도 볼 수 있다. | docker ps |
컨테이너 내부로 접속 | docker exec -it 컨테이너명 /bin/bash | |
컨테이너 삭제 | docker rm 컨테이너 |
파일 관련
본 서버와 파일을 교환하는 등의 작업이 필요하다.
의도 | 설명 | 방법 |
---|---|---|
호스트에서 컨테이너로 | 호스트의 파일을 컨테이너로 옮긴다. | docker cp 호스트경로 컨테이너:컨테이너경로 |
컨테이너에서 호스트로 | 컨테이너의 파일을 호스트로 옮긴다. | docker cp 컨테이너:컨테이너경로 호스트경로
ex) docker cp hello:/etc/file.conf ./ # 현재경로로 컨테이너의 파일을 꺼낸다. |
변경파일 확인 | 컨테이너가 실행되며 변경된 파일목록 출력.
기준은 컨테이너를 생성한 이미지 기준. A: 추가된 파일 C: 변경된 파일 D: 삭제된 파일 |
docker diff 컨테이너 |
컨테이너 옵션 변경
컨테이너가 실행되고 있는 상황에서 옵션을 변경할 수 없다. 굳이 컨테이너를 이미지화 했다가 다시 옵션을 주어 실행해야 한다.
컨테이너를 이미지화
보통 컨테이너를 돌리고 있는데 여기에 포트를 추가하거나 볼륨을 추가하고 싶을 때 거쳐야 한다.
과정 | 설명 | 방법 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
이미지로 저장 | 변경사항을 이미지로 생성한다.
docker images 로 확인한다.
예시) docker commit -a "id8436" -m "JHwiki" 94b5dde4a907 id8436/jhwiki |
docker commit 옵션 컨테이너 이미지:태그
이미지, 태그는 소문자로만 가능하다. |
포트, 볼륨 추가하기
기존 사용중인 컨테이너에 포트, 볼륨, 옵션을 변경하려면 새로 만드는 방법밖에 없다.(이부분은 굉장히 아쉽다;;)
- 컨테이너를 이미지로 만든다.(방법은 위 참조)
- 기존 컨테이너를 지운다.
- 필요한 포트, 볼륨옵션을 주어 다시 실행.