docker 镜像的使用与创建(三)

相关文章:

linux上docker容器运行web应用简单介绍(二)_做测试的喵酱的博客-CSDN博客

linux docker安装及报错处理_做测试的喵酱的博客-CSDN博客

Docker 容器使用 | 菜鸟教程

linux应用docker基本使用(一)_做测试的喵酱的博客-CSDN博客

 一、images/镜像介绍

images/镜像:

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

Docker 将应用程序与该程序的依赖,打包在一个image文件里面。

运行这个文件,就会生成一个虚拟容器。

程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。

扫描二维码关注公众号,回复: 15792557 查看本文章

1、Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。

2、image 是二进制文件。实际开发中,一个 image 文件往往通过继承另一个 image 文件,加上一些个性化设置而生成。举例来说,你可以在 Ubuntu 的 image 基础上,往里面加入 Apache 服务器,形成你的 image。

image 文件是通用的,一台机器的 image 文件拷贝到另一台机器,照样可以使用。一般来说,为了节省时间,我们应该尽量使用别人制作好的 image 文件,而不是自己制作。即使要定制,也应该基于别人的 image 文件进行加工,而不是从零开始制作。

3、为了方便共享,image 文件制作完成后,可以上传到网上的仓库。Docker 的官方仓库 Docker Hub 是最重要、最常用的 image 仓库。此外,出售自己制作的 image 文件也是可以的。

有了 Docker,就不用担心环境问题。

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
 

注意:

当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。

二、查看镜像列表 docker images

docker images

[root@ecs-39233 ~]# docker images
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
test/ubuntu       v1        ae495df32c52   17 hours ago   77.8MB
ubuntu            latest    5a81c4b8502e   7 days ago     77.8MB
hello-world       latest    9c7a54a9a43c   2 months ago   13.3kB
ubuntu            15.10     9b9cb95443b5   6 years ago    137MB
training/webapp   latest    6fae60ef3446   8 years ago    349MB

各个选项说明:

  • REPOSITORY:表示镜像的仓库源

  • TAG:镜像的标签

  • IMAGE ID:镜像ID

  • CREATED:镜像创建时间

  • SIZE:镜像大小

同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。

所以,我们如果要使用版本为15.10的ubuntu系统镜像来运行容器时,命令如下:

[root@ecs-39233 ~]# docker run -t -i ubuntu:15.10 /bin/bash
root@a8be8872b767:/# 

参数说明:

  • -i: 交互式操作。
  • -t: 终端。
  • ubuntu:15.10: 这是指用 ubuntu 15.10 版本镜像为基础来启动容器。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像。

三、拉取镜像 docker pull 

当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。

如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。

docker pull 

举例:

docker pull ubuntu:13.10

四、查找镜像

我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/

我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个 httpd 的镜像来作为我们的 web 服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。

docker search httpd
[root@ecs-39233 ~]# docker search httpd
NAME                                 DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
httpd                                The Apache HTTP Server Project                  4469      [OK]       
clearlinux/httpd                     httpd HyperText Transfer Protocol (HTTP) ser…   5                    
paketobuildpacks/httpd                                                               0                    
vulhub/httpd                                                                         0                    
jitesoft/httpd                       Apache httpd on Alpine linux.                   0                    
openquantumsafe/httpd                Demo of post-quantum cryptography in Apache …   0                    
avenga/httpd-static                                                                  0                    
dockette/httpdump                                                                    0                    
betterweb/httpd                                                                      0                    
dockette/apache                      Apache / HTTPD                                  1                    [OK]
centos/httpd-24-centos7              Platform for running Apache httpd 2.4 or bui…   45                   
manageiq/httpd                       Container with httpd, built on CentOS for Ma…   1                    [OK]
centos/httpd-24-centos8                                                              1                    
dockerpinata/httpd                                                                   1                    
19022021/httpd-connection_test       This httpd image will test the connectivity …   0                    

NAME: 镜像仓库源的名称

DESCRIPTION: 镜像的描述

OFFICIAL: 是否 docker 官方发布

stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。

AUTOMATED: 自动构建。

五、删除镜像

镜像删除使用 docker rmi name

比如我们删除 hello-world 镜像:

$ docker rmi hello-world

删除镜像的前提,是依赖镜像的容器停止运行,并删除容器。才能删除镜像。

  1. 查看正在运行的容器:

    $ docker ps

    这将列出当前正在运行的容器及其相关信息。

  2. 停止正在使用目标镜像的容器:

    $ docker stop <container_id>

    <container_id> 替换为需要停止的容器的ID。例如,0935de4f00f3 是您正在尝试删除的镜像所依赖的容器ID。

  3. 删除停止的容器:

    $ docker rm <container_id>

    使用上述命令删除停止的容器。

  4. 现在您可以尝试删除映像:

    $ docker rmi training/webapp

    如果删除成功,您将收到成功的确认消息。

​六、创建镜像

  • 1、从已经创建的容器中更新镜像,并且提交这个镜像
  • 2、使用 Dockerfile 指令来创建一个新的镜像

6.1 直接容器中修改内容,然后生成镜像(不推荐)

使用 docker run 命令启动一个容器,基于你想要的已有镜像。

例如,我们以 Ubuntu 为例,

1、运行 docker run -it --name mycontainer ubuntu:latest

2、进入容器的交互式终端

docker exec -it mycontainer /bin/bash

3、在容器内执行 apt-get update 命令更新软件包列表。

运行

apt-get update

4、执行 apt-get install 命令安装所需的软件包。

例如,运行

apt-get install wget 

安装 wget 工具。

完成所有修改后,按下 Ctrl + D 或运行 exit 命令退出容器。

5、使用 docker commit 命令创建新的镜像

运行

docker commit mycontainer myimage:latest
  •  mycontainer 是你所创建的容器名称
  • myimage:latest 是你想要的新镜像的名称和标签。

Docker 将使用容器中的修改创建一个新的镜像,名为 myimage,标签为 latest。

6、查看已创建的新镜像

docker images

docker images命令查看已创建的新镜像 myimage:latest。

这个新镜像将基于 Ubuntu 镜像,但已包含了容器内的修改,包括执行了 apt-get update 和安装了 wget。

请注意,这只是一个简单的示例,实际场景中可能会涉及更复杂的修改和配置,在容器中进行的任何修改都会反映在最终生成的镜像中,但这可能会导致镜像变得臃肿和不稳定。

更佳的方法是使用 Dockerfile 来记录所有步骤,并通过构建命令生成新的镜像。但是,如果只是需要快速测试和生成一个临时镜像,上述步骤也是可行的。

6.2 docker build 创建镜像(推荐)

Dockerfile 是用于构建自定义镜像的文本文件。

当使用 Docker 构建镜像时,可以使用 Dockerfile 文件来定义构建过程中的操作和配置。docker build 命令根据 Dockerfile 中的指令自动化构建新的镜像。

以下是使用 docker build 创建镜像的一般流程,举例如何使用 Dockerfile 构建一个基于 Ubuntu 的镜像,并安装 Node.js:

1、在一个目录下创建一个名为 Dockerfile 的文件,用于定义镜像的构建过程。

2、在 Dockerfile 中编写构建指令,例如指定基础镜像、拷贝文件、运行命令、设置环境变量等。每个指令都会在构建过程中按照顺序执行。

以下是一些常用的指令:

  • FROM:指定基础镜像,例如 FROM ubuntu:latest
  • RUN:在容器内部执行命令,例如安装软件包、运行脚本等。
  • COPY:复制文件或目录到容器中。
  • WORKDIR:设置容器的工作目录。
  • EXPOSE:定义容器监听的端口。
  • CMD:指定容器启动后默认执行的命令。

举例:

# 设置基础镜像
FROM ubuntu:latest

# 更新软件包列表
RUN apt-get update

# 安装 Node.js 和 npm
RUN apt-get install -y nodejs npm

# 映射端口
EXPOSE 80

# 设置工作目录
WORKDIR /app

# 拷贝应用程序文件
COPY . /app

# 安装应用程序依赖
RUN npm install

# 启动应用程序
CMD ["npm", "start"]

注意:

  1. 每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
  2. 第一条FROM,指定使用哪个镜像源
  3. RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。

3、保存文件并关闭编辑器。

4、 打开终端,导航到 Dockerfile 所在的目录。

5、docker build构建镜像:

命令的基本语法如下:
 

docker build -t <new_image_name>:<tag> <path_to_dockerfile_directory>
  • <new_image_name>:<tag> 是你想要的新镜像的名称和标签,
  • <path_to_dockerfile_directory> 是 Dockerfile 所在的目录路径。

Docker 将读取 Dockerfile 中的指令,并根据其构建过程创建新的镜像。构建过程中,Docker 还会下载和安装所需的软件包、运行命令、复制文件等。

举例:

docker build -t mynodeapp:latest .

这将使用当前目录下的 Dockerfile 文件开始构建过程,并将生成的镜像命名为 mynodeapp,标签为 latest。 

6、等待构建过程完成。Docker 将按照 Dockerfile 中的指令执行相应操作,包括安装 Node.js 和 npm、拷贝应用程序文件等。

7、完成后,你将在本地机器上拥有一个新的镜像 mynodeapp:latest。可以使用它来运行容器,例如:

docker run -d -p 8080:80 mynodeapp:latest

这将在后台启动一个容器,并将容器内的端口 80 映射到本机的端口 8080。 

通过以上步骤,你就可以使用 Dockerfile 和 docker build 命令创建自定义的镜像,并按照需求进行配置和操作。

猜你喜欢

转载自blog.csdn.net/qq_39208536/article/details/131568002