반응형
Docker
설치
$ curl -sL https://get.docker.com/ | sh
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update
$ apt-cache policy docker-ce
$ sudo apt-get install -y docker-ce
$ sudo systemctl status docker
사용
$ sudo docker search ubuntu
$ sudo docker pull ubuntu:latest
$ sudo docker images
$ sudo docker run -it --name ubuntu1 ubuntu /bin/bash
$ sudo docker run -it -p 12350:12351 -v /home/master/home/pwn1/shared/:/home/pwn1 --name pwn1 pwn:1 /bin/bash
$ sudo docker restart ubuntu1
$ sudo docker attach ubuntu1
$ sudo docker ps -a
$ sudo docker exec ubuntu1 echo "hello"
$ sudo docker rm ubuntu1
$ sudo docker rmi ubuntu:latest
Build and Run
$ sudo docker build --tag ubuntu1:latest .
--tag 옵션으로 생성하는 이미지의 이름과 태그를 설정할 수 있음.
마지막은 dockerfile 경로
Dockerfile
$ vim Dockerfile
FROM ubuntu:16.04
RUN apt-get update
RUN apt-get install -y nginx
RUN chown -R user1:user1 /var/lib/nginx
VOLUME ["/data", "/etc/nginx/site-enabled", "/var/log/nginx"]
WORKDIR /etc/nginx
CMD ["nginx"]
EXPOSE 80
EXPOSE 443
/*
* FROM : 어떤 이미지를 기반으로 하여 이미지를 생성할 지 설정하는 부분. <이미지 이름>:<태그> 형식
* MAINTAINER : 만든 사람 정보
* RUN : 쉘 스크립트 나 명령을 실행할 수 있음.
* VOLUME : 호스트와 공유할 디렉터리 목록임. docker inspect -f "{{ .Volumes }}" <컨테이너 이름> 정도를 사용하여 어디와 연결되어있는지 확인할 수 있음.
* CMD : 컨테이너가 시작되었을 때 스크립트와 명령어를 사용할 수 있음.
* WORKDIR : CMD 명령어가 실행될 디렉토리
* EXPOSE : host와 연결할 포트번호
* ENTRYPOINT : 컨테이너가 실행될 때, 해당 명령어나 스크립트를 실행함.
*/
아래는 SniperOJ에서 사용하는 dockerfile임. 참고하면 좋을듯.
# Origin image
# FROM i386/ubuntu:16.04
FROM ubuntu:16.04
# Meta Information
MAINTAINER Wang Yihang "wangyihanger@gmail.com"
# update
RUN apt update
# Setup Server Environment
RUN apt install -y \
make \
gcc \
socat
# add new user if it is needed
RUN useradd -d /home/ctf/ -m -p ctf -s /bin/bash ctf
RUN echo "ctf:ctf" | chpasswd
# Change work directory
WORKDIR /home/ctf
# Setup the vulnerability environment
COPY source .
# Compile binary
RUN make
# Change user
USER ctf
# Entry point
ENTRYPOINT socat tcp-l:8080,fork,reuseaddr exec:./pwn && /bin/bash
root@kuality:/home/master/home/pwn1# docker run -it -p 12350:12351 -v /home/master/home/pwn1/shared/:/home/pwn1 --name pwn1 pwn:1 /bin/bash
-i(interactive) -t(pseudo-tty) 옵션과 뒤의 /bin/bash를 실행시킴으로써 실시간으로 컨테이너의 bash shell을 사용할 수 있음.
-p 12350:12351을 통해, host의 12350 포트와 컨테이너의 12351 포트를 연결시켜줄 수 있음.
-v /home/master/home/pwn1/shared/:/home/pwn1 옵션을 통해, host의 shared 폴더와 컨테이너의 pwn1 폴더를 링크하여 공유 폴더로 만들어줌. 진짜 편함!
history
$ sudo docker history ubuntu1:latest
cp
$ sudo docker cp ubuntu1:/home/. /home/pwn1/pwn1
commit
$ sudo docker commit -a "Foo Bar <ch3rli3kop@gmail.com>" -m "message" ubuntu1 ubuntu:latest
$ sudo docker commit ubuntu1 ubuntu:latest
$ sudo docker images
docker-compose
$ curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
$ docker-compose version
docker-compose에서 사용할 docker-compose.yml 파일 작성 시, 버전을 신경써줘야 하는데, 표를 참고할 수 있음. 자세한 사항은 다음 링크 참고.
Compose file format |
Docker Engine release |
3.7 |
18.06.0+ |
3.6 |
18.02.0+ |
3.5 |
17.12.0+ |
3.4 |
17.09.0+ |
3.3 |
17.06.0+ |
3.2 |
17.04.0+ |
3.1 |
1.13.1+ |
3.0 |
1.13.0+ |
2.4 |
17.12.0+ |
2.3 |
17.06.0+ |
2.2 |
1.13.0+ |
2.1 |
1.12.0+ |
2.0 |
1.10.0+ |
1.0 |
1.9.1.+ |
돌아가고 있는 컨테이너에 attach하기
$ docker exec -it ctfd_ctfd_1 sh
반응형
'Information* > 알면도움됨' 카테고리의 다른 글
Visual Studio Code 환경 세팅 (0) | 2019.02.13 |
---|---|
ctf 대회 서버 docker 세팅 (0) | 2018.12.29 |
CUPS 와 ipp protocol (0) | 2018.11.30 |
Kali linux sources.list repositories 수정 (0) | 2018.11.19 |
pwntools gdb 붙이기 (0) | 2018.10.30 |