>운영 및 유지보수 >Docker >Docker 이미지를 만드는 방법에는 여러 가지가 있습니다.

Docker 이미지를 만드는 방법에는 여러 가지가 있습니다.

青灯夜游
青灯夜游원래의
2022-02-23 18:22:3639724검색

Docker 이미지를 생성하는 방법에는 두 가지가 있습니다. 1. "docker commit" 명령을 사용하여 기존 컨테이너를 기반으로 이미지를 수동으로 빌드합니다. 2. Dockerfile을 사용하여 이미지를 자동으로 빌드합니다. Docker 프로그램이 자동으로 이미지를 생성합니다. Dockerfile 빌드 파일의 지침을 읽어보세요.

Docker 이미지를 만드는 방법에는 여러 가지가 있습니다.

이 튜토리얼의 운영 환경: linux5.9.8 시스템, docker-1.13.1 버전, Dell G3 컴퓨터.

Docker 이미지 웨어하우스에서 다운로드한 이미지가 요구 사항을 충족하지 못하는 경우가 있습니다. 기본 이미지를 기반으로 자체 이미지를 구축할 수 있습니다.

이미지 구축 소개

어떤 상황에서 이미지를 직접 구축해야 합니까?

(1) 자체 개발한 애플리케이션 등 기존 이미지를 찾을 수 없는 경우

(2) 이미지에 특정 기능을 추가해야 하는 경우

Docker에서 이미지를 빌드하는 방법에는 두 가지가 있습니다. code>docker commit 명령과 Dockerfile 빌드 파일docker commit命令与Dockerfile构建文件

docker commit构建镜像

基于已有容器构建镜像主要是通过docker commit

docker commit build image

기존 컨테이너를 기반으로 이미지를 빌드하는 작업은 주로 docker commit 명령을 사용하여 수행됩니다. 새로운 이미지를 구축하세요.
  • dockercommit을 빌드하는 세 가지 주요 단계는 다음과 같습니다.
  • 컨테이너 실행
  • 컨테이너 수정

컨테이너를 새 이미지로 저장

예를 들어 centos 이미지에 vim 편집기를 설치하고 새 이미지

(1) 컨테이너 실행

[root@ken1 docker]# docker run -it centos
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
a02a4930cb5d: Pull complete 
Digest: sha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426
Status: Downloaded newer image for centos:latest
(2) vim 편집기 설치

vim 편집기가 설치되지 않았음을 확인

[root@69f501e858a6 /]# vim
bash: vim: command not found
설치

[root@69f501e858a6 /]# yum install vim -y
(3) 새 이미지로 저장

먼저 현재 실행 중인 이미지를 확인하세요.

[root@ken1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
69f501e858a6        centos              "/bin/bash"         2 minutes ago       Up 2 minutes                            quizzical_torvalds

커밋을 사용하여 새 이미지
[root@ken1 ~]# docker commit 69f501e858a6 centos-vim
sha256:42083b89a179368bc29a8f40d14f8824990183c8e4b28fd84411d440c26342e5

69f501e858a6은 실행 중인 컨테이너의 ID입니다.

centos-vim은 새 이미지의 이름입니다.

centos-vim 이미지가 있는지 확인하세요.

새 이미지를 다시 시작하고 vim 편집기를 사용할 수 있는지 확인하세요.

vim 편집기를 사용하여 새 이미지를 찾을 수 있습니다.

[root@ken1 ~]# docker run -it centos-vim 
[root@61d090898bad /]# vim
[root@61d090898bad /]# vim test
    위에서는 방법을 보여줍니다. 커밋을 사용하여 새 이미지를 생성하지만 docker는 다음과 같은 이유로 이 방법을 사용하여 이미지를 생성하는 것을 권장하지 않습니다.
  • 이 방법은 수동으로 이미지를 생성하는 방식으로, 컨테이너에 오류가 발생하기 쉽고 비효율적이고 약합니다. 반복성
더 중요한 것은. 사용자는 이미지가 어떻게 생성되는지 알 수 없습니다. 내부에 악성 프로그램이 있는 걸까요?

이미지를 빌드하는 Dockerfile

Dockerfile은 일련의 명령어로 구성된 파일입니다. 각 명령어는 Linux의 명령어에 해당합니다. Dockerfile.

첫 번째 Dockerfike

1단계: 새 디렉터리 만들기

[root@ken1 ~]# mkdir /test

2단계: Dockerfile 작성

이름은 Dockerfile이고 첫 번째 D는 대문자로 시작해야 합니다.

[root@ken1 ~]# cat Dockerfile
FROM centos
RUN yum install vim -y

FROM centos는 centos를 기본으로 사용한다는 의미입니다. image

RUN은 centos에 vim 편집기를 설치하는 것을 의미합니다.

3단계: 이미지 빌드

[root@ken1 ~]# docker build -t centos-vim2 .

-t

뒤에 새 이미지의 태그 이름(태그)을 지정합니다. 마지막 점은 Docker 컨텍스트가 현재임을 나타냅니다. 예배 규칙서. Docker는 기본적으로 빌드 컨텍스트에서 Dockerfile 파일을 검색합니다. -f 매개변수를 통해 Dockerfile의 위치를 ​​지정할 수도 있습니다. 4단계: 이미지 보기 계층 구조가 표시됩니다. Dockerfile의 실행 프로세스인 이미지입니다.

Dcokerfile 공통 지침 1.FROM

기본 이미지 지정

 2. MAINTAINER이미지 작성자를 설정합니다. 모든 문자가 가능합니다

 3.COPY

빌드 컨텍스트에서 이미지로 파일을 복사하세요

COPY는 두 가지 형식을 지원합니다: COPY src dest 및 COPY ["src", "dest"]

참고: src는 복사 가능 동적 빌드 컨텍스트의 파일 또는 디렉터리는 Dockerfile

  4.ADD

과 동일한 디렉터리에만 있을 수 있습니다. 이는 빌드 컨텍스트에서 이미지로 파일을 복사하는 COPY와 유사합니다.

차이점은 src가 아카이브 파일(tar, zip, tgz, xz)인 경우 파일이 자동으로 dest

 5.ENV

다음 명령에서 사용할 수 있는 환경 변수를 설정한다는 것입니다. as :

ENV name ken RUN echo $name

 6.EXPOSE

지정된 컨테이너의 프로세스는 특정 포트를 수신 대기하며 Docker는 해당 포트를 노출할 수 있습니다

 7.VOLUME

파일 또는 디렉터리를 다음과 같이 선언합니다. 볼륨

 8.WORKDIR

이후 RUN, ENTRYPINT, ADD, COPY 지침을 위해 이미지의 현재 작업 디렉터리를 설정합니다.

 9.RUN

컨테이너에서 지정된 명령을 실행합니다

  10.CMD

容器启动时运行指定的命令

dockerfile中可以多个CMD指令,但是只要最后一个生效。CMD可以被docker run之后的参数替换

  11.ENTRYPOINT

设置容器启东市的命令

dockerfile中可以有多个ENTRYPOINT,但是只有最后一个生效。

CMD或者docker run之后的参数会被当做参数传递给ENTERYPOINT.

Dockerfile演示

下面演示一个比较全面的dockerfile

[root@ken1 test]# cat Dockerfile 
#my Dockerfile
FROM busybox
MAINTAINER ken
WORKDIR /ken
RUN touch test
COPY ["ken1","."]
ADD ["wordpress.tar.gz","."]
ENV name "ken"

注意:Dockerfile支持以#开头的注释

构建镜像

[root@ken1 test]# docker build -t myimage .
Sending build context to Docker daemon  4.281MB
Step 1/7 : FROM busybox
 ---> 3a093384ac30
Step 2/7 : MAINTAINER ken
 ---> Running in 2a73a83507ce
Removing intermediate container 2a73a83507ce
 ---> 8c3df9b3d823
Step 3/7 : WORKDIR /ken
 ---> Running in 31c6f9fe2195
Removing intermediate container 31c6f9fe2195
 ---> a458cf986072
Step 4/7 : RUN touch test
 ---> Running in e1b08ebd363c
Removing intermediate container e1b08ebd363c
 ---> 41601920009a
Step 5/7 : COPY ["ken1","."]
 ---> 2ebfa0933fca
Step 6/7 : ADD ["wordpress.tar.gz","."]
 ---> d0ad29d3aa34
Step 7/7 : ENV name "ken"
 ---> Running in fceae6e20e63
Removing intermediate container fceae6e20e63
 ---> 7efe0600e48f
Successfully built 7efe0600e48f
Successfully tagged myimage:latest

查看镜像

运行该镜像

[root@ken1 test]# docker run -it myimage
/ken # ls
ken1       test       wordpress
/ken # echo $name
ken
  •  可以发现当前工作目录为/ken,且自动创建
  • ken1是我们从docker context目录中复制过去的
  • test是使用touch创建的
  • wordpres压缩包已经被自动解压
  • $name为变量值为ken

推荐学习:《docker视频教程

위 내용은 Docker 이미지를 만드는 방법에는 여러 가지가 있습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.