-
Notifications
You must be signed in to change notification settings - Fork 0
Docker
jaeseok.an edited this page Jun 20, 2024
·
16 revisions
* 이미지 빌드
docker image build . -t myflask
* container bash 실행
docker run -it myflask:latest sh
* container daemon 으로 실행
docker run -D -p 5000:5000 -e PORT=5000 myflask:latest
- CMD
- container시작시 수행 명령
- docker file당 1개
- 시작시 override 가능
- ENTRYPOINT
- container시작시
- override불가 . 즉 변경없이 무조건 실행되어야 할 내용.
- run image arg 로 argument받을수 있음
- CMD vs ENTRYPOINT
- runtime에 override될 default argument가 있다면 CMD 좋음
- excutable을 실행하거나, 매번 변경없이 실행하고자 하면 ENTRYPOINT가 좋음
- WORKDIR
- cd와 같음
- COPY/ADD
- ADD는 tar를 풀어서 올림
Docker file 에서 $환경변수 로 사용
ex) CMD exec gunicorn --bind :$PORT manager:app --timeout 3600 --pythonpath='/' --workers 2
- Containers
- Use docker container my_command
create — Create a container from an image. start — Start an existing container. run — Create a new container and start it. ls — List running containers. inspect — See lots of info about a container. logs — Print logs. stop — Gracefully stop running container. kill —Stop main process in container abruptly. rm— Delete a stopped container.
- Images
- Use docker image my_command
build — Build an image. push — Push an image to a remote registry. ls — List images. history — See intermediate image info. inspect — See lots of info about an image, including the layers. rm — Delete an image.
- Misc
docker version — List info about your Docker Client and Server versions. docker login — Log in to a Docker registry. docker system prune — Delete all unused containers, unused networks, and dangling images.
- image size
- docker image ls
- 이전 stage의 결과만 재사용
- COPY --from=
FROM golang:1.7.3 AS build
WORKDIR /go/src/github.com/alexellis/href-counter/
RUN go get -d -v golang.org/x/net/html
COPY app.go .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=build /go/src/github.com/alexellis/href-counter/app .
CMD ["./app"]
- 되도록 RUN에서 여러 command 실행. 각 run마다 layer가 생성되기 때문
RUN apt-get update && apt-get install -y \
package-one \
package-two
&& rm -rf /var/lib/apt/lists/*
docker cp foo.txt mycontainer:/foo.txt
docker cp mycontainer:/foo.txt .
- 이미지를 파일로 생성하고 이후 파일에서 이미지를 로딩
- http://pyrasis.com/book/DockerForTheReallyImpatient/Chapter20/29
$ sudo docker save -o nginx.tar nginx:latest
$ sudo docker save -o redis.tar redis:latest
$ sudo docker save ubuntu:14.04 > ubuntu14.04.tar
$ sudo docker save ubuntu > ubuntu.tar
$ sudo docker load < ubuntu.tar
$ sudo docker images
- bridge 네트워크
- host 네트워크
Opening 2375 port for dockerd in Mac
by Yoonjae ParkFebruary 29, 2020 ~1 min read
Mac Mini에 Docker Desktop을 설치했고, windows 컴의 pycharm에서 tcp로 연결해서 쓰려고 했는데, Mac용 Docker Desktop에는 TCP 소켓여는 옵션이 없다는 것을 깨달았다.
일단 brew도 안깔았었기 때문에 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 로 brew 부터 설치하고
brew install socat으로 socat 설치 후
shell script socat TCP-LISTEN:2375,reuseaddr,fork UNIX-CONNECT:/var/run/docker.sock & 으로 2375 TCP 포트로 /var/run/docker.sock를 연결해주었다.
지금 windows 컴의 elastic search configure 파일을 mini의 docker에 mount 해줘야하는데 그걸 어떻게 설정해야할지 알아봐야겠다.
- user defined bridge network사용시 container name으로 naming service 제공
- 관련 명령어
- bridge 환경 보기
- docker network inspect bridge
- Host 환경 보기
- docker network inspect host
- bridge 환경 보기
- docker 실행은 root만 가능. 다른 계정으로 실행하려면 docker 권한 주면 됨
- container 내부에서 기본은 root로 실행. writing한 file도 root로 저장
- 내부 process를 다른 계정으로?
FROM ubuntu:focal RUN apt-get update RUN apt-get install -y git RUN groupadd -g 999 appuser RUN useradd -r -u 999 -g appuser appuser USER appuser
- Shell script로 docker 실행하기
docker run -it myflask:latest sh
- container에서 종료없이 나가기
Ctrl + P + Q
- 실행중인 container에 환경변수 설정 확인하기
docker exec my-nginx env
test