Docker实战
目录
- 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 '
This is a Demo HTML
' > /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]