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 로 해야한다.
•
# 이미지 파일
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
복사