docker 명령어 모음
🤷🏻♀️ 사전 준비
- Docker 설치
- Docker Hub https://hub.docker.com/ 에서 계정을 생성합니다.
작업의 순서
작업의 순서는 다음과 같습니다.
- Dockerfile 생성
- 이미지 생성
- Docker Hub에 이미지 업로드
- 실행할 서버에 이미지 다운로드
- Docker 컨테이너 생성
- Docker 컨테이너 실행
🤷🏻♀️ Docker 이미지 생성
Dockerfile 생성
DockerFile .NET Core 애플리케이션 버전 (예시)
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY ["amsomad.csproj", "./"]
RUN dotnet restore "./amsomad.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "amsomad.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "amsomad.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "amsomad.dll"]
DockerFile .NET Core 애플리케이션 Windows 버전(예시)
FROM mcr.microsoft.com/dotnet/aspnet:7.0-windowsservercore-ltsc2019 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:7.0-windowsservercore-ltsc2019 AS build
WORKDIR /src
COPY ["amsomad.csproj", "./"]
RUN dotnet restore "./amsomad.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "amsomad.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "amsomad.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "amsomad.dll"]
Docker Build
docker build -t [이미지 이름]:[태그] [Dockerfile 경로]
ex) docker build -t amsomad:latest .
Docker 이미지 확인
이미지 목록 확인
docker images ls
이미지 상세 정보 확인
docker images inspect [이미지 이름]:[태그]
ex) docker images inspect amsomad:latest
Docker 이미지 삭제
docker images rm [이미지 이름]:[태그]
ex) docker images rm amsomad:latest
Docker 이미지 태그 변경
docker images tag [이미지 이름]:[태그] [새로운 태그]
ex) docker images tag amsomad:latest amsomad:1.0.0
Docker 컨테이너 생성
Docker 컨테이너 생성
docker run -d -p [호스트 포트]:[컨테이너 포트] --name [컨테이너 이름] [이미지 이름]:[태그]
ex) docker run -d -p 80:80 --name amsomad amsomad:latest
Docker 컨테이너 목록 확인
docker ps -a
Docker 컨테이너 상세 정보 확인
docker ps inspect [컨테이너 이름]
ex) docker ps inspect amsomad
Docker 컨테이너 삭제
docker ps rm [컨테이너 이름]
ex) docker ps rm amsomad
Docker 컨테이너 시작
docker ps start [컨테이너 이름]
ex) docker ps start amsomad
Docker 컨테이너 중지
docker ps stop [컨테이너 이름]
ex) docker ps stop amsomad
Docker 컨테이너 재시작
docker ps restart [컨테이너 이름]
ex) docker ps restart amsomad
🤷🏻♀️ Docker hub 업로드
docker login
docker login
ex) docker login -u amsomad -p 1234
혹은
docker login -> ID 입력 -> PW 입력
Docker hub 저장소 생성
docker hub 에서 이미지를 업로드할 저장소 만든다.
(이미지를 업로드할 저장소를 만들지 않으면 에러가 발생한다.)
에러 메시지 “denied: requested access to the resource is denied”
docker tag [이미지 이름]:[태그] [Docker Hub 계정 이름]/[저장소 이름]:[태그]
ex) docker tag amsomad:latest amsomad/amsomad:latest
이미지를 Docker Hub에 업로드한다.
docker push [Docker Hub 계정 이름]/[저장소 이름]:[태그]
ex) docker push amsomad/amsomad:latest
🤷🏻♀️ Docker hub 다운로드
- 로그인을 하지 않으면 다운로드가 안된다.
- 사전작업으로 Docker hub에 이미지를 업로드해야한다.
ex) 다른 서버 혹은 PC에서 실행을 할 경우 등등
Docker hub 저장소에서 이미지 다운로드
docker pull [Docker Hub 계정 이름]/[저장소 이름]:[태그]
ex) docker pull amsomad/amsomad:latest
🤷🏻♀️ Docker Run 실행
Docker Run 실행
docker run -d -p [호스트 포트]:[컨테이너 포트] --name [컨테이너 이름] [Docker Hub 계정 이름]/[저장소 이름]:[태그]
ex) docker run -d -p 80:80 --name amsomad amsomad/amsomad:latest
# -d : 백그라운드로 실행
# -p : 호스트 포트와 컨테이너 포트를 연결
# docker images를 다운받았다면 이미지 이름과 태그를 입력하면 된다.
# ex) images repository - amsomad/grpcservice:latest 인경우
docker run -d -p 80:80 --name amsomad amsomad/grpcservice:latest
만약 Port가 80이 아닌 다른 포트
docker run -d -p [호스트 포트]:[컨테이너 포트] --name [컨테이너 이름] [Docker Hub 계정 이름]/[저장소 이름]:[태그]
ex) docker run -d -p 7015:7015 --name amsomad amsomad/amsomad:latest
Port가 2개인 경우
docker run -d -p [호스트 포트]:[컨테이너 포트] -p [호스트 포트]:[컨테이너 포트] --name [컨테이너 이름] [Docker Hub 계정 이름]/[저장소 이름]:[태그]
ex) docker run -d -p 7015:7015 -p 7016:7016 --name amsomad amsomad/amsomad:latest
Port가 80이 아닌 다른 포트(ex 7015, 7016)를 사용하고 싶다면
Dockerfile에 EXPOSE 7015, EXPOSE 7016를 추가해준다.
그리고 Docker Run 실행시에 -p 7015:7015, -p 7016:7016를 추가해준다.
Docker Run 실행시 환경변수 추가
docker run -d -p [호스트 포트]:[컨테이너 포트] --name [컨테이너 이름] -e [환경변수 이름]=[환경변수 값] [Docker Hub 계정 이름]/[저장소 이름]:[태그]
ex) docker run -d -p 80:80 --name amsomad -e NODE_ENV=production amsomad/amsomad:latest
Docker Run 실행시 볼륨 추가
docker run -d -p [호스트 포트]:[컨테이너 포트] --name [컨테이너 이름] -v [호스트 볼륨]:[컨테이너 볼륨] [Docker Hub 계정 이름]/[저장소 이름]:[태그]
ex) docker run -d -p 80:80 --name amsomad -v /home/amsomad/amsomad:/home/amsomad/amsomad amsomad/amsomad:latest
Docker Run 실행시 볼륨 추가(읽기 전용, 볼륨이 없으면 생성, 볼륨의 소유권을 호스트와 동일하게)
docker run -d -p [호스트 포트]:[컨테이너 포트] --name [컨테이너 이름] -v [호스트 볼륨]:[컨테이너 볼륨]:ro [Docker Hub 계정 이름]/[저장소 이름]:[태그]
ex) docker run -d -p 80:80 --name amsomad -v /home/amsomad/amsomad:/home/amsomad/amsomad:ro amsomad/amsomad:latest
Docker Run Https
docker run -d -p [호스트 포트]:[컨테이너 포트] --name [컨테이너 이름] -v [호스트 볼륨]:[컨테이너 볼륨] [Docker Hub 계정 이름]/[저장소 이름]:[태그]
ex) docker run -d -p 443:443 --name amsomad -v /home/amsomad/amsomad:/home/amsomad/amsomad amsomad/amsomad:latest
만약에 Program.cs와 같은 위치에 server.pem이 있을경우
Dockerfile에 COPY server.pem /home/amsomad/amsomad/server.pem를 추가해준다.
그리고 Docker Run 실행시에 -v /home/amsomad/amsomad/server.pem:/home/amsomad/amsomad/server.pem를 추가해준다.
🤷🏻♀️ Docker 환경변수에 대해서
Dockerfile에 ENV [환경변수 이름]=[환경변수 값]을 추가해준다.
Docker Run 실행시에 -e [환경변수 이름]=[환경변수 값]을 추가해준다.
ex) 패스워드를 환경변수로 설정하고 싶다면
Dockerfile에 ENV DB_PASSWORD=1234를 추가해준다.
ex) Database URL을 환경변수로 설정하고 싶다면
Dockerfile에 ENV DB_URL=mongodb://localhost:27017/amsomad를 추가해준다.
Db별 환경변수 설정
docker run -d -p [호스트 포트]:[컨테이너 포트] --name [컨테이너 이름] -e [환경변수 이름]=[환경변수 값] [Docker Hub 계정 이름]/[저장소 이름]:[태그]
ex) Database 환경변수 설정(mongodb)
docker run -d -p 80:80 --name amsomad -e DB_URL=mongodb://localhost:27017/amsomad amsomad/amsomad:latest
ex) Database 환경변수 설정(mysql)
docker run -d -p 80:80 --name amsomad -e DB_URL=mysql://localhost:3306/amsomad amsomad/amsomad:latest
ex) Database 환경변수 설정(postgresql)
docker run -d -p 80:80 --name amsomad -e DB_URL=postgresql://localhost:5432/amsomad amsomad/amsomad:latest
ex) Database 환경변수 설정(mssql)
docker run -d -p 80:80 --name amsomad -e DB_URL=mssql://localhost:1433/amsomad amsomad/amsomad:latest
ex) Database 환경변수 설정(redis)
docker run -d -p 80:80 --name amsomad -e DB_URL=redis://localhost:6379/amsomad amsomad/amsomad:latest
ex) Database 환경변수 설정(oracle)
docker run -d -p 80:80 --name amsomad -e DB_URL=oracle://localhost:1521/amsomad amsomad/amsomad:latest
ex) Database 환경변수 설정(sqlite)
docker run -d -p 80:80 --name amsomad -e DB_URL=sqlite://localhost:3306/amsomad amsomad/amsomad:latest
Dockerfile에 환경변수 추가
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY ["amsomad.csproj", "./"]
RUN dotnet restore "./amsomad.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "amsomad.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "amsomad.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
환경변수 추가
ENV DB_URL="your_db_url_here"
DB_USERNAME="your_db_username_here"
DB_PASSWORD="your_db_password_here"
ENTRYPOINT ["dotnet", "amsomad.dll"]
Docker Run 실행시 환경변수 추가
port는 7015, 7016을 사용하고 있다.
docker run -d -p 7015:7015 -p 7016:7016 --name amsomad -e DB_URL="your_db_url_here" -e DB_USERNAME="your_db_username_here" -e DB_PASSWORD="your_db_password_here" amsomad/amsomad:latest
🤷🏻♀️ Docker 실행 상태 조회
docker ps
🤷🏻♀️ Docker 실행 중인 컨테이너 종료
docker stop [컨테이너 이름]
🤷🏻♀️ Docker 컨테이너 삭제
docker rm [컨테이너 이름]
Note: 만들고나니 내것이 아니었다.
Leave a comment