Search
Duplicate
📍

Docker 삽질

생성일
2022/05/15 23:19
태그
개발
docker를 삽질하면서 알게된것 정리

Docker 설치

의 Docker 설치 참고

Docker 명령어

docker pull ubuntu:latest docker images docker ps -a docker start hello docker restart hello docker attach hello (컨트롤 p,q 누르면 정지하지 않고 빠져나옴) docker exec hello echo "Hello" docker stop hello docker rm hello docker rmi ubuntu:latest docker run \ -it -d \ # 표준 입출력 , 데몬으로 (컨트롤 p q 로 빠져오기 가능) --rm \ # 컨테이너 종료시 삭제 --gpus all \ # 그래픽카드 전체 사용 (nvidia-docker2 가 있어야함) --name hello \ # 컨테이너 이름 설정 --user 1000 \ # 유저 id 1000으로 설정 --link hellodb:db \ # db라는 컨테이너를 db라는 별칭으로 연결함 (db를 dns처럼 사용) --network hello-network \ # hello-network 네트워크에 연결 -p 7080:80 \ # 호스트 포트 7080에 컨테이너 80 포트 연결 (컨테이너 이름을 dns 처럼 사용) -v $(PWD):/home \ # 호스트 현재 디렉토리에 컨테이터 /home 디렉토리 연결 hello:0.1 # 사용할 이미지:태그 docker cp <컨테이너 이름>:<경로> <호스트 경로> docker cp hello-nginx:/etc/nginx/nginx.conf ./ hello-nginx 컨테이너 안의 파일 내용이 바뀌었다고 치고, 컨테이너를 이미지 파일로 생성해보겠습니다. docker commit <옵션> <컨테이너 이름> <이미지 이름>:<태그> docker commit -a "Foo Bar <foo@bar.com>" -m "add hello.txt" hello-nginx hello:0.2 docker build -t hello:0.1 -f Dockerfile.dev . docker build -t hello:0.1 . docker diff hello-nginx docker inspect hello-nginx docker network create hello-network docker run --name db -d --network hello-network mongo docker run --name web -d -p 80:80 --network hello-network nginx docker stats
Bash
복사
-it 옵션으로 bash 실행중에 종료없이 나오는법 : Ctrl P + Ctrl Q
컨테이너 이름을 dns 마냥 사용 (ping db)

Dockerfile

기본 파일명은 Dockerfile 로 해야한다.
개발 컨테이너는 관례적으로 Dockerfile.dev 로 한다.
# 이미지 파일 FROM ubuntu:14.04 # app 디렉토리 생성 RUN mkdir -p /app #Docker 이미지 내부에서 RUN, CMD, ENTRYPOINT의 명령이 실행될 디렉터리를 설정합니다. WORKDIR /app # 현재 디렉터리에 있는 파일들을 이미지 내부 /app 디렉터리에 추가함 ADD . /app # 환경변수 추가 , 설치시 상호작용 끄기 ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update \ && apt-get install -y apache2 RUN service apache2 start VOLUME ["/data", "/var/log/httpd"] # 하기 포트를 외부로 노출합니다. EXPOSE 80 # 컨테이너가 시작되었을 때 # 해당 명령어가 종료되면 컨테이너도 종료됨 ENTRYPOINT "/app/log.backup.sh" # run 할때 default 명령어 CMD "/bin/bash" CMD ["/bin/bash", "-c", "nvidia-smi"]
Bash
복사

Docker Compose 설치

sudo curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose docker-compose --version
Bash
복사

Docker Compose 명령어

docker-compose up -d docker-compose -f docker-compose-local.yml up -d docker-compose down docker-compose start web docker-compose stop web docker-compose ps docker-compose logs -f web docker-compose exec db /bin/bash docker-compose run web pwd
Bash
복사

Docker Compose

version: '2.1' volumes: django_sample_db_dev: {} django_sample_packages: {} services: db: image: postgres:9.6.1 volumes: - django_sample_db_dev:/var/lib/postgresql/data environment: - POSTGRES_DB=sampledb - POSTGRES_USER=sampleuser - POSTGRES_PASSWORD=samplesecret - POSTGRES_INITDB_ARGS=--encoding=UTF-8 healthcheck: test: "pg_isready -h localhost -p 5432 -U postgres" interval: 3s timeout: 1s retries: 10 django: build: context: . dockerfile: ./compose/django/Dockerfile-dev environment: - DJANGO_DEBUG=True - DJANGO_DB_HOST=db - DJANGO_DB_PORT=5432 - DJANGO_DB_NAME=sampledb - DJANGO_DB_USERNAME=sampleuser - DJANGO_DB_PASSWORD=samplesecret - DJANGO_SECRET_KEY=dev_secret_key ports: - "8000:8000" depends_on: db: condition: service_healthy links: - db command: /start-dev.sh volumes: - ./manage.py:/app/manage.py - ./requirements.txt:/app/requirements.txt - ./requirements-dev.txt:/app/requirements-dev.txt - ./djangosample:/app/djangosample - django_sample_packages:/usr/local/lib/python3.6/site-packages/ networks: our_net: driver: bridge default: external: name: our_net
JSON
복사

삽질

참고