学习docker的自我总结

时间:2025-03-25 15:48:11

一,docker运用的是镜像->容器的模式来部署环境的。

镜像:相当于前端npm远程仓库中的包,相当于php中composer远程仓库中包,也相当于linux,yum远程中的包。

把远程镜像(images)用docker pull拉取到本地,默认保存的目录是/var/lib/docker文件夹下。

容器:是用镜像docker run生成的。相当于镜像的一个实例,这里和类的概念有许类似。镜像可以看成是一个类。容器是这个镜像的实例。一个镜像可以实例出多个容器。

容器的二层理解:容器是一个独立的沙箱。每个容器之间完全独立相互不影响。可以用ip+端口的方式来访问容器里的服务。容器可以看成是一个操作系统+对应的服务。容器是复用了操作系的内核。每个容器里都有一个操作系统的内核,所以可以完全独立运行。互不影响。

困惑解答:centos镜像生成一个容器如何理解?容器本身就一个操作系统,难道在操作系统里又产出一个centos的系统?

有个问题要提前理解,容器只是复用了操作系统的内核,并不是完全复用整个操作系统,而且centos整个镜像也不是完整的操作系统,他是操作系统的应用层,这个镜像里并没有操作系统内核,内核用的是宿主操作系统的。这和mysql容器的概念一样。mysql容器也只是在操作系统的内核中运行了一个mysql服务。并不是在整个linux系统上运行这个服务。

困惑二:解答,关于容器ip地址的理解

同级容器(非docker in docker的情况)的ip属于同一个IP段,比如172.17.0.容器有自己的ip,但是ip段一致。所以对于宿主可以用每个容器对应的ip:端口的形式来访问每个容器提供的服务。

但是容器和宿主不在同一ip断上。比如宿主的ip可能是192.168这个ip段,所以对于宿主外部的主机,要想请求宿主上容器的服务,就不能直接用宿主的ip访问了。

这就需要在运行容的时候把容器的端口映射到宿主的端口上(如果需要宿主外部的主机访问容器),这样宿主外部的电脑就能访问宿主里的容器提供的服务了。

每个容器都相当于一个操作系统,所以进入容器以后也有自己的命令行,可以在这个命令行对容器内部的服务器进行修改。但是在宿主上只有访问容器服务的权限,无法对容器内部的配置进行修改。

二,docker compose的总结(一次性启动多个容器)

docker cmopose 的作用,是把一些了的容器生成命令放到一个配置文件中,这样在执行这个工程的时候就可把需要的容器一起生成。相当于用一个命令一次性生成了多个容器。

docker compose的安装是接下curl它的二进制文件放到/usr/local/bin/docker-compose这个文件中就可以了。然后给它设置可执行权限。就安装成功。

docker compose有3个部分组成:工程项目(project),服务(service),容器(container)。在项目(就是一个文件夹名字)中有一个配置文件是,在这个文件中配置服务和容器。一个服务里由多个容器组成。就是写容器的生成代码。类似docker run这种。但是是用的模板语法。

主要的功能实现都写在了这个配置文件中。然后运行这个项目的时候,就会自动去执行这个配置文件中的代码。

进入工程目录中,用docker-compose up -d命令就可以执行这个工程。

三,将docker容器保存为镜像

这样做可以用来为整个项目做迁移和备份

比如首先在宿主上装了一个centos容器,并且在这个容器中配置了所需要的环境。和运行了对应的项目。那只要把这个容器在保存为镜像,就可以在别的同内核的宿主上,直接用这个镜像生成容器就可以完成部署了。

具体命令有个3个

docker commit 将容器保存为镜像

docker save 将镜像备份为tar文件

docker load 根据tar文件还原成镜像

这样就可以根据镜像来生成容器,完成部署了。

四,根据镜像生成新的镜像(dockerfile)

先新建给项目文件夹

mkdir -p /usr/local/dockerjdk

cd /usr/local/dockerjdk

将需要的应用程序上传到这个目录

在该目录下创建Dockerfile文件,在其中进行对应的配置就可以。

然后在这个目录下执行

docker build -t='镜像名字',就可以打包成一个新的镜像。 

五,创建私有的docker镜像仓库

有了私有的镜像仓库,就可以把自己创建好的镜像(用容器打包成的镜像,或者用dockerfile根据镜像生成新镜像),上传到自己的私有镜像仓库,方便在不同的设备上镜像部署。