해당 포스팅은 이성미 강사님의 따라 배우는 도커(따배도, https://www.youtube.com/@ttabae-learn)를 보고 공부한 내용을 정리한 블로그입니다.

아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
오늘은 고통스럽다.
내일은 더 고통스럽다.
그리고 내일 모래는 아름다울 것이다.
Mǎ Yún(알리바바 그룹 창업자 겸 회장)

Docker Compose


  • 여러 컨테이너를 일괄적으로 정의하고 실행할 수 있는 툴
    • 하나의 서비스를 운영하기 위해서는 여러개의 애플리케이션이 동작해야함.
    • 컨테이너화 된 애플리케이션들을 통합 관리할 수 있음
    • 옵션을 기존 명령어 형태가 아닌 yaml의 문법에 맞춰서 작성하면 docker compose가 컨테이너 관리

https://docs.docker.com/compose/install/linux/#install-the-plugin-manually

 

Install the Compose plugin

Download and install Docker Compose on Linux with this step-by-step handbook. This plugin can be installed manually or by using a repository.

docs.docker.com

Docker Compose로 컨테이너 실행


몇가지 example:

https://docs.docker.com/guides/workshop/08_using_compose/#use-docker-compose

 

Use Docker Compose

Using Docker Compose for multi-container applications

docs.docker.com

version compose 버전. 버전에따라 지원 문법이 다름

version: “2”
port 컨테이너가 공개하는 포트 나열

web:
  image: httpd:latest
  port:
    - 80
    - 8443:443
services 컴포즈를 이용해서 실행할 컨테이너 옵션 정의.

service:
  webserver:
    image: nginx
  db:
    image: redis
link 다른 컨테이너와 연계할 때 연계할 컨테이너 지정.

webserver:
  image: wordpress:latest
  link:
    db: mysql
build 컨테이너 빌드

webapp:
  build: .
expose 포트를 링크로 연계된 컨테이너에게만 공개할 포트

webapp:
  build: .
image compose를 통해 실행할 이미지를 지정.

webapp:
  image:
    centos:7
volumes 컨테이너에 볼륨을 마운트

webapp:
  image: httpd
  volumes:
    - /var/www/html
command 컨테이너에서 실행될 명령어 지정

app:
  image: node:12-alpine
  command: sh -c “yarn install && yarn run dev”
environment 컨테이너에 적용할 환경변수를 정의

database:
  image: mysql: 5.7
  environment:
    MYSQL_ROOT_PASSWORD: pass
restart 컨테이너가 종료될 때 적용할 restart 정책
no: 재시작 되지 않음
always: 컨테이너를 수동으로 끄기 전까지 항상 재시작
on-failure: 오류가 있을 시에 재시작.

database:
  image: mysql:5.7
  restart: always
depends_on 컨테이너 간의 종속성을 정의.
정의한 컨테이너가 먼저 동작되어야 함.

services:
  web:
    image: wordpress:latest
  depends_on:
    - db
  db:
    image: mysql

1. 서비스 디렉토리 설정

mkdir webserver
cd webserver

2. docker-compose.yml 생성

cat > docker-compose.yml
version: "3"
services:
  web:
    image: httpd:latest
    ports:
      - "80:80"
    links:
      - mysql:db
    command: apachectl -DFOREGROUND
  mysql:
    image: mysql:latest
    command: mysqld
    environment: MYSQL_ROOT_PASSWORD: pass

3. docker-compose 명령어

docker-compose up -d # 실행시켜줘. (백그라운드로 -d)
docker-compose ps # 현재 디렉토리의 컨테이너 상태 확인
docker-compose scale mysql=2 # MySQL 컨테이너 두개로
docker-compose ps
docker-compose down # 컨테이너 완전히 종료
### 이외에도 많은 명령어가 있음..

빌드에서 운영까지


  1. 서비스 디렉토리 생성
  2. 빌드 파일 생성
  3. yaml 파일 생성
  4. 도커 컴포즈 실행

'CICD > docker' 카테고리의 다른 글

[Docker] Container 간 통신  (2) 2024.06.19
[Docker] Container Storage  (0) 2024.06.18
[Docker] Container 관리  (0) 2024.06.17
[Docker] Container 사용하기  (0) 2024.06.17
[Docker] Container Registry  (0) 2024.06.17
해당 포스팅은 이성미 강사님의 따라 배우는 도커(따배도, https://www.youtube.com/@ttabae-learn)를 보고 공부한 내용을 정리한 블로그입니다.

아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
오늘은 고통스럽다.
내일은 더 고통스럽다.
그리고 내일 모래는 아름다울 것이다.
Mǎ Yún(알리바바 그룹 창업자 겸 회장)

Container Volume


  • 컨테이너 이미지는 read-only(컨테이너로 올리면 수정가능)
  • 컨테이너에 추가되는 데이터들은 별도의 RW 레이어에 저장.
    • RO 와 RW 하나같이 보이게 하는 시스템 ⇒ union file system
  • 컨테이너에 추가되는 이미지는 별도의 레이어에서 생성

Data보존


  • rw(/var/lib/mysql)에 저장. ⇒ 대신에 특정 저장소에 저장하도록.(/dbdate) 호스트의 DB 데이터 영구보존
  • docker run -d --name db
    -v /dbdata:/var/lib/mysql => 디스크에 저장하도록
    -e MYSQL_ALLOW_EMPTY_PASSWORD=pass
    mysql:latest
  • -v <hostpath>:<container mount path>(/var/lib/mysql 내용을 hostpath에 저장)
    -v <hostpath>:<container mount path>:<read write mode>
    -v <container mount path>
    (/var/lib/docker/volume/UUID/_data 디렉토리에 저장)
  • docker run -v /webdata:/webdata -d —name df smlinux/df:latest
    docker run -d -v /webdata:/usr/share/nginx/html:ro -d ubuntu:latest

컨테이너끼리 데이터 공유하기


  • df 명령어: 디스크 사용량을 모니터링할 때 사용

10초마다 디스크 사용량을 index.html에 작성하는 code

cat df.sh

#!/bin/bash
mkdir -p /webdata
while true
do
	df -h / > /webdata/index.html
	sleep 10
done

컨테이너 빌드

# dockerfile
FROM ubuntu:18.04
ADD df.sh /bin/df.sh
RUN chmod +x /bin/df.sh
ENTRYPOINT ["/bin/df.sh"]

도커 실행

docker run -d -v /webdata:/webdata —name df smlinux/df:latest

'CICD > docker' 카테고리의 다른 글

[Docker] 빌드에서 운영까지  (0) 2024.06.19
[Docker] Container 간 통신  (2) 2024.06.19
[Docker] Container 관리  (0) 2024.06.17
[Docker] Container 사용하기  (0) 2024.06.17
[Docker] Container Registry  (0) 2024.06.17
해당 포스팅은 이성미 강사님의 따라 배우는 도커(따배도, https://www.youtube.com/@ttabae-learn)를 보고 공부한 내용을 정리한 블로그입니다.

아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
오늘은 고통스럽다.
내일은 더 고통스럽다.
그리고 내일 모래는 아름다울 것이다.
Mǎ Yún(알리바바 그룹 창업자 겸 회장)

현재까지 프로세스


Container Image 관리


  • Container Life Cycle에 관한 내용
  • 이미지 검색: docker search [option] <imageName:tag>
  • 이미지 다운로드: docker pull [option] <imageName:tag>
    • <imageName:tag> 이름으로 repository에서 관리.
    • 같은 버전이여도 이름이 다르면 repository에서 따로 저장됨.
    • Image는 imageID로 구분하기에 같은 imageId를 가진 두개의 image가 생성됨.
  • 다운받은 이미지 목록 출력: docker images
  • 다운받은 이미지 상세보기: docker inspect [option] <containerName>
  • 이미지 삭제: docker rmi [option] <imageName:tag>

Container 실행 Life Cycle


  • docker host에 다운받은 이미지를 컨테이너화: docker create [option] <imageName:tag>
    • 기본이 백그라운드에서 동작
    • docker create --name webserver nginx:1.14
  • docker daemon에 컨테이너 실행: docker start [option] <container>
    • create 상태인 컨테이너를 running
    • docker start webserver
  • 컨테이너 생성 및 실행: docker run [option] <imageName:tag>
    • pull -> create -> start를 한번에 실행해주는 명령어.
    • docker run --name webserver -d nginx:1.14
  • 실행중인 컨테이너 확인: docker ps [option]
    • docker ps
  • 실행중인 컨테이너 상세보기: docker inspect [option] <imageName:tag>
    • ip addr, layer, resource 등등을 보여줌
    • docker inspect webserver
  • 동작중인 컨테이너 중지: docker stop [option] <container>
    • docker stop webserver
  • 컨테이너 삭제: docker rm [option] <container>
    • running 중인 컨테이너는 삭제 불가
    • docker rm webserver

Container 확인


  • 컨테이너 동작되는 프로세스 확인: docker top [option] <container>
    • docker top webserver
  • 현재 컨테이너의 Log 정보확인: docker logs [option] <container>
    • docker logs webserver
  • 현재 컨테이너에 추가 명령어 실행: docker exec [option] <container>
    • docker exec webserver /bin/bash
  • foreground로 실행중인 컨테이너에 연결: docker attach [option] <container>
    • docker attach centos

Example


ip 부분은 가렸습니다

 

'CICD > docker' 카테고리의 다른 글

[Docker] Container Storage  (0) 2024.06.18
[Docker] Container 관리  (0) 2024.06.17
[Docker] Container Registry  (0) 2024.06.17
[Docker] Docker Container 만들기  (0) 2024.06.17
[Docker] Container 개념  (0) 2024.06.17

+ Recent posts