DevOps/Docker

    [Docker] docker-compose의 docker 네트워크

    이번 포스팅을 쓴 이유로는 docker compose를 사용하면서 생겼던 트러블 슈팅 때문에 이 글을 쓰게 됐다 필자는 docker compose로 was 이미지와 데이터베이스 mongodb 이미지를 사용해서 컨테이너를 띄웠는데 아무 이상 없이 둘이 통신이 가능했다 하지만 개발 환경에서 계속 was의 코드를 변경하고 이미지로 build 해서 또다시 docker compose로 띄운다면 엄청난 시간 낭비일 것이다 그래서 docker-compose.yaml에 was와 관련된 건 주석을 하고 mongodb만 환경변수를 세팅하고 컨테이너로 띄우고 was는 그냥 로컬에서 실행시켜도 사실 둘 사이에 문제없이 통신이 가능할 것이다 여기까지도 문제없었다 통신하는데 문제가 없어서 이제 was를 빌드하고 docker ru..

    [Docker] GitHub Actions으로 docker CI (도커캐시)

    분명 로컬에서 도커를 빌드하고 다시 빌드를 하게 되면 처음 빌드를 했을 때보다 빌드하는 시간이 빠르다... 근데 GitHub Actions을 이용하면서 도커를 빌드하고 몇 번을 빌드해도 도커 캐시가 동작하지 않는다는 걸 알았다... 이번 포스팅에서는 GitHub Actions으로 간단한 express앱을 빌드하고 docker hub push 해보겠다 Express 앱 먼저 아무 폴더에서 $ npm init $ npm install express { "name": "docker-ci-prac", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "node app.js" }, "dependencies": { "ex..

    [Docker] ubuntu에서 docker & docker-compose 설치 방법

    이 글은 aws의 ubuntu 환경에서 진행된다는 점 참고하길 바란다 docker와 docker-compose 설치 방법은 도커 공식 독스에 설명되어있다 docker 설치 1. 기본적인 패키지들을 최신으로 업데이트를 하고 apt가 HTTPS를 통해 리포지토리를 사용하게 해주는 의존성 설치 $ sudo apt-get update && sudo apt-get install -y \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release 2. docker 공식 인증키 추가 $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --yes --dearmor -o /usr/share..

    [Docker] docker 이미지 생성하기

    docker 이미지 Layer 구조 위의 그림에서 왼쪽은 docker image이고 오른쪽은 docker container이다 도커 이미지가 총 3가지 있는 것을 확인할 수 있는데 왼쪽부터 ubuntu, nginx 그리고 web app 이렇게 구성이 되어있다 여기서는 이해가 쉽게 nginx는 ubuntu이미지 기반으로 만들어졌다고 가정하고 web app는 nginx 이미지 기반으로 만들어졌다고 가정을 해보자 ubnutu 이미지를 보면 A, B, C 3가지의 Layer로 구성되어있다 실제로 docker image는 Layer 아키텍처라고 새로운 환경이 계속 쌓이는 구조로 되어있다 그렇기 때문에 nginx 이미지는 ubuntu 기반으로 만들어졌기 때문에 ubuntu Layer가 그대로 있는 상태에서 ngin..

    [Docker] docker 로그 확인하기

    로그 확인하기 $ docker logs [OPTIONS] CONTAINER 기본 명령어인 docker logs 이미지 ID를 하면 그냥 출력이 된다 이번에는 --tail 옵션을 사용해보겠다 $ docker logs --tail 5 2e --tail 옵션을 사용해서 5개의 로그만 출력하게했다. 이번에는 로그를 실시간으로 출력해보자 $ docker logs -f 2e 위의 터미널 처럼 계속 로그가 실행되는 걸 확인할 수 있다 그다음은 타임스탬프 기능이다 $ docker logs -f -t 2e 각각의 로그행이 어떻게 찍혔는지 확인할 수 있다. 호스트 운영체제의 로그 저장 경로 이 경우는 log driver를 json-file로 했을 때만 유효하다 $ cat /var/lib/docker/containers/$..

    [Docker] docker 볼륨 컨트롤하기

    도커 볼륨이란 컨테이너의 특정 폴더를, 호스트 시스템(OS)에 연결해, 컨테이너가 삭제되더라도, 데이터를 유지할 수 있도록 하는 것( docker가 자동으로 host 경로 설정 ) 1. 호스트 볼륨 호스트의 디렉토리를 컨테이너의 특정 경로에 마운트 한다. $ docker run -ti -d -v $(pwd)/test.txt:/home/ubuntu/test.txt ubuntu 위의 명령어로는 pwd로 현제 경로에 있는 test.txt 파일을 실행할 ubuntu 컨테이너의 /home/ubuntu/ 경로에 마운트를 하겠다는 의미이다. 2. 볼륨 마운트 특정 컨테이너의 볼륨 마운트를 공유할 수 있다. $ docker run \ -d \ -it \ -v $(pwd)/html:/usr/share/nginx/html..

    [Docker] docker run 주요 옵션

    docker를 사용한다면 알 수밖에 없는 명령어는 docker run 명령어일 것이다. 많은 옵션들이 있지만 주요 옵션만 다뤄보도록 하겠다. docker run docker run 기본 포맷에서 이미지는 필수이고 이미지 ID나 repository:tag를 사용할 수 있다 $ docker run [OPTIONS] IMAGE [COMMAND] [ARG...] -t , -i옵션 -t는 tty(가상 터미널)을 할당. 리눅스에 키보드를 통해 표준 입력(stdin)을 전달할 수 있게 한다. (주로 -it 함께 사용) -i는 컨테이너의 표준 입력(stdin)을 활성화. (주로 -it 함께 사용) -i 옵션과 -t 옵션을 같이 쓰는 경우입니다. docker 컨테이너에 표준 입력(stdin)을 열어두고(-i), 가상 터..