思源笔记Docker容器化部署

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了思源笔记Docker容器化部署相关的知识,希望对你有一定的参考价值。

参考技术A

思源笔记是一款本地优先的 个人知识管理系统 ,支持完全离线使用,支持 Docker 部署 ,通过 Docker 镜像将思源部署在服务器上来搭建自己的云端笔记,通过授权码控制访问权限,方便多人协作。

但是官方的Docker部署教程需在安装完成后才能查看[捂脸],网上现有Docker部署资料亦有错误及不完善之处,因此基于 2022年4月22日 b3log/siyuan:v2.0.0 版编写此教程分享给大家。

容器官方发布地址 :https://hub.docker.com/r/b3log/siyuan

部署步骤

一:拉取镜像

二:创建数据本地存储目录并授权

三:部署

部署参数说明:

权限说明:

grammarly-extensiongrammarly-extension镜像中是使用默认创建的普通用户 siyuan(uid 1000/gid 1000)来启动内核进程的,所以在宿主机创建工作空间文件夹时请注意设置该文件夹所属用户组:chown -R 1000:1000 /siyuan/workspace,在启动容器时需要带参数 -u 1000:1000。

Docker镜像升级

为保证数据完整,建议部署时映射文件存放目录至本地

Docker学习笔记——Docker安装启动

文章目录


一、虚拟化分类

1. 主机虚拟化和容器虚拟化的优缺点

  • 主机虚拟化
    • 应用程序运行环境强隔离
    • 虚拟机操作系统与底层操作系统无关化
    • 虚拟机内部操作不会影响到物理机
    • 拥有操作系统会占用部署资源以及存储
    • 网络传输效率低
    • 当应用程序需要调用硬件响应用户访问时间延迟较大
  • 容器虚拟化
    • 可以实现应用程序的隔离
    • 直接使用物理机的操作系统可以快速响应用户请求
    • 不占用部署时间
    • 占用少量磁盘空间
    • 网络控制与主机虚拟化有所区别、服务治理

2. 容器所涉及内核技术

NameSpce

NameSpce :Namespace 可以为容器提供系统资源隔离能力,把不同的资源放到不同的命名空间里,这些资源是相互隔离的。

什么是命令空间?

应用程序运行环境隔离的空间,就是一个命名空间,每个空间都将拥有UTS、IPC、Mount、Net、User、PID,6大命名空间,也可以叫做6大子命名空间。每个容器就是一个命名空间

  • UTS:每一个NameSpace都拥有独立的主机或域名,可以把每个NameSpace认为一个独立主机
  • IPC:每个容器依旧使用linux内核中进程交互的方法,实现进程间通信
  • Mount:每个容器的文件系统是独立的
  • Net:每个容器的网络是隔离
  • User:每个容器的用户和组ID是隔离,每个容器都拥有root用户
  • PID:每个容器都拥有独立的进程树,由容器是物理机中的一个进程,所以容器中的进程是物理机的线程

CGroups

Control Group(控制组),是LInux内核的一个特性,主要用俩对共享资源进行隔离、限制、审计等、只有能控制分配到容器的资源,才能避免多个容器同时运行时对宿主机系统的资源竞争,控制组可以提供对容器的内存、CPU、磁盘IO等资源进行限制和计费管理,控制组的设计目标是为不同的应用情况提供统一的接口,从控制单一进程到系统机虚拟化。

具体来看控制组提供

  • 资源限制:可以将组设置不为超过设定的内存限制,比如内存子系统可以为进程组设定一个内存使用上限,一旦进程组的内存到到上限再申请内存,就会发出 Out of Memory警告
  • 优先级:通过优先级让一些组优先得到CPU的资源调度
  • 资源审计:用来统计系统实际上把多少资源用到合适的目的上,可以使用cpuacct子系统记录某个进村组使用的CPU时间
  • 隔离:为组隔离命令空间,这样一个组不会看到其它组的进程、网络连接和文件系统
  • 控制:挂起、恢复和重启等操作

9大子系统

  • 把资源定义为子系统,可以通过子系统对资源进行限制
  • CPU 可以让进程使用CPU的比例
  • memory 限制内存使用,例如50Mi,150Mi
  • blkio 限制块设备的IO
  • cpuacct 生成Cgroup使用CPU的资源报告
  • cpuset 用于多CPU执行Cgroup时,对进程进行CPU分组
  • devices 允许或拒绝设备的访问
  • freezer 暂停或恢复Cgroup运行
  • net_cls 标记每个网络包
  • ns 名称空间子系统

Cgroup应用案例

安装

# yum install libcgroup* -y
# systemctl start cgconfig
# systemctl enable cgconfig
  • Cgroup限制对CPU使用的步骤

    使用cpu子系统创建2个cgroup
    # vim /etc/cgconfig.conf
    group lesscpu 
    	cpu 
    		cpu.shares=200;
    	 
     
    group morecpu 
    	cpu 
    		cpu.shares=800;
    	
    
    
    # systemctl restart cgconfig
    
    # cgexec -g cpu:lesscpu md5sum /dev/zero
    #终端1
    # cgexec -g cpu:morecpu sha1sum /dev/zero
    #终端2
    # top
    #终端3
    

  • Cgroup内存限制

    # vim /etc/cgconfig.conf
    group lessmem 
        memory 
            memory.limit_in_bytes=26214400;
            memory.memsw.limit_in_bytes=26214400;
    	 
    
    
    # systemctl restart cgconfig
    
    # mkdir /mnt/mem_test
    # df -h
    Filesystem               Size  Used Avail Use% Mounted on
    devtmpfs                 908M     0  908M   0% /dev
    tmpfs                    920M     0  920M   0% /dev/shm
    tmpfs                    920M  9.0M  911M   1% /run
    tmpfs                    920M     0  920M   0% /sys/fs/cgroup
    /dev/mapper/centos-root   17G  1.5G   16G   9% /
    /dev/sda1               1014M  150M  865M  15% /boot
    tmpfs                    184M     0  184M   0% /run/user/0
    # mount -t tmpfs /dev/shm /mnt/mem_test
    # df -h
    Filesystem               Size  Used Avail Use% Mounted on
    devtmpfs                 908M     0  908M   0% /dev
    tmpfs                    920M     0  920M   0% /dev/shm
    tmpfs                    920M  9.0M  911M   1% /run
    tmpfs                    920M     0  920M   0% /sys/fs/cgroup
    /dev/mapper/centos-root   17G  1.5G   16G   9% /
    /dev/sda1               1014M  150M  865M  15% /boot
    tmpfs                    184M     0  184M   0% /run/user/0
    /dev/shm                 920M     0  920M   0% /mnt/mem_test
    # cgexec -g memory:lessmem dd if=/dev/zero of=/mnt/mem_test/file1 bs=1M count=200
    200+0 records in
    200+0 records out
    209715200 bytes (210 MB) copied, 0.297781 s, 704 MB/s
    [root@docker ~]# rm -rf /mnt/mem_test/file1
    [root@docker ~]# cgexec -g memory:lessmem dd if=/dev/zero of=/mnt/mem_test/file1 bs=1M count=500
    Killed
    

二、Docker安装和基本使用

DocKer官网

1. 获取yum源

1.安装一些必要的系统工具

# yum install -y yum-utils device-mapper-persistent-data lvm2

2.通过yum-config-manager获取docker-ce.repo

# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# ls /etc/yum.repos.d/
CentOS-Base.repo       CentOS-fasttrack.repo  CentOS-Vault.repo
CentOS-CR.repo         CentOS-Media.repo      CentOS-x86_64-kernel.repo
CentOS-Debuginfo.repo  CentOS-Sources.repo    docker-ce.repo

2.安装docker-ce

# yum repolist
docker-ce-stable                                                   | 3.5 kB  00:00:00     
(1/2): docker-ce-stable/7/x86_64/updateinfo                        |   55 B  00:00:01     
(2/2): docker-ce-stable/7/x86_64/primary_db                        |  82 kB  00:00:01     
repo id                                   repo name                                 status
base/7/x86_64                             CentOS-7 - Base                           10,072
docker-ce-stable/7/x86_64                 Docker CE Stable - x86_64                    169
extras/7/x86_64                           CentOS-7 - Extras                            516
updates/7/x86_64                          CentOS-7 - Updates                         4,244
repolist: 15,001

# yum -y install docker-ce

3. 启动docker


# 启动docker
[root@docker ~]# systemctl stop docker
[root@docker ~]# systemctl enable docker

[root@docker ~]# docker version          
Client: Docker Engine - Community
 Version:           20.10.18
 API version:       1.41
 Go version:        go1.18.6
 Git commit:        b40c2f6
 Built:             Thu Sep  8 23:14:08 2022
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.18
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.18.6
  Git commit:       e42327a
  Built:            Thu Sep  8 23:12:21 2022
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.8
  GitCommit:        9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
  
  
如果出现Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
# 重启docker
# systemctl restart docker

下一篇docker管理容器

以上是关于思源笔记Docker容器化部署的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Docker 部署容器

docker-Django容器化部署

Golang项目部署3,容器部署

Docker多容器部署LNMP环境

容器化部署——docker常用命令

Docker学习笔记(4-3)Docker容器内部署静态网站