2022.05.04 docker compose
docker -v
sudo docker images
모든 이미지 출력
sudo docker search [ 이미지이름 ]
docker build ./
하면 되나 혹시 개발 환경 운영환경 Dockerfile
를 나누게 된다면
docker build -f Dockerfile.dev ./
-f 옵션을 넣어줘야한다.
도커 이미지 그냥 생성하면 알수 없는 문자로 생성이 되는데 docker image 이름을 지정할 수 있다.
docker build -f Dockerfile.dev -t ash/nodejs ./
docker pull [이미지이름] : [태그]
sudo docker pull jakdu/django_covid:0.1.0
sudo docker rmi [ 이미지 id ]
docker rmi $(docker images -q)
다양한 프로그램 ( nginx , database , was 등 ) 을 컨테이너 라는 격리된 환경을 이용하여 실행시킬 수 있음
sudo docker ps
sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f8c3c3adf978 jakdu/django_covid:0.1.0 "gunicorn --bind 0.0…" About a minute ago Exited (0) 41 seconds ago django_covid
만들어진 도커 컨테이너를 실행하는 명령어 입니다.
sudo docker run --name '컨테이너명' -d -p 8000:8000 jakdu/project:0.1.0
옵션
docker ps 명령어를 사용하면 실행되고 있는 컨테이너만 목록에 나오게 됩니다.
하지만 옵션 -a 를 붙여준다면 정지되어 있는 컨테이너까지 출력합니다.
sudo docker run [options] image[:TAG|@DIGEST] [COMMAND] [ARG...]
옵션 | 설명 |
---|---|
-d | detached mode 흔히 말하는 백그라운드 모드 |
-p | 호스트와 컨테이너의 포트를 연결 (포워딩) |
-v | 호스트와 컨테이너의 디렉토리를 연결 (마운트) |
-e | 컨테이너 내에서 사용할 환경변수 설정 |
name | 컨테이너 이름 설정 |
--rm | 프로세스 종료시 컨테이너 자동제거 |
--link | 컨테이너 연결 [컨테이너 명:별칭] |
docker run ash/docker-nodejs
docker start 컨테이너 이름
docker start django_covid
start 명령어를 사용하면 멈춰있는 컨테이너를 다시 시작 할 수 있습니다.
docker stop 컨테이너 이름
docker stop django_covid
stop 명령어를 사용하면 실행되고 있는 컨테이너를 다시 시작할 수 있습니다.
sudo docker restart [ 컨테이너 id 또는 name ]
sudo docker attach [ 컨테이너 id 또는 name ]
sudo docker rm [ 컨테이너 id 또는 name ]
모든 컨테이너 삭제
sudo docker rm 'docker ps -a -q'
docker copy 를 이용해서 docker container 에 복사를 해야하지만 ,
docker volume 을 이용하게되면 복사를 하지않고 , local 에 있는것을 매핑하게 된다.
이미지를 다시 빌드하지 않아도 소스코드가 실시간으로 변경 가능하다.
하지만 volume
을 사용하게되면 , 너무 길어지니깐 docker compose
를 사용하는것을 권장한다.
docker volume prune
docker compose
는 다중 컨테이너 도커 애플리케이션을 정의하고 실행하기 위한 도구인데 ,
Docker compose
를 이용하면 compose 파일( yml 파일 )을 준비하여 커맨드를 한번 실행해서 , 그 파일로부터 설정을 읽어들여 모든 컨테이너 서비스를 실행시키는 것이 가능하다.
코드 수정하게되면 다시 이미지를 빌드할 필요없이 코드소스 변경된것이 실시간으로 반영이된다.
https://kimjingo.tistory.com/108
docker-compose.yml
파일이 필요
version: "3"
services:
nodejs:
build:
context: .
dockerfile: Dockerfile.dev
ports:
- "3000:3000"
volumes:
- /usr/src/app/node_modules // 참조하지않겠다.
- ./:/usr/src/app // 참조하겠다.
stdin_open: true
docker compose up
docker compose ps
docker compose ps -a
docker compose start
docker compose stop
뭔가 오타를 났다거나 , 다시 수정하고싶을땐 사용하면된다.
docker compose up --build
docker-compose.yml
부분에 밑에 추가
test:
build:
context: .
dockerfile: Dockerfile.dev
volumes:
- /usr/src/app/node_modules
- ./:/usr/src/app
command: ["npm", "run", "test"]
docker log -f $CONTAINER_ID
개발환경과 달리 운영환경은 build 폴더를 생성해서 build 폴더를 이용하게된다.
FROM node:alpine as builder
WORKDIR '/usr/src/app'
COPY package.json .
RUN npm install
COPY ./ ./
RUN npm run build
# 여기까지는 build 폴더를 생성하기 위한 명령어이다.
# builder stage
FROM nginx
COPY --from=builder /usr/src/app/build /usr/share/nginx/html
# run stage
build 폴더가 생성이 되면 Nginx
를 이용해서
정적파일을 제공하게 된다.
FROM node:alpine as builder
WORKDIR '/usr/src/app'
COPY package.json .
RUN npm install
COPY ./ ./
RUN npm run build
# 여기까지는 build 폴더를 생성하기 위한 명령어이다.
FROM nginx
COPY --from=builder /usr/src/app/build /usr/share/nginx/html
FROM nginx
nginx 를 위한 베이스 이미지
COPY --from=builder /usr/src/app/build
--from=builder
다른 stage에 있는 파일을 복사할때 다른 Stage 이름을 명시
/usr/src/app/build
/usr/share/nginx/html
builder stage 에서 생성된 파일들은 /usr/src/app/build 에 들어가게 되며 그곳에 저장된 파일들을 /usr/share/nginx/html 로 복사를 시켜줘서
nginx 가 웹 브라우저의 http 요청이 올때 마다 알맞은 파일을 전해 줄 수 있게 만든다.
/usr/share/nginx/html
여기로 복사하는 이유는 nginx 가 알아서 Client 에서 요청이 들어올때 알맞은 정적 파일들을 제공해준다.
설정을 통째로 바꿀수도 있다.
docker build .
docker run -p 8080:80 ash/docker-react-app
nginx
는 80 이 기본 port 이다.
.travis.yml
# 관리자 권한 갖기
sudo: required
# 언어를 선택
language: generic
# 도커 환경 구성
services:
- docker
# 스크립트를 실행할 수 있는 환경 구성
before_install:
- echo "start Creating an image with dockerfile"
- docker build -t ash/docker-react-app -f Dockerfile.dev .
# 실행할 스크립트 ( 테스트 실행 )
script:
- docker run -e CI=true ash/docker-react-app npm run test -- -- coverage
# 테스트 성공 후 할일
after_success:
- echo "Test Success"
https://zzsza.github.io/development/2020/06/06/github-action/
https://docs.github.com/en/actions/quickstart
에러가 발생한다면 ??
docker volume rm $(docker volume ls -qf dangling=true)
이 명령어를 입력해준다 공간이 부족해서 그렇다.
What a fantastic article! We can see that you spent a lot of time thinking up and crafting every word. The news will be spread throughout my circle of acquaintances. moto x3m