※ 일부 LG 노트북 유저들에겐 안타깝게도, LG 노트북에 내장된 DNA 프로그램과 충돌하여 docker 설치가 어렵다고 한다. 그리고 그건 나다... :)
추후 나홀로 실습을 위한 정리 목적의 글이라 순서 등이 뒤죽박죽 엉망일 수도 있음.
📚 DOCKER
Why Docker?
# 이미지 파일
FROM openjdk:8-jdk-alpine #베이스 이미지 파일
COPY build/libs/demo-0.0.1-SNAPSHOT.jar app.jar #컨테이너 내부로 파일 복사
ENTRYPOINT ["java","-jar","/app.jar"] #컨테이너 생성되면서 실행
# 이미지 생성
docker build -t {이미지명}:{태그} {Dockerfile 파일 위치}
# 컨테이너 생성
docker run --name {컨테이너 이름} -p {호스트 포트}:{컨테이너 포트} -d {이미지명}:{이미지태그}
# 생성된 컨테이너 확인
docker ps
# 컨테이너 정지
docker stop {컨테이너명}
# 정지된 컨테이너 확인
docker stop {컨테이너명}
# 정지된 컨테이너 삭제
docker rm {컨테이너명}
# dockerfile 생성
FROM python:3.8-slim-buster
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . .
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]
# docker 이미지 생성
docker build -t my-flask
# docker 컨테이너 생성
docker run --name flask -p 5000:5000 -d my-flask
docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 -d mysql
# 데이터베이스 설정 추가
spring.datasource.url=jdbc:mysql://localhost:3306/layer
spring.datasource.username=root
spring.datasource.password=1234
spring.jpa.hibernate.ddl-auto=update
# 컨테이너 생성
docker run --name some-springboot -p 8080:8080 -d my-springboot
# 생성 확인
docker ps
# 로그 확인
docker logs -f some-springboot
# 데이터베이스 설정 수정
spring.datasource.url=jdbc:mysql://host.docker.internal:3306/layer
spring.datasource.username=root
spring.datasource.password=1234
spring.jpa.hibernate.ddl-auto=update
docker-compose
란?# docker-compose.yaml 설정 파일 생성
version: "3.9"
services:
some-springboot:
image: my-springboot
ports:
- 8080:8080
networks:
- backend
some-mysql:
image: mysql
volumes:
- /Users/younghokwak/mysql-data:/var/lib/mysql
ports:
- 3306:3306
environment:
- MYSQL_ROOT_PASSWORD=1234
networks:
- backend
networks:
backend:
# application.properties 수정
spring.datasource.url=jdbc:mysql://some-mysql/layer
spring.datasource.username=root
spring.datasource.password=1234
spring.jpa.hibernate.ddl-auto=update
# 실행
docker-compose up -d
# 컨테이너 확인
docker-compose ps
삭제되지 않음
삭제
되며, 컨테이너 재생성 시에도 존재 x# 태깅
docker tag {이미지명}:{태그} {레포지토리 이미지명}
# 로그인
docker login
# 푸쉬
docker push {레포지토리 이미지명}:{태그}
# 도커 설치
sudo apt-get update
sudo apt-get -y install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get install -y docker-ce
sudo usermod -aG docker $USER
# 이미지 pull
docker pull {도커 허브 이미지명}:{태그}
# 컨테이너 실행
docker run --name {컨테이너 이름} -p 5000:5000 -d {이미지 이름}:{태그}
// 소스 추가
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
System.out.println("main");
SpringApplication.run(DemoApplication.class, args);
}
}
# 이미지 업데이트
docker build -t my-springboot .
# 이미지 확인
docker images
# 이미지 업데이트
docker-compose up -d
network namespace
영역이 하나씩 생성되며, 이때 docker0
브릿지에 컨테이너의 인터페이스들이 하나씩 바인딩 되는 구조docker0
에 바인딩 되지 않음💬 Reference
아름답게 나이들게 하소서 | 도커의 2가지 네트워크 모드 (Host vs Bridge)
갓대희의 작은공간 | [Docker (1)]
towards data science | Docker Network
언제나 깔끔한 휘원님표 강의 정리 👍
설치되지 않는 도커에 굴하시지 않고 이렇게 정리 하시다니.. 고생 많으셨습니다🥺