当前位置:   article > 正文

虚拟机下如何使用Docker(完整版)

虚拟机下如何使用Docker(完整版)

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 的意思。以下是解释

  1. -d 或 --detach:后台运行容器,并打印容器ID。容器将在后台运行,而非直接进入容器的命令行。
  2. -i 或 --interactive:使容器的标准输入保持打开,通常与 -t 结合使用,允许用户与容器的命令行进行交互。
  3. -t 或 --tty:为容器分配一个伪TTY,为容器分配一个终端,适合运行需要终端交互的命令行应用。
  4. --name:指定容器的名称,如果不指定,Docker会随机生成一个名称。
  5. -p 或 --publish:端口映射,格式为 <主机端口>:<容器端口>,将容器内部的服务端口暴露给主机。
  6. -v 或 --volume:数据卷挂载,格式为 <主机路径>:<容器路径>,用于将主机目录或文件映射到容器内。
  7. -e 或 --env:设置环境变量,格式为 <环境变量名>=<>,用来向容器传递环境变量。
  8. --restart:设置容器重启策略,如 always、unless-stopped、on-failure[:max-retries] 等,决定当容器停止或退出时如何自动重启容器。
  9. -w 或 --workdir:设置容器内部的工作目录。
  10. --network:指定容器的网络模式,可以是预创建的网络或默认网络。
  11. --rm:容器退出后自动删除容器文件系统和网络配置。
  12. -u 或 --user:指定运行容器的用户或UID。
  13. <image>:必须参数,指定要运行的镜像名称。
  14. [command]:容器启动时执行的命令和参数,如果不指定,则使用镜像的默认ENTRYPOINT和CMD。
  15. --privileged=true:它用于赋予容器更多的权限。当设置为 --privileged=true(或者简写为 -privileged)时,容器内的进程将获得几乎与宿主机相同的访问权限,包括但不限于:
  16. 所有设备的访问:容器可以访问宿主机的所有设备,比如硬件设备、内核模块等。
  17. CAP_SYS_ADMIN能力集:容器可以获得完整的Linux能力集,允许对系统进行高级操作,如修改网络接口、挂载文件系统、改变系统时间等。
  18. 安全设定绕过:容器可以不受seccomp、AppArmor等安全机制的限制。
  19. 其他内核资源完全控制:包括内核命名空间、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

这样他们就会变成两个镜像,我们可以把镜像做成容器,直接使用。

首先我们删除容器和镜像

完成

这两个都一样其实,接下来创建并打开容器

至此,流程结束。

希望可以帮助到大家~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/482348
推荐阅读
相关标签
  

闽ICP备14008679号