기초 비망록

7500 단어 Dockertech

기본 작업


docker run


용기를 만들고 실행하는 명령입니다.
Docker hub 페이지를 참조하여 다음 명령을 사용하여 NGNx 컨테이너를 만듭니다.
$ docker run --name some-nginx -v /hoge/content:/usr/share/nginx/html -p 8080:80 nginx
$ docker run --name [コンテナ名] -v [Docker hostのディレクトリ]:[マウント先のコンテナ内のディレクトリ] -p [Docker hostのポート]:[コンテナのポート] イメージ名

뭐 해줄래요?


다시 자세히 보면 docker run 모두pull,create,start가 집행하는 명령이라고 할 수 있다.
실제 상황에서 런은 충분합니다. 해상도를 높이기 위해 각자 간단하게 보겠습니다.
docker pull
객체 이미지가 Docker host에 다운로드되지 않은 경우 Docker hub에서 이미지를 다운로드합니다.
$ docker pull nginx
docker create
pull 이미지에서 용기를 만드는 명령입니다.
각 컨테이너에 대해 볼륨, 포트, 네트워크 지정 등을 정의하기 위해 추가 옵션을 지정합니다.
$ docker create --name some-nginx -v /hoge/content:/usr/share/nginx/html:ro -p 8080:80 nginx
docker start
생성된 컨테이너를 시작하는 명령입니다.
$ docker start some-nginx

docker exec

docker exec를 사용하면 시작하는 용기에 들어가 명령을 실행할 수 있습니다.
$ docker exec some-nginx ls
$ docker exec [コンテナ名] [実行したいコマンド]
docker run과의 차이
run: 명령을 실행하기 위해 용기를 다시 시작합니다.실행 후 용기가 종료됩니다.
부팅된 용기에 들어가서 명령을 실행합니다.집행 후에도 컨테이너도 계속 가동된다.

옵션


--rm


용기가 끝날 때 자동으로 용기를 삭제합니다.
실행docker run 후 쓰레기 용기가 남지 않습니다.

--dit


d
백그라운드에서 실행하다.(오프라인 상태)
it
터미널에서 컨테이너를 조작하는 옵션
docker attach
분리된 컨테이너를 부착(진입)합니다.
$ docker attach some-nginx
$ docker attach [コンテナ名]

마운트


실행할 용기와 보관할 데이터를 각각 관리하는 것을 권장합니다.
생성된 볼륨이나 Docker host 디렉토리를 컨테이너 내의 디렉토리에 마운트하여 저장할 데이터를 컨테이너에서 분리할 수 있습니다.

음량 마운트


Docker Engine의 영역을 마운트합니다.
보관장소는 이름을 붙여 Docker Engine으로 관리하기 때문에 개발자는 물리적인 장소를 신경 쓸 필요가 없다.
DB 데이터를 저장하는 곳 등에 많이 활용된다.
다음 명령을 사용하여 볼륨을 생성할 수 있습니다.
$ docker volume create mysqldata
$ docker volume create [ボリューム名]
생성된 볼륨에 마운트하기 (mysql)
$ -v mysqldata:/var/lib/mysql
$ -v [ボリューム名]:[マウント先のコンテナ内のディレクトリ]

※ マウント先のディレクトリはイメージごとに指定されている。

바인딩 마운트


Docker host의 실제 디렉토리를 마운트합니다.
Docker 컨테이너에 작업 디렉토리의 변경 사항을 즉시 반영하는 것이 편리합니다.
Docker host의 디렉토리에 마운트(Nginx의 경우)
-v /hoge/content:/usr/share/nginx/html
-v [Docker hostのディレクトリ]:[マウント先のコンテナ内のディレクトリ

※ マウント先のディレクトリはイメージごとに指定されている。

네트워킹


Docker가 관리하는 네트워크는bridge,host,none 세 가지가 있는데 bridge가 가장 자주 이용된다.

bridge


포트 전송은 여러 컨테이너를 Docker host의 IP 주소와 연결할 수 있습니다.
$ -p 8080:80
$ -p 8081:80
$ -p [Docker hostのポート]:[コンテナのポート]

※ 各コンテナで受けることができるポートは、イメージごとに決められている(nginxの場合は80番ポート)
네트워크 생성
$ docker network create hoge-net
$ docker network create [ネットワーク名]
생성된 네트워크를 컨테이너로 설정
--net hoge-net
--net [ネットワーク名]

docker-compose


컨테이너와 관련된 일련의 조작 메커니즘을 통일적으로 집행하다.
정의 파일과 명령을 사용하여 여러 컨테이너를 설정하거나 조작할 수 있습니다.

정의 파일

docker-compose.yml를 사용하여 여러 용기의 정의를 쓸 수 있습니다.
자주 사용하는 기술의 인상을 잡기 위해 견본 파일을 제작한다.
※ 직접 사용해서 실제로 실행되는 파일은 아닙니다.
version: "3.6"

services:
  db:
    image: mysql:5.7
    network:
      - hoge_net
    environment:
      MYSQL_ROOT_PASSWORD: hoge_root_path
      MYSQL_DATABASE: hoge_db
      MYSQL_USER: hoge_db_user
      MYSQL_PASSWORD: hoge_db_password
    volumes:
      - mysql_data:/var/lib/mysql
  web:
    build: .
    volumes:
      - .:/app
    network:
      - hoge_net
    ports:
      - "8080:80"
    depends_on:
      - db

networks:
  hoge_net:
volumes:
  mysql_data:

컨테이너 정의


컨테이너 이름 만들기
이미지 이름
환경 변수
마운트할 음량
포트 활용
dependent_on: 시작 순서 제어
Docker file 경로 지정하기

네트워크 정의


사용할 네트워크 이름을 정의합니다.존재하지 않을 경우 다시 제작됩니다.
네트워크 이름이 생략된 경우에도 각 컨테이너가 통신할 수 있도록 네트워크를 자동으로 생성합니다.

음량 정의


사용할 볼륨 이름을 정의합니다.존재하지 않을 경우 다시 제작됩니다.

Dockerfile


자신의 이미지를 만드는 방법 중 하나는 Docker file입니다.

정의 파일


FROM:기본 이미지 지정
RUN: 이미지build 실행 명령
CMD: 컨테이너를 시작할 때 실행되는 명령
ENTRYPOINT: 컨테이너를 시작할 때 실행되는 명령
EXPOSE: 어떤 포트를 공개하고 싶은지 알려줍니다(EXPOSE만 실제 포트는 공개하지 않음).
WORKDIR: RUN, CMD, ENTRYPOINT, COPY, ADD의 작업 디렉토리 지정

CMD와 ENTRYPOINT의 차이점


둘 다 용기를 시작할 때 실행되는 명령입니다.
CMD: docker run,create를 실행할 때 지정한 명령의 실행을 덮어쓸 수 있습니다.
ENTRYPOINT: 지정된 명령이 강제로 실행되는 경우(선택적으로 지정--entry-point 제외)
CMD 및 ENTRYPOINT은 Docker file 내에서 한 번만 사용할 수 있으며 여러 곳에서 기술한 경우 마지막 기술만 유효합니다.
사용의 중점을 구분하는 것은 아직 완전히 이해할 수 없다.

참고 자료

  • 접촉 학습 클라우드 인프라 docker 기초 용기 구축
  • Rails 응용 프로그램 개발 환경은 Docker file+docker-compose를 사용합니다.yml
  • docker hub: nginx
  • Docker 참조
  • 좋은 웹페이지 즐겨찾기