기초 비망록
기본 작업
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 createpull 이미지에서 용기를 만드는 명령입니다.
각 컨테이너에 대해 볼륨, 포트, 네트워크 지정 등을 정의하기 위해 추가 옵션을 지정합니다.
$ 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 내에서 한 번만 사용할 수 있으며 여러 곳에서 기술한 경우 마지막 기술만 유효합니다.
사용의 중점을 구분하는 것은 아직 완전히 이해할 수 없다.
참고 자료
Reference
이 문제에 관하여(기초 비망록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kettle_tomorrow/articles/a3b2cb5150eae9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)