相关文章:
linux docker安装及报错处理_做测试的喵酱的博客-CSDN博客
一、mac 安装及使用docker_docker mac_做测试的喵酱的博客-CSDN博客
Docker 容器使用 | 菜鸟教程
linux上docker容器运行web应用简单介绍(二)_做测试的喵酱的博客-CSDN博客
docker 镜像的使用与创建(三)_做测试的喵酱的博客-CSDN博客
一、docker介绍
1.1 介绍
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 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
1.2、docker应用场景
Docker 是一种开源的应用容器化平台,它可以帮助开发人员和运维人员以更高效、可移植的方式构建、交付和运行应用程序。以下是 Docker 的一些常见应用场景:
-
应用程序的开发与测试:Docker 提供了一个轻量级、可隔离的容器环境,使开发人员能够在自己的开发机上快速创建和启动应用程序所需的运行环境,避免了因开发环境不一致而导致的问题。同时,也可以轻松地在多个环境中进行测试,保证程序在不同的环境中正常工作。
-
应用程序的部署与交付:使用 Docker 可以将应用程序及其所有依赖项打包成一个独立的容器,该容器可以在任意支持 Docker 的环境中运行,无需担心底层操作系统和软件的差异性。这使得应用程序的部署和交付变得更加简单、快速和可靠。
-
微服务架构:Docker 为微服务架构提供了理想的支持。通过将每个微服务打包为独立的容器,可以实现每个服务的独立开发、部署和扩展。同时,通过 Docker 的容器编排工具(如 Docker Compose 或 Kubernetes),可以方便地管理和协调多个微服务的运行和通信。
-
持续集成与持续部署(CI/CD):Docker 可以与 CI/CD 流程无缝集成。通过使用 Docker 来构建和打包应用程序,可以确保在不同的环境中始终使用相同的容器镜像,从而减少了部署过程中的不一致性和问题。同时,使用容器编排工具可以自动化部署、扩展和回滚等操作,实现快速且可靠的持续交付。
-
多租户环境:在共享资源的多租户环境中,使用 Docker 可以实现更好的资源隔离和管理。每个租户可以在独立的容器中运行其应用程序,并享受到与其他租户隔离的好处,而无需担心资源冲突和干扰。
-
跨平台开发和迁移:Docker 提供了跨平台的能力,可以在不同的操作系统上运行相同的容器。这使得开发人员可以在自己的开发机上构建和测试应用程序,然后将容器迁移到生产环境中,而无需担心操作系统的差异和依赖库的问题。
总结起来,Docker 的应用场景非常广泛,可以帮助简化开发、测试和部署流程,提高应用程序的可移植性、可伸缩性和稳定性。无论是单机应用还是分布式微服务架构,Docker 都能提供强大的支持。
二、docker启动容器,并在容器里运行程序(小栗子)
[root@ecs-39233 ~]# docker run ubuntu:15.10 /bin/echo "Hello world"
Hello world
-
docker: Docker 的二进制执行文件。
-
run: 与前面的 docker 组合来运行一个容器。
-
ubuntu:15.10 指定要运行的镜像/image,Docker 首先从本地主机上查找镜像/image是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
-
/bin/echo "Hello world": 在启动的容器里执行的命令
以上命令完整的意思可以解释为:
Docker 以 ubuntu15.10 镜像/image创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。
三、运行交互式的容器
进入容器的终端,并在容器的终端中,执行命令
3.1、进入容器的终端
docker run -i -t ubuntu:15.10 /bin/bash
-
-t: 在新容器内指定一个伪终端或终端。
-
-i: 允许你对容器内的标准输入 (STDIN) 进行交互。
注意第二行 root@0123ce188bd8:/#,此时我们已进入一个 ubuntu15.10 系统的容器
3.2、在容器终端中,执行命令
1、执行命令,查看当前容器的内核信息。
cat /etc/os-release
显示为Ubuntu。我们当前启动的容器就是 ubuntu15.10 系统的容器
2、执行 cat /proc/version 查看内核信息
cat /proc/version
注意:
在我自己的linux的容器终端中,这里显示的是Red Hat ,而不是ubuntu。因为
/proc/version
文件显示的是宿主机的内核版本信息,而不是容器内的。
由于 Docker 容器共享宿主机的内核,因此在容器内查看 /proc/version
实际上会显示宿主机的内核版本信息。因此,即使你在 Ubuntu 容器中运行该命令,也会显示宿主机 CentOS 的相关信息,比如 Red Hat。
要查看容器内部的实际内核版本,你可以运行 uname -r
命令。该命令将显示容器内正在运行的内核版本。
扩展:
1、cat /etc/os-release 与 cat /proc/version 区别:
1、cat /etc/os-release:这个命令显示的是操作系统的相关信息,包括发行版名称、版本号、ID等。该文件通常在基于Linux的操作系统中以文本文件的形式存在,提供有关该发行版的详细信息。
2、cat /proc/version:这个命令显示的是当前正在运行的内核版本信息。/proc/version 文件是在 Linux 内核文件系统中的一个文件,提供了有关内核的一些基本信息。
当你在 CentOS 7 上使用 Docker 启动了一个 Ubuntu 容器时,容器内的 /etc/os-release 文件确实会显示为 Ubuntu。但是 /proc/version 文件显示的是宿主机的内核版本信息,而不是容器内的。
由于 Docker 容器共享宿主机的内核,因此在容器内查看 /proc/version 实际上会显示宿主机的内核版本信息。因此,即使你在 Ubuntu 容器中运行该命令,也会显示宿主机 CentOS 的相关信息,比如 Red Hat。
要查看容器内部的实际内核版本,你可以运行 uname -r 命令。该命令将显示容器内正在运行的内核版本。
2、CentOS 与 Red Hat 是什么关系
CentOS (Community Enterprise Operating System) 是一个基于 Red Hat Enterprise Linux (RHEL) 的发行版,它与 Red Hat 有紧密的关系。
具体来说,CentOS 是由社区开发和支持的免费开源操作系统,完全兼容 Red Hat Enterprise Linux。CentOS 团队在 RHEL 的源代码发布后,将其重新编译并创建成 CentOS 发行版,以提供类似于 RHEL 的稳定性和功能。
CentOS 可以被认为是 RHEL 的克隆版本,但是它没有商业支持,而是由一个志愿者社区负责维护和更新。这使得 CentOS 成为许多企业和个人用户的首选,因为它提供了与 RHEL 相近的功能和性能,同时又是免费的。
3.3、退出容器终端
运行 exit 命令或者使用 CTRL+D 来退出容器
四、后台模式启动容器
使用以下命令创建一个以进程方式运行的容器
[root@ecs-39233 ~]# docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
fa60e7213ce7c7313848cd7c2cbd2a95193a1c93c1a4b17e5f6a02596a0e4582
在输出中,我们没有看到期望的 "hello world",而是一串长字符
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
这个长字符串叫做容器 ID,对每个容器来说都是唯一的,我们可以通过容器 ID 来查看对应的容器发生了什么。
4.1 容器状态
docker ps 查看当前正在运行中的docker容器
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称。
4.1.1 容器的7种状态
- created(已创建)
- restarting(重启中)
- running 或 Up(运行中)
- removing(迁移中)
- paused(暂停)
- exited(停止)
- dead(死亡)
4.1.2 查看容器内的标准输出
在宿主主机内使用 docker logs 命令,查看容器内的标准输出:
方式:
- docker logs 容器id(短)
- docker logs 容器id(长)
- docker logs 容器名称
docker logs fa60e7213ce7
这里的容器id /CONTAINER ID 可以使用短的id,也可以使用长的容器id
fa60e7213ce7c7313848cd7c2cbd2a95193a1c93c1a4b17e5f6a02596a0e4582
使用容器名称
docker logs keen_hermann
4.2 停止容器
docker stop 容器id/name
[root@ecs-39233 ~]# docker stop keen_hermann
keen_hermann
[root@ecs-39233 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5、docker 容器使用
在终端中输入 docker 命令来查看到 Docker 客户端的所有命令选项。
5.1 镜像/image
5.1.1、拉取镜像
如果我们本地没有 ubuntu 镜像,我们可以使用 docker pull 命令来载入 ubuntu 镜像:
docker pull ubuntu
5.1.2、查看镜像 列表
docker images
5.2 、使用镜像,启动容器
使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:
$ docker run -it ubuntu /bin/bash
参数说明:
- -i: 交互式操作。
- -t: 终端。
- ubuntu: ubuntu 镜像。
- /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
要退出终端,直接输入 exit:
注意:
当本地没有镜像,通过镜像启动容器时,系统会自动拉取镜像,然后启动容器
5.3、查看容器列表
- 查看当前正在运行的容器:docker ps
- 查看历史启动过的容器:docker ps -a
一个镜像/image 可以启动多个容器,每个容器的id是不同的。
5.4、使用 docker start 启动一个已停止的容器:
docker start 容器id/name
$ docker start b750bbbcfd88
5.5、 后台运行docker容器 -d
后台运行docker 的服务,我们可以过 -d 指定容器的运行模式。
$ docker run -itd --name ubuntu-test ubuntu /bin/bash
参数说明:
- -d: 在后台运行容器,不进入容器
- -t: 终端。
- -i: 交互式操作
- --name ubuntu-test 指定容器名称为 ubuntu-test
- ubuntu: ubuntu 镜像。
- /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
5.6、停止一个容器
停止容器的命令如下:
$ docker stop <容器 ID/name>
5.7、重启容器
停止的容器可以通过 docker restart 重启:
$ docker restart <容器 ID>
5.8、进入容器
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
-
docker attach
-
docker exec:推荐大家使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止。
5.8.1 docker attach
$ docker attach 0119b146eac9
注意: 如果从这个容器退出,会导致容器的停止。
5.8.2 docker exec
docker exec -it 6d1d85879669 /bin/bash
- -t: 终端。
- -i: 交互式操作
注意: 如果从这个容器退出,容器不会停止
6、导出&导入&删除容器
6.1 导出容器为快照 docker export
如果要导出本地某个容器,可以使用 docker export 命令。
$ docker export 1e560fca3906 > ubuntu.tar
导出容器 1e560fca3906 快照到本地文件 ubuntu.tar。
6.2 导入容器到镜像/image
可以使用 docker import 从容器快照文件中再导入为镜像。
以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:
$ cat docker/ubuntu.tar | docker import - test/ubuntu:v1
此外,也可以通过指定 URL 或者某个目录来导入,例如:
$ docker import http://example.com/exampleimage.tgz example/imagerepo
6.3 删除容器
删除容器使用 docker rm 命令:
$ docker rm -f 1e560fca3906
下面的命令可以清理掉所有处于终止状态的容器。
$ docker container prune