docker 이미지와 docker 파일을 사용할 때 이 점을 고려해야 할 수도 있습니다
10455 단어 devopsbestpracticesdockeropensource
우선, 도커 이미지가 무엇인지 정의해야 합니다.docker 이미지는 운영체제 구조나 패키지, 응용 프로그램 의존 항목, 라이브러리, 응용 프로그램 코드를 포함하는 패키지 단위입니다.가상화 세계에서 온 경우 이미지를 VM 템플릿으로 간주하고 컨테이너는 이 템플릿으로 만든 인스턴스입니다.그렇지 않으면, 개발자라면 이미지를 클래스 정의로 볼 수 있고, 용기는 클래스의 실례로 볼 수 있습니다.
Docker의 이미지는 반드시 어디에 저장해야 합니다. 그렇습니까?이것들이 바로 이른바 이미지 등록표다.이 등록표들은 이미지를 저장하는 저장소와 같다.예를 들면 다음과 같습니다.
주의: 로컬에서 docker 이미지를 만들 수도 있습니다. 등록표가 필요하지 않지만, 다른 컴퓨터에서 이 이미지를 사용하려면 서버 o cloud yo에서 등록표를 사용해야 합니다.
이미지는 단일 객체로 표시되는 여러 레이어로 구성됩니다.실례 이외의 한 층은 내부 핵이다. 왜냐하면 용기는 호스트 내부 핵을 사용하기 때문이다.
예를 들면 다음과 같습니다.
☁ docker [master] ⚡ docker image pull mongo:latest
latest: Pulling from library/mongo
7b1a6ab2e44d: Already exists
90eb44ebc60b: Pull complete
5085b59f2efb: Pull complete
c7499923d022: Pull complete
019496b6c44a: Pull complete
c0df4f407f69: Pull complete
351daa315b6c: Pull complete
5b6df31e95f8: Pull complete
e82745116109: Pull complete
98e820b4cad7: Pull complete
Digest: sha256:cf9f5df5419319390cc3b5d9abfc2d0d0b149b3e9e3e29b579
Status: Downloaded newer image for mongo:latest
docker.io/library/mongo:latest
여기에서, 우리는 docker 이미지에서 다른 재미있는 기능을 볼 수 있습니다. 이미지를 끌어올릴 때, docker는 변경된 층이나 로컬 시스템의 새로운 층만 다운로드합니다. 이것은 네트워크 데이터의 비용을 줄이는 데 도움이 됩니다.7b1a6ab2e44d: Already exists
내 시스템90eb44ebc60b: Pull complete
가 다운로드되었습니다.☁ docker [master] ⚡ docker pull alpine
Using default tag: latest
latest: Pulling from library/alpine
59bf1c3509f3: Pull complete
Digest: sha256:21a3deaa0d32a8057914f36584b5288d2e0118285c70fa8c9300
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest
알다시피 알프스 산의 그림에는 더 적은 도층이 있다.ls를 실행해야 합니다.☁ docker [master] ⚡ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest c059bfaa849c 8 days ago 5.59MB
mongo latest 4253856b2570 2 weeks ago 701MB
5MB 대 700MB, 표준은 40-200MB 정도의 이미지입니다.또 다른 고려 사항은 이미지 이름입니다. 만약 우리가 이전의 명령 이미지가 다음 위치에서 호출된 것을 관찰했다면, (이것은 공식 이미지에 사용되는 것) 버전을 지정하지 않았다면, 기본값은 최신입니다.
다음 방법으로 이미지가 공식 이미지인지 여부를 질의할 수 있습니다.
☁ docker [master] ⚡ docker search ubuntu --filter "is-official=true"
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 13244 [OK]
websphere-liberty WebSphere Liberty multi-architecture images … 282 [OK]
ubuntu-upstart DEPRECATED, as is Upstart (find other proces… 112 [OK]
ubuntu-debootstrap DEPRECATED; use "ubuntu" instead 45 [OK]
이제 이미지 101 이후에 우리는 이미지를 사용하거나 만드는 최선의 실천으로 전환해야 한다. 우리 시작합시다.오 잠깐만!!
Dockerfile에 대해 이야기하는 것을 잊을 뻔했어요...
기본:
아니오, docker 파일, docker 파일, docker 파일로 명명할 수 없습니다.이것은 docker official documentation의 Dockerfile의 작은 예입니다.
FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py
지금, 우리는 이 건의들을 계속 토론할 수 있다...1. 공식 Docker 이미지를 기본 이미지로 사용
Dockerfile의 이전 예제에 따르면 기본 이미지는 From 문에서 사용한 이미지입니다.
FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py
그렇지만
주의해야 할 것은 기본 운영체제 이미지를 사용한 다음에 의존항을 설치하기 위해 운행문을 추가하지 말고 의존항이 설치된 공식 이미지를 사용해야 한다는 것이다.
예:
이것은 가능하지만 가장 좋은 방법은 아니다.
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y gnupg
RUN wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
COPY ./mongodb-org-5.0.list /etc/apt/sources.list.d/mongodb-org-5.0.list
RUN apt-get install -y mongodb-org
이게 더 좋은 방법이에요.
FROM mongo:4.4.11-rc0
그것은 당신의 서류를 간소화하고 당신의 생활을 더욱 가볍게 할 것이다.2. 처음에 코드를 추가하는 것을 피한다
앞서 언급한 바와 같이,docker 이미지는 층으로 나뉘어져 있으며, 일부 이미지는 로컬 시스템에 캐시할 수 있습니다. 캐시를 원한다면, 이미지를 추출할 때 용기를 만드는 데 걸리는 시간이 더 적습니다.
Dockerfile 사용 시
FROM ubuntu
COPY . /app
CMD ["java", "-jar", "/app/target/app.jar"]
코드를 변경할 때 두 번째 줄 COPY . /app
에 대응하고 나머지 층은 끌어들이고 FROM ubuntu
만 캐시됩니다.코드의 사본을 끝에 두다.
또한, 보상으로jar 파일을 용기에 복사하기만 하면 모든 파일이 필요하지 않습니다.예를 들어, 너는 자술한 서류를 필요로 하지 않는다
FROM ubuntu
RUN apt-get update && apt-get install -y --no-install-recommends \
openjdk-8-jdk ssh vim
COPY target/app.jar /app
CMD ["java", "-jar", "/app/target/app.jar"]
만약 우리가 첫 번째 제안을 기억한다면, 누군가가 오픈 jdk를 설치한 이미지에서 작업을 한 적이 있다FROM openjdk
COPY target/app.jar /app
CMD ["java", "-jar", "/app/target/app.jar"]
이것은 공식 성명이다.☁ docker [master] ⚡ docker search openjdk --filter "is-official=true"
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
openjdk OpenJDK is an open-source implementation of … 3046 [OK]
3. 기본 이미지에 특정 버전 추가
만약 당신이 기억하고 있다면, 처음에 우리는 당신이 어떤 버전도 지정하지 않으면 최신 버전을 사용할 것을 보았을 것이다.
맞습니까?
그래, 너는 최신식을 쓰고 싶지 않아...
최신 예측 불가능
최신 2개의 잡아당기기 간 전환 가능
최신 버전은 당신의 비밀번호를 해독할 수 있습니다
최신은 사랑이 아니야!!
FROM mongo:4.4.11-rc0
및FROM openjdk:slim
COPY target/app.jar /app
CMD ["java", "-jar", "/app/target/app.jar"]
docker hub의 탭에서 이미지 버전을 볼 수 있습니다이 입력 프롬프트와는 무관합니다.
또한 모든 이미지를 재구매할 수 있습니다.
☁ docker [master] ⚡ docker pull --all-tags alpine
#output too long to be shown
☁ docker [master] ⚡ docker image ls | grep alpine
alpine 3 c059bfaa849c 9 days ago 5.59MB
alpine latest c059bfaa849c 9 days ago 5.59MB
ansible-base-lab_managed-host-alpine latest 77f2f125fa50 6 weeks ago 80.8MB
alpine 20210804 4e873038b87b 4 months ago 5.59MB
alpine 20210730 8fd5af68fdb2 4 months ago 5.59MB
alpine 3.10 e7b300aee9f9 7 months ago 5.58MB
alpine 20210212 b0da5d0678e7 8 months ago 5.62MB
alpine 20201218 430cc6504dbd 11 months ago 5.61MB
alpine 20200917 003bcf045729 14 months ago 5.62MB
alpine 20200626 3c791e92a856 17 months ago 5.57MB
alpine 20200428 5737d7d248e9 19 months ago 5.6MB
4. 서로 다른 용기에서 응용 프로그램 분리
이것은 간단한 문제가 될 것이며, 용기 하나에는 단지 하나의 문제만 있을 것이다.하나의 웹 응용 프로그램은 하나의 용기만 모든 작업을 완성하는 것이 아니라 세 개의 용기 (웹 응용 프로그램 코드, 데이터베이스, 캐시) 로 구성될 수 있다.
이것은 원자 변경을 확장하고 진행하는 데 도움이 된다.
5. 간결한 공식 사진을 사용해도 최저 맛을 가리킨다
ubuntu와 같은 공식 운영체제 이미지는 우리가 필요로 하지 않는 패키지나 서비스를 포함할 수 있습니다.
용기의 개념은 프로그램이 예상대로 실행되는 데 필요한 소프트웨어를 제공하는 것이다. 용기에 들어갈 필요가 없을 수도 있다. 이것이 바로 일부 이미지가 케이스를 설치하지 않은 이유이다.
더 작은 맛도 안전성을 높일 수 있다. 공격이 필요한 서비스가 적고 업데이트가 필요한 서비스도 적기 때문이다.
작은 맛은 옮기고 저장하기 쉽다.
오픈 jdk slim과 jdk의 비교 예시를 보도록 하겠습니다.
☁ docker [master] ⚡ docker image ls | grep openjdk
openjdk slim 8b0ead3b8172 33 hours ago 407MB
openjdk 18-jdk-alpine3.15 c89120dcca4c 3 days ago 329MB
추가 선택:☁ docker [master] ⚡ docker image ls | grep python
python latest 47ebea899258 20 hours ago 917MB
python 3.7.12-alpine3.15 a1034fd13493 3 days ago 41.8MB
☁ docker [master] ⚡
코멘트
이것은 광범위한 가장 좋은 실천 목록이 아니다. 이것은 당신이 사용할 수 있는 가장 간단한 절차를 대표한다. 다음 항목에서 나는 다단계 구축과 우리가 만들 수 있는 모든 아름다운 것들을 더 높은 주제로 쓸 것이다.
Reference
이 문제에 관하여(docker 이미지와 docker 파일을 사용할 때 이 점을 고려해야 할 수도 있습니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aernesto24/you-may-want-to-consider-this-when-using-docker-images-and-dockerfiles-starting-point-51ag텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)