相关文章:
linux上docker容器运行web应用简单介绍(二)_做测试的喵酱的博客-CSDN博客
linux docker安装及报错处理_做测试的喵酱的博客-CSDN博客
Docker 容器使用 | 菜鸟教程
linux应用docker基本使用(一)_做测试的喵酱的博客-CSDN博客
一、images/镜像介绍
images/镜像:
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。
Docker 将应用程序与该程序的依赖,打包在一个image文件里面。
运行这个文件,就会生成一个虚拟容器。
程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。
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
删除镜像的前提,是依赖镜像的容器停止运行,并删除容器。才能删除镜像。
-
查看正在运行的容器:
$ docker ps
这将列出当前正在运行的容器及其相关信息。
-
停止正在使用目标镜像的容器:
$ docker stop <container_id>
将
<container_id>
替换为需要停止的容器的ID。例如,0935de4f00f3
是您正在尝试删除的镜像所依赖的容器ID。 -
删除停止的容器:
$ docker rm <container_id>
使用上述命令删除停止的容器。
-
现在您可以尝试删除映像:
$ 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"]
注意:
- 每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
- 第一条FROM,指定使用哪个镜像源
- 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
命令创建自定义的镜像,并按照需求进行配置和操作。