Docker 정리
도커 기초 명령어
# 아래 명령어는 docker hub에서# repo 이름을 찾아서 가져온다.docker pull repo:tag#하단 명령어로 현재 다운받아져있는 이미지들을 볼 수 있다.docker images# 도커실행법docker run -i -t --name myredis -d redis
-i = interactive
-t = tty
-d = run as background
상단에서 redis는 클래스 같은 내용이며 myredis는 인스턴스와 비슷한 개념으로 도커에서는 컨테이너라 부른다.
#실행중인 컨테이너 리스트docker ps#정지된 컨테이너 리스트도 추력docker ps -a#컨테이너 멈추기docker stop 컨테이너아이디or컨테이너명
bash로 접속
docker exec -it <container name or id> /bin/bash
컨테이너 삭제
docker rm <container name>docker rmi <image name>:<tag>
정리
도커 이미지는 클래스처럼 설계도와 같은 역활을한다
docker start container-name 으로 해당 이미지 토대의 컨테이너를 만들어내고 docker logs -ft container-name으로 로그도 확인할 수 있다.
도커 메모리
docker run -ti --c 1024 ubuntu:10.04 /bin/bashdocker run -ti --c 512 dabian:5.55 /bin/bash
위처럼 하면 컨테이너1의 메모리 가중치가 1024
컨테이너2가 512가 된다. 그러면 컨테이너1은
1024/1536만큼의 메모리를 그리고 컨테이너2는 512/1535
만큼의 가중치를 갖는다.
스왑 메모리
#메모리 설정 별도의 스왑설정이 없으면 스왑도 300mdocker run -ti -m 300M ubuntu:16.04 /bin/bashdocker run -ti -m 300M --memory-swap 1G ubuntu:16.04 /bin/bash
docker deep drive
docker kill $(docker ps -q)
모든 컨테이너를 종료한다. 인자값을 받아 넣는식이 가능
docker rm $(docker ps -a -q)
정지된 것을 포함 모든 컨테이너 삭제
#1주 이상된 컨테이너 삭제docker ps -a | grep 'weeks ago'| awk '{print $1}'|xargs docker rm#정지컨테이너 삭제docker rm -v $(docker ps -a -q -f status=exited)#불피요한 이미지 제거docker rmi $(docker images -q -f dangling=true)#불필요 볼륨 제거docker volume rm $(docker volume ls -q dangling=true)
파일시스템을 통한 도커
#imagedocker load < my_iamge.tar.gzdocker save my_iamge:my_tag > my_image.tar.gz#containercat my_container.tar.gz | docker import - my_image:my_tagdocker export my_container > my_container.tar.gz
모니터링
docker stats <containers>docker stats $(docker ps -q)#ubuntu image 찾기docker ps -a -f ancestor=ubuntu
이미지 빌드
docker commit 명령어
dockerfile -> docker build 명령어
도커 변동사항을 이미지로 만들고싶다면
docker commmit -m="message" --autor="authorname" containerId dockerhubId/repo:tag
도에 .dockerignore를 만들어 gitignore같이 커밋하지 않을 파일을 설정할 수 있다.
Dockerfile
첫줄부터 차례로 실행되며 한라인이 실행될때마다
이미지에 레이어가 추가된다. 실행중 에러시 에러가 난 곳부터
#사용할 이미지FROM ubuntu:16.10#authorMAINTAINER harry <herryhan2435@gmail.com># Run command를 통해 bash를 실행하게 된다.# Line by Line 실행되며 각 줄마다 라인에 step number가 뜨게 된다.RUN apt-get update && apt-get install -y openssh-serverRUN mkdir /var/run/sshdRUN echo 'root:12341234' | chpasswdRUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config# ssh login fixRUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd#환경변수 설정ENV NOTVISIBLE "in user profile"RUN echo "export VISIBLE=new" >> /etc/profile## 22포트 열어주기EXPOSE 22CMD ["/user/sbin/sshd", "-D"]#ssh 데몬을 -D(데몬)으로 띄워라
history,port,cache
# docker 레이어 히스토리 조회docker build -t "author/repo"#port 열기docker port container 22# docker에 토르 열렸는지 확인하기docker inspect --format '{{ .NetworkSettings.IPAddress }}' test_sshd# --no-cache# 기존 실패지점부터실행이 아닌 전체 다시 실행docker build --no-cache# 포트지정# 22번 포트와 22번 포트를 대응시켜준다# 왼쪽이 호스트포트 오른쪽이 컨테이너 포트docker run -d -p 22:22 --name test harry/repo# 복수의 컨테이너 정지/삭제docker stop test1 test2 test3docker rm test1 test2 test3
환경변수
** ENV
** ENV
FROM ubuntu:16.04ENV foo/barWORKDIR ${foo} #foo = /barADD . $foo # 현재 디렉토리 내용을 bar에 넣는다.COPY \$foo /quux # /bar 내용을 /quux로
CMD
CMD는 컨테이너가 생성될 때 실행된다.
도커파일에는 하나의 CMD가 실행된다.
RUN은 각 명령어 실행될 때 마다 COMMIT 된다.
CMD는 build 시점에는 실행이 되지 않으며 RUN 할때 실행된다.
docker run image -D 명령어
위와같이 D 명령어를 줄경우 기존의 CMD내용을 override하게된다.
WORKDIR
workdir의 경우 -w옵션으로 오버라이딩 가능하다.
VOLUME
호스트와 공유할 디렉토리 설정
# VOLUME Host containerVOLUME /data1 /data2
ADD
add를 통해 파일을 복사하거나 파일을 가져올 수 있다.
ADD hom* /mrdir/ADD hom?.txt /mydir/ADD test dir/ADD http://url.com/foo.zip /dir/boo.zipADD foo.tar.gz /mydir/
url은 인증이 필요하다면 사용을 할 수 없다.
COPY
ADD 와 비슷하지만 압축해제와 같은 기능 그리고 외부에서 다운로드 하는 기능이 없다.
context 외부 디렉토리를 참조할 수 없다.
docker-compose
다수의 docker iamge를 제어할 수 있다.
$ docker-compose up #실행$ docker-compose stop # 정지$ docker-compose ps #check
docker-compose 리스트
인자 | 설명 |
---|---|
image | 사용할 이미지 |
env_file | ghksrudqustn vkdlf |
dockerfile | 사용할 dockerfile |
command | 기본 커맨드의 새로운 값을 override 한다 |
port | 사용포트 |
links | 연결할 다른 컨테이너 |
dns | 컨테이너 dns 주소 |
wordpress example
#docker-compose.ymlversion:'2'sevvices:wordpress:image:wordpressports:-8080:80 #host:containerenviroment:WORDPRESS_DB_PASSEORD:1234mysql:image:mariadbenviroment:MYSQL_ROOT_PASSWORD:1234
위 파일을 만들어 준 후
docker-compose up