728x90
공통프로젝트에서 도커를 적용하려고 공부한 내용을 동욱이가 정리해줬다.
오래된 버전 삭제하기
sudo apt-get remove docker docker-engine docker.io containerd runc
repository 설정하기
sudo apt-get update
sudo apt-get install \\
ca-certificates \\
curl \\
gnupg \\
lsb-release
Docker의 Official GPG Key 등록하기
curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
stable repository를 등록하기
echo \\
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] <https://download.docker.com/linux/ubuntu> \\
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Docker Engine 설치하기
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
버전 확인
docker --version
💡 다른 오라클 서버에서 도커를 설치할 때 발생 했던 오류
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package docker-ce is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
docker-ce-cli:arm64
E: Package 'docker-ce' has no installation candidate
E: Unable to locate package docker-ce-cli
E: Unable to locate package containerd.io
E: Couldn't find any package by glob 'containerd.io'
E: Couldn't find any package by regex 'containerd.io'
해결 방법 참고
Docker, Docker-compose 설치하기 (Ubuntu 18.04)
- 아래와 같은 실행으로 해결
# sudo apt install docker 는 구버전
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
$ curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ sudo add-apt-repository "deb [arch=arm64] <https://download.docker.com/linux/ubuntu> $(lsb_release -cs) stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
# 버전 확인
$ sudo docker version
도커 설치 후 권한 변경 필요할 때(Ubuntu 환경)
sudo chmod 666 /var/run/docker.sock
도커 파일 빌드
docker build -t kdw508/backend .
다른 서버에서 image를 실행하려다 마주친 오류
💡 WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
운영체제마다 플랫폼에 맞게 변경이 필요하다
docker buildx build --platform 옵션
<Ex>
docker buildx build -f Dockerfile.arm --platform linux/arm64/v8 -t anti1346/mongo-arm:5.0.8 .
<내가 적용한 코드>
docker buildx build --platform linux/arm64/v8 -t backend .
참고 url : https://sangchul.kr/316
빌드 후 태그 변경이 필요할 때가 있다.
docker tag backend kdw508/backend
참고 url : https://bcp0109.tistory.com/352 태그 변경
생성된 도커 이미지를 도커 허브에 push
docker login
...
Username:
Password:
...
docker push kdw508/backend:latest
도커 허브에 push 한 image pull
docker pull kdw508/backend:latest
Docker run을 통한 서버 실행
docker run -d -p 8080:8080 kdw508/backend <컨테이너 Id>
Mysql , jdk 이미지 pull하기
docker pull mysql:8.0.29
docker pull openjdk:8-jdk-alpine
💡 “ : “ 뒤 태그에 특정 버전을 써서 원하는 버전을 pull 할 수 있다
참고 url : https://poiemaweb.com/docker-mysql
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=<비밀번호> -d -p 3306:3306 mysql:태그
<EX>
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=root -d -p 3306:3306 mysql:8.0.29
💡 run 시에 주의 할 점!! run 도중 오류가 날 경우 해당 외부 포트를 계속 좀비처럼 잡고 있는 상황이 발생할 수 있다!
MySQL Docker 컨테이너 접속
docker exec -it mysql-container bash
bash > mysql -u root -p 접속
- ssafy 프로젝트용 mysql 설정
create user 'ssafy'@'%' identified by 'ssafy';
create database IF NOT EXISTS `ssafy_web_db` collate utf8mb4_general_ci;
grant all privileges on ssafy_web_db.* to 'ssafy'@'%';
flush privileges;
💡 주의할 점
- spring application properties 에서 db 연결에 대한 변경 필요 localhost -> 서버 ip주소
- ubuntu에서 외부 접속 할 수 있도록 포트 허용해주어야 함.
ubuntu 포트열기
sudo iptables -I INPUT 1 -p tcp --dport 3306 -j ACCEPT
sudo iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT
ubuntu 설정 저장
sudo apt-get install iptables-persistent (최초 1회)
sudo netfilter-persistent save
sudo netfilter-persistent start
ubuntu iptable 재시작
sudo service iptables restart
반응형