Docker
Docker 概述
Docker
是一种容器化技术
,用于隔离应用之间的边界问题。
Docker
最常见的两个概念是:镜像(Image)
、容器(Container)
。
镜像(Image)
镜像(Image)
是当前程序运行时所使用的所有文件资源。可以简单理解为镜像(Image)
中包含程序运行所需要的所有文件资源(包括系统程序的文件资源)。
例如一个前端应用镜像,需要依赖 Nginx
服务器, Nginx
依赖系统。
所以一个前端应用程序镜像包含了操作系统文件资源、Nginx
文件资源。
所以镜像可以随意进行 “搬运” ,而不受宿主环境(本地系统)影响。
镜像(Image)
设计方案是分层设计的,社区内提供大量的基础镜像,可以利用这些基础镜像来构建镜像。
例如前端应用镜像,直接使用 Nginx
镜像构建镜像,就相当于在 Nginx
镜像层中又加了一层。 而 Nginx
镜像也是在 系统镜像层 上加的一层。
分层带来了诸多好处。
PS:
Docker
并不是完全不受系统环境的影响,Docker
容器是运行在宿主环境上,在软件层面上进行的隔离,而并非虚拟机那种直接在硬件上进行隔离
PS:
镜像(Image)
的层级划分实际上更为精细。在 Dockerfile 文件中, 一个语句就是一层。
容器(Container)
容器(Container)
是根据镜像(Image)
在系统中创建的一个进程,只不过对这个进程做了某些特殊处理。例如: 隔离限制(Namespace)
和 资源限制(Control Group)
简单的可以理解为 容器(Container)
就是一个受限制的进程。
Docker
和容器化
里面有很多东西,有兴趣可以自行学习
Docker 部署
HTTPS
工具
Docker
安装需要 HTTPS
协议安装,一般第一步都是安装 apt-transport-https
sudo apt install apt-transport-https ca-certificates curl software-properties-common
腾讯云服务器中已经具有了 HTTPS
协议的包,所以直接省略此步骤,没有的话使用上面语句进行安装
添加 Docker 存储库密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
添加 Docker 存储库 apt
源
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
[arch=amd64]
表示amd64
架构,其它还具有armhf
、arm64
等架构$(lsb_release -cs) stable
表示稳定版。还有edge(体验)
、test(测试)
apt
源添加成功后可以在 /etc/apt/sources.list
文件查看
然后更新 apt
配置文件
sudo apt update
安装 Docker CE
Docker
版本分为 Docker EE(企业版)
和 Docker CE(社区版)
。
Docker EE
提供了一些收费的高级特性。
可以使用 apt
查看当前可用的Docker CE
版本
apt list -a docker-ce
在写这篇文章时的最新的版本时 Docker-CE 20.10.12
,在此就安装Docker-CE 20.10.12
sudo apt install docker-ce=5:20.10.123-0ubuntu-focal
安装成功后可以取消 Docker
的自动更新,防止版本更新导致错误。
sudo apt-mark hold docker-ce
Docker 启动与设置
启动 Docker
服务
service docker start
启动成功后可以执行 Docker
命令
添加用户到 Docker
组
在非 root
用户执行 Docker
命令必须使用 sudo
,这是一个繁琐的过程,可以将指定用户添加至 Docker
组解决这个问题
添加用户至 Docker
组
sudo usermod -aG docker [USER]
添加完毕后需要重新登陆才生效
设置 Docker
镜像源
Docker
默认镜像源地址是在国外,镜像拉取会很慢,可以将镜像源改为国内镜像源
修改 Docker
默认源是修改 /etc/docker/daemon.json(没有此文件,可以自行创建)
在此文件中添加国内镜像,可以添加一个或多个。
在此添加了 网易镜像源 、中国科技大学镜像源 、Docker 官方中国区镜像源
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com"
]
}
添加完毕后需要重启 Docker
服务
sudo systemctl daemon-reload
sudo systemctl restart docker
重启成功后可以使用 docker info 命令查看修改的结果
其中 Registry Mirrors 就是镜像源属性。
Docker Compose
Docker Compose 概述
Docker Compose
是一个 Docker
编排工具(容器组管理)。可以对多个 容器
合并到一个组进行管理。
在现实场景中,一个项目往往具有多个应用,一个项目可能会具有多个容器组成,也就是形成一个容器组。Docker Compose
就是提供这个组的管理工具。
PS: 容器是一个原子单位,虽然可以直接将多个应用(多个进程)打包在一个容器内,但是不推荐这样做,容器应保持单进程执行
Docker Compose
使用了 YAML
标记语言作为配置文件,所以使用 Docker Compose
管理容器
还有一个好处是使用文件形式组织容器配置,而不是单纯的命令行
容器编排工具还有其它工具,比如鼎鼎大名的 kubernetes(k8s)
,还有 Docker SWARM
、K3s
等。
企业级别的一般都是用 kubernetes(k8s)
,不过个人且还是小 4G 服务器还是算了。
一开始我想选择 K3s
,但是那玩意部署也有些麻烦,占用资源也不少,且想了想还是单机也没必要使用集群方案,最后就直接选择了 Docker Compose
。
Docker Compose 部署
Docker Compose
安装包可以直接从 github
下载,目前最新版本是 v2.2.3
。
可以直接在服务器中使用 curl
下载
sudo curl -SL https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
但是国内访问 github
真的是超级慢,所以建议直接在本地下载(使用加速器),然后上传服务器
下载时注意系统版本,一般情况下都是 Linux x86_64
,如果不放心可以使用 uname -sm
命令查看
本地下载完成之后,将文件更名为 docker-compose 并上传到服务器 /usr/local/bin/
目录下就相当于安装成功了。
PS: 注意上传时登录的用户,一般用户没有权限上传此目录,我所有上传操作都是使用的
root
用户。
安装完成后,一般用户也并没有执行 Docker Compose
的权限 , 需要设置 Docker Compose
的读写权限。
sudo chmod +x /usr/local/bin/docker-compose
在此直接将 Docker Compose
的执行权限设置给了所有用户,如果需要详细设置,使用 chmod
命令具体参数设置
设置完成后就可以执行 docker-compose
命令了
Docker Compose 命令
docker-compose
命令可以查看网上资料,具体命令我也不熟,都是使用网上现查, 一般也是使用另一个管理工具 Portainer
来执行。