공식문서
https://docs.docker.com/reference/
도커 이미지 목록 확인.
$ docker images
도커 허브에서 이미지 다운.
$ docker pull 이미지이름
ex) docker pull httpd
이미지를 컨테이너로 실행
$ docker run 이미지이름
ex) docker run httpd
컨테이너 확인
$ docker ps // 현재 실행중인
$ docker ps -a // 모든 컨테이너 확인 (꺼진 컨테이너도 포함)
컨테이너 생성
$ docker run --name 이름 이미지
ex) docker run --name ws2 httpd
컨테이너 실행
$ docker start 컨테이너 이름
ex) docker stop ws2
실행중인 컨테이너 종료
$ docker stop 이름 or id
ex) docker stop ws2 || docker stop 74db71030d3c
컨테이너 로그 출력
$ docker logs 이름
ex) docker logs ws2
$ docker logs -f 이름 // 로그 지속관찰
ex) docker -f logs ws2
컨테이너 삭제
$ docker rm 컨테이너 이름
ex) docker rm ws2
$ docker rm 컨테이너 이름 --force // 실행중인 컨테이너 삭제
이미지 삭제
$ docker rmi 이미지 이름
ex) docker rmi httpd
도커를 이용하면 웹서버가 컨테이너에 설치된다.
컨테이너가 설치된 운영체제는 도커 호스트.
하나의 도커 호스트에는 여러 컨테이너가 가능하다.
컨테이너와 호스트 둘다 각각 포트와 파일시스템을 따로 가지고 있다. 컨테이너와 호스트 둘다 서로 연결하는 것이 포트 포워딩이다.
도커 포트 포워딩
$ docker run --name 컨테이너이름 -p 호스트 포트 : 컨테이너 포트
ex) docker run --name ws3 -p 8081:80 httpd
실제로 다음 url에서 접속을 확인할 수 있다.
http://localhost:8080/index.html
해당 포트(8080) 컨테이너(ws2)의 로그에서도 확인이 가능하다.
컨테이너 내부에서 명령어 실행하기
$ docker exec 컨테이너이름 실행하려는명령어
ex) docker exec ws3 pwd
컨테이너 내부에서 명령어 지속 실행하기
$ docker exec -it 컨테이너이름 /bin/bash (컨테이너에 따라 bash가 없는 경우엔 sh를 쓸 것)
ex) docker exec -it ws3 /bin/bash
연결끊기
$ exit
찾고자 하는 파일의 위치는 https://hub.docker.com/search?q= 에서 본인이 사용하는 이미지 문서에서 찾을 수 있다.
찾은 위치를 다음과 같이 docker exec로 탐색.
➜ ~ docker exec -it ws3 /bin/bash
root@4ef5346a8af9:/usr/local/apache2# cd /usr/local/apache2/htdocs/
root@4ef5346a8af9:/usr/local/apache2/htdocs# ls -al
total 16
drwxr-xr-x 2 root root 4096 Apr 20 09:50 .
drwxr-xr-x 1 www-data www-data 4096 Apr 20 09:50 ..
-rw-r--r-- 1 504 staff 45 Jun 11 2007 index.html
index.html을 편집하기 위한 'nano'설치
root@4ef5346a8af9:/usr/local/apache2/htdocs# apt update // 최신화
root@4ef5346a8af9:/usr/local/apache2/htdocs# apt install nano // nano 설치
실행 환경은 컨테이너가 담당, 파일 수정은 호스트에서 진행.
docker run -p 호스트포트:컨테이너포트 호스트주소:컨테이너내부의웹페이지주소 이미지이름
docker run -p 8888:80 -v /Users/kimjinkyung/Desktop/docker_httpd/htdocs:/usr/local/apache2/htdocs/ httpd