最近在盘gitlab.0.先review了一下docker

# 正文

本猿所在产品的代码是保存到了一个本地gitlab实例上,实例是别的同事搭建的。最近又又又想了解一下,而且已经盘了一些了,所以写写记录一下。因为这个事儿没太多的进度压力,索性写到哪儿算哪儿,只要是新了解到的知识就都写,不一定一直说gitlab:随时跑题、跑完就回来、差不多就结束文章,只要帖子里有点儿东西就行。

要说盘gitlab,没有个环境用来练习是很难的,或者说都不会搭建环境,那就是没根儿。所以怎么搭建环境呢?公司的这个是2个docker容器,一个gitlab实例的,一个nginx的。好了,开始第一次跑题,说一下docker。docker一词的英文原意是码头工人、码头装卸工**[e1]** ,所以想先从单词原意入手得到个感性认识是没大有戏了。看看官网docker.com**[e2]**,说docker是个平台,用来开发、移动、运行应用程序的,原话是:an open platform for developing, shipping, and running applications。当然优点必须很多。

docker这个平台是通过一个叫"容器"的东东提供打包和运行应用程序的环境。"容器"一词对应的英文是"container",容器里已经包含了应用运行所需要的东西,所以就不用再依赖宿主机的了,原话是:Containers are lightweight and contain everything needed to run the application, so you don't need to rely on what's installed on the host。下一句是You can share containers while you work, and be sure that everyone you share with gets the same container that works in the same way。就是说,想要把开发成果部署在不同的环境,那就在不同的环境部署一下容器;如此,不同环境部署的开发成果就是一样的,避免一些类似"我这里能运行啊,你用的那个环境有问题吧"的拉扯。

比如我们可以把一个系统拆成很作组件:前端、数据库、底层服务等,一个组件做程一个容器;每个组件是一个独立的进程,它们在自己的、独立的环境中运行,和宿主机上别的东西隔离。实际上,通过vmware或pve这种平台在一套硬件资源上安装不同的虚拟机进而部署不同的应用也有这个效果;那么相比虚拟机,使用容器有什么好处呢?操作系统本身是有重量的:一个什么应用都不运行的操作系统也要消耗一定的磁盘、内存以及CPU算力,这算是一种"overheads"[e3] ;而容器技术就可以节省这些"overheads",同时带来的一个好处就是重启时更快。我们看docker的图标很像一个载着很多集装箱的、鲸鱼形状的轮船**[e4],**大概就是把轮船的运力比作硬件资源、把容器比作集装箱吧。docker官网的说法更好懂:

接下来是我读docker官网文档时记录的一些笔记,我是用过一点儿docker了,觉得写成这个程度自己能看懂;但不一定对初识docker的人那么友好;所以,觉得不好懂就去docker.com上的文档吧,毕竟再好的翻译也不如原文。

/* 私房docker 笔记,开始 */

Docker是CS架构的,Docker Client给Docker Daemon发消息,然后Docker Daemon干创建容器、运行重启、部署容器这样的重活儿。Docker的前后端可以在同一台设备上,也可以在不同的设备上,它们通过一个REST API通讯,REST API通过UNIX套接字实现(本地or网口)。还有一个docker客户端叫Docker Compose,Docker Compose可以lets you work with applications consisting of a set of containers,就是把一堆容器的配置按语法写到文件里,然后Docker Compose就可以根据配置一次启动若干容器。

Docker Daemon名为dockerd**[e5]** ,它监听上文说到的REST API请求,然后管理像images、containers、networks、volumes这些Docker objects。而且,Docker Daemon还可以和其它的Docker Daemon服务交互。Docker Client就是我们以后会经常敲的docker命令,这是和Docker Daemon通讯的最基础的方式。比如我们从bash上执行了一个docker run <container-id>,以我的环境为例**[e6]**,就是可执行程序/usr/bin/docker给dockerd进程发消息,然后让dockerd干活儿。

Docker Desktop是一个可以安装在Mac、windows或者linux系统上的程序,有这个就可以从办公电脑上创建并分享容器化的应用和微服务了。Docker Desktop包含了:

Docker daemon、Docker client、Docker Compose、Docker Content Trust、Kubernetes以及Credential Helper.

Docker registry是保存docker镜像的地方,Docker Hub是一个公开的Docker registry,所有人都可以从Docker Hub上查找并使用镜像。当执行docker pull或者docker run命令时,Docker就会从配置文件里的Docker registry拉取镜像;当然,也可以push镜像。

上边说到过Docker objects,包含镜像、容器、networks、volumes、plugins以及其它对象。挨个说说吧。镜像,images,是一个包含了创建容器命令的只读模板。通常,镜像是基于别的镜像来制作的,比如我们可以从docker hub上拉取ubuntu的镜像,安装上阿帕奇的web server和自己的应用、部署上自己的配置,然后打成新的镜像。dockerfile就是创建镜像时使用的,里面包含了一个创建镜像、运行镜像必要步骤的指令;原句是To build your own image, you create a Dockerfile with a simple syntax for defining the steps needed to create the image and run it;然后紧跟一句"Each instruction in a Dockerfile creates a layer in the image",所以我觉得这里说的dockerfile里面保存的应该是"指令",而不是字面上的"语法"。当修改了dockerfile并重新制作镜像时,Docker只会重建有修改的layer;这也是镜像/容器技术相比虚拟化技术更轻量、快速的原因之一。

说容器,它是一个可以运行的、镜像的实例:A container is a runnable instance of an image。可以创建、启动、停止、移动、删除容器。可以把容器连接到一个或多个网路,可以给容器挂载存储,还可以根据容器的当前状态创建新的image。

/* 私房docker 笔记,结束 */

好了,今天就这些吧。

# ENDNOTES

e1

e2.1

e2.2

e2.3

e3

e4

e5

e6

相关推荐
namelijink3 小时前
docker-compose部署下Fastapi中使用sqlalchemy和Alembic
adb·docker·fastapi
水彩橘子3 小时前
docker+ffmpeg+nginx+rtmp 拉取摄像机视频
nginx·docker·ffmpeg
默凉4 小时前
docker GPU安装
docker
田振靓4 小时前
Ubuntu 上安装 Docker
ubuntu·docker
Gavino.5 小时前
记录将springboot的jar包和lib分离,使用docker-compose部署
spring boot·docker·jar
dessler5 小时前
Docker-网络&跨主机通信
linux·运维·docker
PyAIGCMaster7 小时前
docker学习记录:创建python环境,使用vscode连接远程docker环境,使其访问同为docker镜像的mongodb的设置。
学习·docker·容器
IT搬砖攻城狮7 小时前
超完整Docker学习记录,Docker常用命令详解
运维·docker·容器·容器化部署
松果猿10 小时前
使用 Docker 容器化部署 Spring Boot + Vue 项目:以若依后台管理系统为例
docker
迷路爸爸18011 小时前
在 CentOS 上安装 Docker 和 Docker Compose(可指定版本或安装最新版本)
linux·docker·centos