#keywords docker, docker tips [[TableOfContents]] == Install & Service Start == https://www.docker.com/get-started == 자주 쓰는 명령어 == === search === [https://registry.hub.docker.com/ Docker Hub]를 통해 이미지를 검색 {{{#!code $ 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] ... }}} === pull === 저장소에서 이미지 가져오기 {{{#!code sudo docker pull ubuntu:latest }}} yhyacinth/ubuntu 처럼 / 앞에 사용자명이 있으면 그 사용자가 올린 이미지를 받음. 공식 이미지는 사용자명이 붙지 않음. === ls === {{{ $ docker images }}} 또는 {{{ $ docker image ls }}} 이미지 목록 확인 === run === 이미지를 컨테이너로 생성한 뒤 컨테이너 실행 {{{#!code $ docker run -i -t --name hello ubuntu /bin/bash }}} === ps === 모든 컨테이너 목록 출력 {{{#!code $ docker ps -a }}} === start === 정지한 컨테이너 실행 {{{#!code $ docker start <컨테이너 이름> }}} === exec === 이미 실행된 컨테이너 안의 명령을 실행 예) /bin/bash 로 실행되어 있을 때 명령어 실행 {{{#!code $ docker exec <컨테이너 이름> echo "Hello World" Hello World }}} === attach === 시작한 컨테이너에 접속 {{{#!code $ docker attach <컨테이너 이름> }}} === stop === 컨테이너 정지 {{{#!code $ docker stop <컨테이너 이름> }}} === restart === 컨테이너 재시작 {{{#!code $ docker restart <컨테이너 이름> }}} === rm === 생성된 컨테이너 삭제 {{{#!code $ docker rm <컨테이너 이름> }}} === rmi === 이미지 삭제 {{{ $ docker rmi <컨테이너 이름>:latest }}} == Quick Start == === Docker Hub push === 1) tag {{{ docker tag <이미지명:태그> / 예) $ docker tag dev-web:0.1 yhyacinth/dev-web }}} 2) push {{{ $ docker push yhyacinth/dev-web }}} Docker Hub에 이미지를 push === Docker Hub pull === {{{ $ docker pull yhyacinth/dev-web }}} === Docker image run === {{{ docker run -p <포트>:<포트> 예) $ docker run -p 3000:3000 24e776178046 }}} docker run -p 옵션: 호스트와 클라이언트 포트를 매핑 docker run -d 옵션: 백그라운드 모드로 실행 === Docker image stop === 1) docker ps 로 NAMES(실행 중인 컨테이너 이름) 확인 2) stop {{{ docker stop <컨테이너 이름> 예) docker stop adoring_meninsky }}} == Tips == === 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"] }}} 첫 줄의 [[code(# escape=,)]]는 Dockerfile에서 powershell 인자를 `으로 여러 줄을 표현하기 위해 쓰일 뿐이며 Docker 설정과 상관이 없다. === Alpine에서 bash 사용 === Dockerfile에 추가 {{{ RUN apk update RUN apk add --no-cache bash }}} === tensorflow 사용 === [[code(docker run -p 8888:8888 -p 6006:6006 -it tensorflow/tensorflow)]] === get bash into a running container in background mode === 1. 실행 중인 container id 확인 [[code(docker ps)]] 2. /bin/bash 실행 [[code(docker exec -it 665b4a1e17b6 /bin/bash)]] === mount directory === ==== for windows ==== 1. Tray 아이콘 Settings 2. Shared Drive 탭 > Shared C: 체크 3. Apply 적용 후 run 할 때 다음 추가 [[code(-v //c/my_folder:/home/test_container)]] [[code(-v //c/Users/user/my_folder:/home/test_container)]] 여러 개를 mount 할 때는 디렉터리마다 -v를 붙여준다. === docker VM Disk(disk.vmdk) 경로 변경 === (for mac) 1. stop docker 2. vi /etc/default/docker 편집 경로 수정 [[code(DOCKER_OPTS="-g /docker/var/lib/docker")]] 3. start docker (for windows) 1. %PROGRAMFILES%\Docker Toolbox\start.sh 편집 2. docker-machine.exe 실행 시 -s 옵션을 사용하도록 수정한다. 수정 전 [[code(DOCKER_MACHINE=./docker-machine.exe)]] 수정 후 [[code(DOCKER_MACHINE_FILE=./docker-machine.exe)]] [[code(DOCKER_MACHINE="./docker-machine.exe -s D:/docker/")]] 수정 전 [[code(if [ ! -f "${DOCKER_MACHINE}" ]; then)]] 수정 후 [[code(if [ ! -f "${DOCKER_MACHINE_FILE}" ]; then)]] 수정 전 [[code(VM_STATUS="$(${DOCKER_MACHINE} status ${VM} 2>&1)")]] 수정 후 [[code(VM_STATUS="$(${DOCKER_MACHINE_FILE} status ${VM} 2>&1)")]] 3. [[code(%USERPROFILE%\.docker\machine)]] 폴더들을 설정 변경한 위치로 복사 4. docker machine 재시작 [[code(cmd> docker-machine stop)]] [[code(cmd> start.sh)]] (...mac, windows 공통으로 경로 설정 바꾸는 것보다 그냥 심볼릭 링크 만들어도 무방하고 그 편이 더 쉬울 수 있다.) ---- CategoryDocument