14. Docker入门

1.前言

如果你长期写C/C++代码,那你应该很容易发现C/C++开源项目存在的一个严重问题:只要作者没有将源码编译为可执行文件、现成的动静态库,需要我们自己去编译,就会有极大概率编译不出来、报各种错。

究其根本在于C/C++过于复杂,尤其是其代码的编译环境往往需要各种依赖,并且在各个操作系统上的环境依赖还有很大可能是不一致的。

而本文要介绍的docker便能很好的解决这个问题,但其解决的也不仅仅只是这一个问题。

事实上并不只是C/C++语言,各种项目交付都会由于各种各样的环境原因,导致其在作者电脑上可以跑起来,可一旦将其交给客户,就会有相当大的概率跑不起来。

比如如今大火的各种大语言模型,如果你尝试过自己去本地部署大模型,就会知道其过程的艰辛了,其对新手是相当不友好的。

而docker就是这样的一个容器技术:它不仅仅只发布项目本身,它还会发布想要让项目运行起来所需要的一切环境。

甚至你可以简单的将其理解为,docker容器就是一个非常小型的系统,你可以在该系统中安装所有需要的依赖环境、以及告诉它如何启动我们的程序。

此时它就带来了一个惊人的好处:只要你能本地将其跑起来,那么你将其打包后发给别人,别人就一定能跑起来!

原因就在于,所有依赖环境此时都已经在docker容器内部了!

但要注意,docker容器内的系统是linux/unix环境,并不支持运行windows软件。

2.docker安装

不同系统安装docker环境的方式并不完全相同,相比之下Windows系统安装docker环境更加简单,只需要下载安装Docker Desktop即可:Docker Desktop

image.png

进入安装界面,勾选所有配置,然后直接点击Ok,等待其安装完成。

然后打开软件,点击Accept:

image.png

直接无账号使用即可,如果后续你需要发布自己打包的镜像,就需要自己去注册一个账号登录了:

image.png

然后下一步是选择身份,直接跳过即可:

image.png

然后我们就进入到docker的主页面了:

image.png

虽然初次看起来你可能感觉有点懵,但事实上大多数时候我们都只用的上图中的三个页面。

  • Contailers:我们此时运行中的容器
  • Images:我们下载、打包的所有镜像
  • Volumes:持久化卷

其中第一个容器很好理解,就是我们前面介绍的,它不仅仅包含了程序本身,还包含了需要运行程序的所有依赖环境。

而镜像,就是容器的基础,如果你安装过Windows系统就知道,Windows系统实际上是在一个以.ios结尾的镜像文件中的,通过下载、安装、运行该镜像才形成了我们所看到的各种各样的定制化的Windows系统。

而这里的镜像也是类似的含义:作者将所有需要的东西全部打包为一个镜像,并暴露出一些可以由使用者自定义的选项,使用者只需要填写这些选项运行镜像,就形成了一个自己的容器!

一个最简单的实例就是,一个包含了web服务器的docker镜像需要暴露出端口访问,虽然业界都使用80与443作为端口使用,但这并不能满足所有人的需求,有的人可能自己电脑上这两个端口已经有其它服务占了,想要使用其它端口启动该web服务。

此时打镜像的作者就可以将这个选项预留出来打成镜像,然后使用者就可以自行定义端口、启动镜像,将其作为一个容器进行运行。

3.docker基本使用

docker使用起来是非常简单的,如果我们不需要自己打镜像、只是使用别人提供的镜像。

其官方网站为:Docker Hub

里面拥有大量别人已经打好的镜像,我们可以直接拉取下来使用。

比如我们现在想要用docker启动一个web服务器,那么我们可以直接进入docker hub搜索httpd:

image.png

可以看到,它是docker官方提供的http服务器镜像,下方的页面就是使用它的教程示例。

不过其介绍的是另外一种自己打镜像的方式,这个后面再介绍,现在我们先来试一试最简单的方式。

首先看到该镜像的各种版本,一般其放在了最前面:

image.png

但大多数时候为了简单,我们一般是直接选择latest,也就是最新的一个版本。

然后打开我们的命令行,运行下面这句命令拉取镜像:

作者:余识
全部文章:0
会员文章:0
总阅读量:0
c/c++pythonrustJavaScriptwindowslinux