Docker详细介绍:
Docker 是一款开源的应用容器引擎,由Docker公司最初开发并在2013年发布。Docker的核心理念源自于操作系统级别的虚拟化技术,尤其是Linux上的容器技术(如LXC),它为开发人员和系统管理员提供了一种标准化、轻量级的方式来打包、分发和运行应用程序及其依赖环境。
**Docker的三大核心概念:**
1. **镜像(Images)**:
- Docker镜像是构建容器的基础,是一种只读模板。它可以看作是一个包含了运行应用程序所需的所有文件、依赖库和其他配置信息的文件系统层次结构。镜像不包含动态数据,且通常是基于先前镜像层叠加创建的,具有存储效率高、易于分发的特点。
2. **容器(Containers)**:
- Docker容器是从镜像启动的运行实例,它是对操作系统资源的隔离和限制的虚拟化单元。容器之间互不影响,各自运行在一个独立的环境中,共享宿主机内核,但拥有自己的文件系统、CPU、内存、网络资源等,从而实现了轻量级的虚拟化效果。
3. **仓库(Registries)**:
- Docker仓库是用来存储和分发Docker镜像的地方,其中最知名的是Docker Hub。用户可以上传自己的镜像,或者下载其他人分享的镜像。企业级场景下,也会搭建私有仓库以满足安全性和合规性需求。
**Docker的主要优势:**
-
**便携性**:开发人员可以在本地创建包含应用及其全部依赖的镜像,确保这个镜像能在任何支持Docker的环境中一致地运行。
-
**资源高效**:相比于传统的虚拟机,Docker容器不需要额外的Hypervisor开销,因此启动更快、占用资源更少。
-
**一致性**:确保应用在开发、测试和生产环境间的一致性,简化部署流程,减少环境差异导致的问题。
-
**隔离与安全性**:容器之间相互隔离,通过控制组(cgroups)和命名空间等机制确保资源管理和安全隔离。
**Docker生态工具**:
-
`docker run`:用于启动容器的命令,可以从镜像创建并运行一个新容器。
-
`docker-compose`:用于定义和运行多容器应用程序,通过YAML文件(docker-compose.yml)集中管理多个容器及其依赖关系和服务编排。
-
Docker Swarm:原生的集群管理工具,用于在多台主机上部署容器化的应用作为单一的虚拟系统。
由于Docker带来的便利性和标准化,它极大地推动了微服务架构的发展,成为现代云计算和持续集成/持续部署(CI/CD)工作流中的重要组成部分。
Docker使用教程:
sudo -i 提升权限
Ubuntu: apt install docker.io
Centos: yum install docker.io
ubuntu举例:
安装成功后输入 docker --version 查看版本 如果显示信息则代表安装成功
docker run hello-world
这个命令相当于从仓库拉取一个helloworld镜像并运行,也是docker经典的测试镜像。
成功。
接下来我们可以随便拉取一个镜像,这边选择centos7,大家也可以自行选择。
拉取成功
查看全部镜像
这就是我们刚刚拉取的hello-world和centos7镜像。接下来我们把它做成容器,这样才能供我们使用
相信大家看到这可能会疑惑这些-it -d 的意思。以下是解释
-d 或 --detach:后台运行容器,并打印容器ID。容器将在后台运行,而非直接进入容器的命令行。
-i 或 --interactive:使容器的标准输入保持打开,通常与 -t 结合使用,允许用户与容器的命令行进行交互。
-t 或 --tty:为容器分配一个伪TTY,为容器分配一个终端,适合运行需要终端交互的命令行应用。
--name:指定容器的名称,如果不指定,Docker会随机生成一个名称。
-p 或 --publish:端口映射,格式为 <主机端口>:<容器端口>,将容器内部的服务端口暴露给主机。
-v 或 --volume:数据卷挂载,格式为 <主机路径>:<容器路径>,用于将主机目录或文件映射到容器内。
-e 或 --env:设置环境变量,格式为 <环境变量名>=<值>,用来向容器传递环境变量。
--restart:设置容器重启策略,如 always、unless-stopped、on-failure[:max-retries] 等,决定当容器停止或退出时如何自动重启容器。
-w 或 --workdir:设置容器内部的工作目录。
--network:指定容器的网络模式,可以是预创建的网络或默认网络。
--rm:容器退出后自动删除容器文件系统和网络配置。
-u 或 --user:指定运行容器的用户或UID。
<image>:必须参数,指定要运行的镜像名称。
[command]:容器启动时执行的命令和参数,如果不指定,则使用镜像的默认ENTRYPOINT和CMD。
--privileged=true:它用于赋予容器更多的权限。当设置为 --privileged=true(或者简写为 -privileged)时,容器内的进程将获得几乎与宿主机相同的访问权限,包括但不限于:
所有设备的访问:容器可以访问宿主机的所有设备,比如硬件设备、内核模块等。
CAP_SYS_ADMIN能力集:容器可以获得完整的Linux能力集,允许对系统进行高级操作,如修改网络接口、挂载文件系统、改变系统时间等。
安全设定绕过:容器可以不受seccomp、AppArmor等安全机制的限制。
其他内核资源完全控制:包括内核命名空间、cgroups等系统的完整控制权。
创建成功
进入容器
接下来我们就可以在容器里尽情释放才华,作者才华不够,就写一个txt文件好了。。。
接下来就是docker的很方便的一个地方,移植性。
退出容器
此时我们要进行的是打包容器,如果是平时我们的使用我们可以选择commit容器,提交成一个镜像,然后把镜像save成tar文件,但是注意,如果是公用考虑产品以后会在docker上迭代更新的话我们可以采用export,因为如果一直commit save的话最后的容器的大小可能会越来越大!这个就涉及到docker的一些底层原因,如果有小伙伴愿意深究可以点下方链接。
docker容器commit之后变得非常大的原因及解决办法_docker commit提交后镜像更大了-CSDN博客
转载于:CrystalheartLi
commit save 流程:
语法:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-
**-a :**提交的镜像作者;
-
**-c :**使用Dockerfile指令来创建镜像;
-
**-m :**提交时的说明文字;
-
**-p :**在commit时,将容器暂停。
commit save方法:
docker commit -a "bbxwg" centos7 mycentos7:1.0
save
导出成功
export 方法:
大家是否会疑惑这两个镜像有何不同呢?如果说是正常使用的话没什么不同
- save操作镜像,是保存一个完整的镜像,包含分层系统统一打包;
- export操作容器,是导出容器当前的操作系统,不包含分层系统,仅包含当前系统中的状态。
- save保存的是镜像(image),export保存的是容器(container)。
接下来就是导入环节。
我们可以换个虚拟机,如果嫌麻烦的话可以直接在本机操作。
注意:我们用save保存的镜像也就是img.tar我们需要用load下载,而export的镜像我们需要用import下载,否则无法下载成功!!
docker load -i img.tar
docker import img2.tar
这样他们就会变成两个镜像,我们可以把镜像做成容器,直接使用。
首先我们删除容器和镜像
完成
这两个都一样其实,接下来创建并打开容器
至此,流程结束。
希望可以帮助到大家~