Information*/알면도움됨

Docker 사용법

ch4rli3kop 2018. 12. 28. 21:04
반응형

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