2.1. search #
Docker Hub를 통해 이미지를 검색
$ docker search ubuntu NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Ubuntu is a Debian-based Linux operating sys… 12545 [OK] rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 254 [OK] ...
2.2. pull #
저장소에서 이미지 가져오기
공식 이미지는 사용자명이 붙지 않음.
sudo docker pull ubuntu:latestyhyacinth/ubuntu 처럼 / 앞에 사용자명이 있으면 그 사용자가 올린 이미지를 받음.
공식 이미지는 사용자명이 붙지 않음.
2.7. exec #
이미 실행된 컨테이너 안의 명령을 실행
예) /bin/bash 로 실행되어 있을 때 명령어 실행
예) /bin/bash 로 실행되어 있을 때 명령어 실행
$ docker exec <컨테이너 이름> echo "Hello World" Hello World
3.3. Docker Hub push #
1) tag
docker tag <로컬 이미지 이름:태그> <hub 계정 이름>/<hub 리포지토리 이름:태그> 예) $ docker tag sample-app:latest yhyacinth/sample-app:latest*) 로컬 이미지 확인
$ docker images
2) Docker Hub에 이미지를 push
$ docker push yhyacinth/sample-app:latest*) Docker Hub 로그인
$ docker login
3.5. Docker image run #
docker run -p <포트>:<포트>/<프로토콜(생략시tcp)> <IMAGE ID> 예) $ docker run -p 3000:3000 24e776178046 $ docker run -p 3001:3001/udp 24e776178046
docker run -p 옵션: 호스트와 클라이언트 포트를 매핑
docker run -d 옵션: 백그라운드 모드로 실행
docker run -d 옵션: 백그라운드 모드로 실행
3.6. Docker image stop #
1) docker ps 로 NAMES(실행 중인 컨테이너 이름) 확인
2) stop
docker stop <컨테이너 이름> 예) docker stop adoring_meninsky
4.1. 태그 관리 #
Q: docker push 할 때마다 tag 버전 넘버링을 하는게 좋을까? tag 관리를 어떻게 하는게 좋을까?
ChatGPT:
Docker 이미지를 업데이트할 때마다 새로운 버전을 태그하는 것은 좋은 방법입니다. 이렇게 하면 이미지의 버전별로 관리할 수 있으며, 문제가 발생했을 때 특정 버전으로 돌아갈 수 있습니다.
ChatGPT:
Docker 이미지를 업데이트할 때마다 새로운 버전을 태그하는 것은 좋은 방법입니다. 이렇게 하면 이미지의 버전별로 관리할 수 있으며, 문제가 발생했을 때 특정 버전으로 돌아갈 수 있습니다.
버전 넘버링 방식은 다양합니다. 일반적으로는
major.minor.patch
형식으로 버전을 지정합니다. 이를 통해 어떤 변경이 있었는지 쉽게 파악할 수 있습니다.예를 들어,
v1.0.0
버전에서 v1.1.0
버전으로 업데이트할 때, 새로운 태그 v1.1.0
을 사용하면 됩니다. 만약 v1.0.0
버전에서 작은 수정을 가했을 경우, v1.0.1
버전을 태그할 수 있습니다.태그 관리를 위해서는 규칙을 정하고, 이를 모든 개발자들에게 공유하는 것이 중요합니다. 예를 들어,
v1.x.x
버전은 메이저 버전 변경이 있을 때 사용하고, v1.0.x
버전은 패치 버전 변경이 있을 때 사용하는 등의 규칙을 정할 수 있습니다.또한, Git과 같은 버전 관리 시스템을 사용하여 Docker 이미지 빌드 스크립트와 함께 태그를 관리할 수 있습니다. 이렇게 하면 이미지의 업데이트 이력을 추적하고, 문제가 발생했을 때 이전 버전으로 쉽게 돌아갈 수 있습니다.
Q: 개발 용도로 수시로 업데이트 해야할 땐 넘버링을 어떻게 하는게 좋을까?
ChatGPT:
개발 용도로 수시로 업데이트 해야할 땐 일반적으로
ChatGPT:
개발 용도로 수시로 업데이트 해야할 땐 일반적으로
latest
라는 태그를 사용합니다. 이 태그는 항상 가장 최신 버전의 이미지를 가리키므로, 빠르게 업데이트된 이미지를 사용할 수 있습니다.하지만
latest
태그를 사용할 경우, 이미지 버전을 구분하는 것이 어렵기 때문에 개발, 테스트 및 프로덕션 환경에 따라 다른 태그를 사용하는 것이 좋습니다. 예를 들어, 개발 환경에서는 dev
태그, 테스트 환경에서는 test
태그, 프로덕션 환경에서는 prod
태그와 같이 구분할 수 있습니다.또한, Git의
commit hash
와 같이 고유한 값을 사용하여 이미지 버전을 구분할 수도 있습니다. 이렇게 하면 이미지를 업데이트할 때마다 새로운 고유한 값으로 태그를 지정하므로, 이미지 버전을 구분하는 것이 용이해집니다. 하지만 이 방법은 일반적으로 개발자나 CI/CD 파이프라인에서 자동으로 처리되어야 하므로, 조금 복잡할 수 있습니다.4.2. Windows Server Core에서 IIS 사용 #
(FROM mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019 을 사용하지 않을 경우)
Dockerfile에 추가
# escape=` FROM mcr.microsoft.com/windows/servercore:ltsc2019 RUN powershell -Command ` Add-WindowsFeature Web-Server; ` Invoke-WebRequest -UseBasicParsing -Uri "https://dotnetbinaries.blob.core.windows.net/servicemonitor/2.0.1.6/ServiceMonitor.exe" -OutFile "C:\ServiceMonitor.exe" WORKDIR /inetpub/wwwroot EXPOSE 80 ENTRYPOINT ["C:\\ServiceMonitor.exe", "w3svc"]첫 줄의
# escape=,
는 Dockerfile에서 powershell 인자를 `으로 여러 줄을 표현하기 위해 쓰일 뿐이며 Docker 설정과 관계가 없다.4.5. get bash into a running container in background mode #
1. 실행 중인 container id 확인
docker ps
2. /bin/bash 실행
docker exec -it 665b4a1e17b6 /bin/bash
4.6.1. for windows #
1. Tray 아이콘 Settings
2. Shared Drive 탭 > Shared C: 체크
3. Apply
2. Shared Drive 탭 > Shared C: 체크
3. Apply
적용 후 run 할 때 다음 추가
-v //c/my_folder:/home/test_container
-v //c/Users/user/my_folder:/home/test_container
여러 개를 mount 할 때는 디렉터리마다 -v를 붙여준다.
4.7. docker VM Disk(disk.vmdk) 경로 변경 #
(for mac)
1. stop docker
2. vi /etc/default/docker 편집
경로 수정
1. stop docker
2. vi /etc/default/docker 편집
경로 수정
DOCKER_OPTS="-g /docker/var/lib/docker"
3. start docker
(for windows)
1. %PROGRAMFILES%\Docker Toolbox\start.sh 편집
2. docker-machine.exe 실행 시 -s 옵션을 사용하도록 수정한다.
수정 전
수정 후
1. %PROGRAMFILES%\Docker Toolbox\start.sh 편집
2. docker-machine.exe 실행 시 -s 옵션을 사용하도록 수정한다.
수정 전
DOCKER_MACHINE=./docker-machine.exe
수정 후
DOCKER_MACHINE_FILE=./docker-machine.exe
DOCKER_MACHINE="./docker-machine.exe -s D:/docker/"
수정 전
수정 후
if [ ! -f "${DOCKER_MACHINE}" ]; then
수정 후
if [ ! -f "${DOCKER_MACHINE_FILE}" ]; then
수정 전
수정 후
VM_STATUS="$(${DOCKER_MACHINE} status ${VM} 2>&1)"
수정 후
VM_STATUS="$(${DOCKER_MACHINE_FILE} status ${VM} 2>&1)"
3.
%USERPROFILE%\.docker\machine
폴더들을 설정 변경한 위치로 복사4. docker machine 재시작
cmd> docker-machine stop
cmd> start.sh
(...mac, windows 공통으로 경로 설정 바꾸는 것보다 그냥 심볼릭 링크 만들어도 무방하고 그 편이 더 쉬울 수 있다.)