目录
- docker简介
- docker体系架构与基本概念
- 安装docker
- 使用APT方式安装Docker
- 使用二进制文件方式安装(可自行尝试)
- Docker镜像
- 什么是Docker镜像
- 使用 Docker 默认的镜像存储路径
- 自定义 Docker 的镜像存储路径(不推荐,故不做演示,可自行尝试)
- 使用命令行工具管理 Docker 的镜像
- 构建自己的镜像
- 使用“docker commit”命令构建镜像
- 使用Dockerfile文件构建镜像
- 什么是Dockerfile
- 创建一个简单的Dockerfile文件
docker简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
1.DockerClient客户端
2.Docker Daemon守护进程
3.Docker Image镜像
4.DockerContainer容器
5.镜像仓库
docker体系架构与基本概念
Docker 实现了应用代码和底层运行环境之间的耦合。它可以将一个复杂系统中的各个模块进行容器化,同时提供了复杂均衡和失败迁移功能。应用的容器化,满足了敏捷开发、动态迁移、标准化的要求,从而大大提高了效率。
Docker 客户端和 Docker 守护进程可以运行在同样的系统上,也可以运行在不同的系统上。用户可以将一个 Docker 客户端连接到远程 Docker 守护进程中。Docker 客户端和守护进程,通过sockets 或 RESTFul API 进行沟通。
Docker 体系架构中的组成部分及其功能特性
组成部分 | 功能特征 |
---|---|
Docker 客户端 | 通常指 Docker 提供的命令行工具,是 Docker 最基本的用户接口。用户通过 Docker 客户端提交 Docker 指令,Docker 守护进程接收并执行该指令。Docker 也有图形化的客户端工具。 |
Docker 守护进程 | 在 Docker 宿主机上运行 Docker ,实际上运行的是 Docker 守护进程。用户并不直接和 Docker 守护京承交互,而是通过 Docker 客户端的命令和它进行交互。 |
Docker 镜像 | 一个 Docker 镜像是一个只读的模板。 |
Docker 容器 | 通过 Docker 镜像可以创建 Docker 容器。 Docker 的容器可以保存任何东西,而这些东西是运行一个应用所必须的。可以把 Docker 看成是一个虚拟机。 Docker 容器可以被运行、开启、停止、移动和删除。每一个容器都是一个分离的、安全的应用平台。 Docker 容器是 Docker 的运行组件。 |
Docker 镜像仓库 | Docker 的镜像仓库用于保存 Docker 镜像,它可以是公共的存储地方,也可以是私有的存储地方。 |
安装docker
宿主机系统:Ubuntu 22.04
Docker版本:24.0.5
使用APT方式安装Docker
sudo apt-get update
sudo apt search docker
sudo apt-get install docker.io
sudo docker --version
或者
sudo docker info
或者
systemctl status docker
使用二进制文件方式安装(可自行尝试)
至此 docker 已经安装完成
Docker镜像
什么是Docker镜像
Docker 的镜像是一个模板,或者说是一个只读文件。在该模板长包含应用和应用运行时所需要的以来环境。 Docker 的镜像采用的是分层的文件系统,每一次对镜像的修改将以“读写层”的形式增加到原来的只读文件的木板上。
Docker 默认的镜像的存储路径是“/var/lib/docker”,也可以自定义其他路径。
使用 Docker 默认的镜像存储路径
通过下面的命令可以得知 Docker 镜像的存储路径。
sudo docker info | grep "Docker Root Dir"
从镜像仓库中搜索一个符合的镜像
sudo docker search mysql
拉取该镜像
sudo docker pull mysql
查看镜像
sudo docker images
切换到root用户,即可看到我们刚刚下载的MySQL镜像
sudo su -
cd /var/lib/docker/image/overlay2/imagedb/content/sha256
自定义 Docker 的镜像存储路径(不推荐,故不做演示,可自行尝试)
# 创建新的镜像存储路径“/data/docker/images”,该路径用于保存Docker的镜像文件
sudo midkr -p /data/docker/images
# 创建Docker守护进程的配置文件
cd /etc/docker
sudo touch daemon.josn
# 配置内容如下:
{"graph":"/data/docker/images"
}
# 重新加载docker服务,并重启docker
systemctl daemon-reload
systemctl restart docker
使用命令行工具管理 Docker 的镜像
命令 | 说明 |
---|---|
docker build | 命令可以用来使用 Dockerfile 创建镜像。 |
docker search [IMAGE NAME] | 在拉取镜像之前,可以通过该命令搜索符合的镜像 |
docker images | 列出本机上所有镜像。该命令行可以使用通配符,以找到符合条件的一系列镜像 |
docker inspect [IMAGE NAME] /[CONTAINER ID] | 通过docker images 命令只能查看镜像的基本信息,而通过 docker inspect 命令则可以查看镜像或者容器的详细信息 |
docker import | 用于从归档文件中创建镜像。 |
docker pull [IMAGE NAME] | 将镜像来取到本地。镜像名必须包含命名空间喝仓库名。如果在一个仓库中存在多个镜像,则必须指定TAG,即指定版本信息,否则使用默认的TAG “latest” |
docker push [IMAGE NAME] | 将本地的镜像上传到镜像仓库中 |
docker rmi [IMAGE NAME] /[IMAGE ID] | 将不需要的镜像删除。如果删除多个镜像,则需要使用空格将他们隔开;可以使用参数-f强制删除镜像 |
docker tag | 用于给镜像打标签。 |
docker save -o, --output | 将归档文件输出到的文件。 |
docker load | 用于从 tar 归档文件或者标准输入流载入镜像。 |
将镜像归档
将归档文件重新加载为镜像,加载完以后需要重新命名。
镜像重命名
删除镜像
构建自己的镜像
要构建自己的镜像又两种方式:1.使用“docker commit”命令;2.使用Dockerfile文件。
使用“docker commit”命令构建镜像
“docker commit” 命令是基于一个容器来创建镜像。
这是执行完 “docker commit” 命令以后,本地镜像列表的对比。使用 “docker commit” 命令构建镜像比较简单,也比较直观。但是再实际环境中并不会这样使用,因为:只有生成镜像的人才知道执行过什么命令、怎么生成的镜像,而别人根本无从得知。这就是一种“黑箱”操作,不利于镜像的维护,也不能实现复用。
使用Dockerfile文件构建镜像
什么是Dockerfile
Dockerfile 是一个文本文件,其中包含了一条条的指令,每一条指令都用于构建镜像中的一层。Dockerfile 文件可以使用“docker build”命令进行编译。在编译过程中,每一条指令的内容描述了该层应该如何进行构建。当我们需要定制自己额外的需求时,只需要再Dockerfile文件的基础上添加或者修改指令,重新生成新的镜像即可。
创建一个简单的Dockerfile文件
创建一个Dockerfile文件,在该文件中输入一下命令。
FROM nginx
RUN echo '<h1>This is a Demo HTML</h1>' > /usr/share/nginx/html/index.html
当前目录下执行
sudo docker build -f ./Dockerfile -t test:1.0.1 .
# 其中-f:指定Dockerfile;-t:为镜像打标签;
sudo docker images
构建过程
查看镜像
使用新生成的镜像创建容器。
sudo docker run -d -p 8899:80 [IMAGE ID]
# 其中-d:打印容器id;-p:映射端口号
使用浏览器访问宿主机的8899端口,可以看到如图所示:
停止容器
sudo docker stop [CONTAINER ID]
删除容器
sudo docker rm [CONTAINER ID]