Docker 2일차

TaeYoon Kim·2024년 2월 20일
0

SW CAMP

목록 보기
27/30

볼륨

데이터 베이스가 모종의 이유로 꺼졌다 커졌다면 데이터가 다 날아간다.

mysql 데이터 저장 경로
/var/lib/mysql

MYSQL_ROOT_PASSWORD

  1. 도커 볼륨
    1) 컨테이너 레이어
    이미지로 컨테이너를 생성하면 이미지는 읽기 전용이 된다.

    	컨테이너 안에서 활용한 변경정보는 컨테이너 레이어 라는 곳에 기록된다.
    	  예) mysql 의 DB 저장 데이터는 컨테이너 레이어 공간에 저장됨
    
    			[  컨테이너 레이어(읽기 쓰기)	  ]
    			[  컨테이너 레이어(읽기 쓰기)	  ]
    			[  이미지 (읽기 전용)	  ]
    
    	하지만 컨테이너 레이어의 데이터는 컨테이너 삭제와 함께 삭제되어 복구 불가능

    2) 볼륨 활용 방법
    컨테이너 데이터를 영구적으로 보관 가능

    (1) 호스트 볼륨 공유
    호스트와 저장장소를 공유

docker run -d \ # -d : 컨테이너를 백그라운드에서 동작하는 어플리케이션으로 실행하도록 합니다.

--name mycent \ # --name : 컨테이너 이름은 mycentos
-v [공유할 폴더 지정]:/[컨테이너 디렉토리] \ # -v : 공유할 디렉토리 설정, -v [호스트 디렉토리]:[컨테이너 디렉토리][이미지] # 이미지는 centos:7

ex) docker run -d --name sharevol -e MYSQL_DATABASE=wordpress -e MYSQL_ROOT_PASSWORD=qwer1234 -v /c/share:/var/lib/mysql mysql:5.7
툴박스인 경우 버추얼 박스에 공유 폴더 설정 후 
	docker run -d --name sharevol -e MYSQL_DATABASE=wordpress -e MYSQL_ROOT_PASSWORD=qwer1234 -v /root/shared:/var/lib/mysql2 mysql:5.7

(2) 볼륨 컨테이너
-v 옵션으로 볼륨을 사용하는 컨테이너를 다른 컨테이너와 공유
컨테이너 생성시 --volumes-from 옵션을 사용하면 -v 옵션이 적용된 컨테이너의 
볼륨 디렉토리를 공유할 수 있다.

docker run -i -t \
--name sharevol2 \ # --name : 컨테이너 이름
--volumes-from sharevol \ # --volumes-from [컨테이너 이름] : -v가 설정된 컨테이너의 볼륨을 같이 공유
centos:7 # 이미지 이름


(3) 도커가 관리하는 볼륨
docker volume 명령어를 이용하여, 도커 자체에서 제공하는 볼륨 기능을 활용해 데이터를 보존 가능

docker volume create --name myvolume	생성

docker volume ls			확인

docker run -i -t --name myvolume \	# --name : 이름을 지정하는 옵션으로, 컨테이너의 이름은 movolume
> -v myvolume:/root/ \			# -v [볼륨의 이름]:[컨테이너의 공유 디렉토리], 볼륨과 컨테이너의 /root/를 공유
> ubuntu:14.04				# 이미지 이름

컨테이너 내에서 파일 생성

docker run -i -t --name myvolume2 \	# --name : 이름을 지정하는 옵션으로, 컨테이너의 이름은 movolume
> -v myvolume:/root/ \			# -v [볼륨의 이름]:[컨테이너의 공유 디렉토리], 볼륨과 컨테이너의 /root/를 공유
> ubuntu:14.04				# 이미지 이름

파일 확인

*stateless vs stateful
  stateless : 컨테이너가 아닌 외부에 데이터를 저장하고 컨테이너는 그 데이터로 동작하도록 설계 방식
  stateful : 컨테이너가 데이터를 저장하는 설계방식
  

VS code에서 자동으로 도커 이미지 생성 및 컨테이너 실행하기

인텔리제이에서 하는 법 아래 문서 읽고 따라하기
https://dmp.fabric8.io/
2. 설치에 있는 예제 pom.xml에코드 추가
5.1 maven build 의 코드를 pom.xml에 추가
execution 수정
plugin - docker - docker:build 실행하면 이미지가 생김.

<plugin>
				<groupId>io.fabric8</groupId>
				<artifactId>docker-maven-plugin</artifactId>
				<version>0.43.4</version>
				<configuration>

					<images>
						<!-- A single's image configuration -->
						<image>
							<name>backend:3.1</name>
							<build>
								<dockerFileDir>${basedir}</dockerFileDir>
							</build>
						</image>

					</images>
				</configuration>
				<executions>
					<execution>
						<id>docker-build</id>
						<phase>package</phase>
						<goals>
							<goal>build</goal>
						</goals>
					</execution>
				</executions>
				<!-- Connect start/stop to pre- and
                  post-integration-test phase, respectively if you want to start
                  your docker containers during integration tests -->
			</plugin>

도커 네트워크

도커 수출하기
도커 허브 접속
repositories 접속
repository 만들기
이미지 만들기

docker build --tag [도커계정이름]/[레포지토리 이름] . //현재 파일에 있는 Dockerfile로 이미지를 만들겠다.

도커 이미지 업로드하기

docker push [도커계정이름]/[레포지토리 이름]

모든 이미지를 허브에 올리면
컴포즈 파일만 있으면 어디서든 실행할 수 있다.

이미지가 다른 이미지를 의존하고 있다면 depends_on를 사용하자.

version: '3'
services:
  frontend:
    image: frontend:2.0
    ports:
      - 7272:80
    depends_on:
      - backend
  backend:
    image: backend:3.1
    environment:
      DB_ADDR: DB
    depends_on:
      - DB
  DB :
    image: mysql
    volumes:
      - DB-vol:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=qwer123

volumes:
  DB-vol:
    external: true

데이터를 insert하는 sql문 파일을 만든다.

0개의 댓글