설치
- brew install —cask docker
- brew install docker로 실행 할 경우 daemon이 떠있지 않다는 이슈다 있어 —cask로 GUI 프로그램까지 설치 후 GUI 프로그램 실행 후 문제 해결
how to install docker on the ubuntu
// Run the following command to uninstall all conflicting packages
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
// Add Docker's official GPG key
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
// Add the repository to Apt sources
echo \\
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] <https://download.docker.com/linux/ubuntu> \\
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \\
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
// Install
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Permission Issue
Solution
- sudo chmod 666 /var/run/docker.sock
명령어
- docker pull “image name”
- docker image ls
- docker run —name “container name” -d -p 80:80 nginx
- nginx 이미지로 컨테이너 만들어서 80포트 을 열어두는 실행 명령어
- docker image rm “image id”
- docker image rm -f “image id”
- docker image rm $(docker images -q)
- 컨테이너에서 사용하고 있지 않은 이미지 모두 삭제
- docker create nginx
- 이미지 있으면 해당 이미지로 생성, 없으면 다운받아서 생성한다.
- container 이름은 랜덤으로 지어진다
- docker ps -a
- docker stop “container id”
-
- docker rm “container id”
- docker run “image name”
- 이미지로 컨테이너를 생성하고 실행시키는 명령어
- 포그라운드에서 실행
- docker run -d nginx
- docker run -d —name “container name” nginx
- 백그라운드로 이름 작성해서 컨테이너 생성 및 실행
- docker run -d —name “container name” -p “host port”:” container port” nginx
- 호스트 포트와 도커 포트 를 연결해서 생성 및 실행
- -p 4000:80 이면 브라우저로 localhost:4000 접속시 도커 컨테이너 80으로 연결됨
- docker kill “container id”
- docker logs “container id”
- docker logs —tail 10 “container id”
- docker logs -f “container id”
- docker logs —tail 0 -f “container id”
- 마지막 줄부터 지금 부터 생성되는 로그만 실시간으로 보는 명령어
- docker exec -it “container id” bash
도커 볼륨
- 도커 이미지로 컨테이너를 생성하고, 새로운 변경된 부분이 있으면 기존 컨테이너를 삭제하고 새로운 컨테이터를 띄우는 방식이 도커 컨테이너 방식이다.
- 데이터 베이스의 경우 데이터가 유지되어야 하는데, 이럴 때 사용하는 것이 볼륨(Volume)이라는 개념이다.
명령어
- docker run -v “호스트 디렉토리 절대경록”:”컨테이너 디렉토리 절대경로” “이미지명”:”태그명”
- lsof -i:”port”
- 특정 포트에 어떤 프로그램이 떠있는지 확인 하는 명령어
이미지 별 사용법
- 이미지 별로 사용 방법은 dockerhub에 적혀있다.
- mysql의 경우 초기 루트 비밀번호를 설정해 주지 않으면 mysql 사용이 불가능하다.
- https://hub.docker.com/_/mysql
- $ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
볼륨 연결
- docker run -e MYSQL_ROOT_PASSWORD=1234 -d -p 3306:3306 -v /Users/jiwonyoon/Documents/Develop/docker-mysql/mysql_data:/var/lib/mysql mysql
- /var/lib/mysql 컨테이너 값을 host 경로 /Users/jiwonyoon/Documents/Develop/docker-mysql/mysql_data 에 세팅하도록 연결
- 컨테이너의 볼륨 값을 호스트 값에 복사해서 동일한 값을 공유해서 사용한다.
DockerFile
FROM
문법
FROM 이미지명
FROM 이미지명:태그명
- 이미지 생성 명령어 docker build -t my-jdk17-server .
- 경로는 Dockerfile이 있는 경로에서 상대 경로로 처리
- docker build -t my-jdk17-server:beta .
- openjdk가 포함된 container를 실행 시키면, 모든 명령어를 완료하고 컨테이너가 종료된다.
- 종료를 막기위한 명령어
- ENTRYPOINT [”/bin/bash”, “-c”, “sleep 500”]
- 500 초 동안 시스템을 일시정지 시키는 명령어
COPY
- 파일 복사(이동)
- 호스트 컴퓨터에 있는 파일을 복사해서 컨테이너로 전달
문법
COPY 호스트파일경로 컨테이너파일경로
- 디렉토리를 복사할떄는
- COPY mydir /mydir/
- 경로 뒤에 / 까지 넣어주어야 한다.
- 특정 확장자만 복사
- 전체 파일 복사
- 복사할 파일 중 무시할 파일이 필요한 경우
- .dockerignore 파일을 만들어서 내부에 값을 지정
- 지정된 파일들은 copy 되지 않는다.
ENTRYPOINT
- 컨테이너 시작할 때 실행되는 명령어
- 컨테이너가 생성되고 최초로 실행할 때 수행되는 명령어
문법
ENTRYPOINT [명령문]
ENTRYPOINT ["node", "dist/main.js"]