docker部署nextcloud

docker

docker 介绍

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

docker 安装

基于 centos7 服务器

  • 卸载旧版本
1
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
  • 安装必要的工具
1
yum install -y yum-utils device-mapper-persistent-data lvm2
  • 安装软件源
1
yum-config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 更新 yum 缓存,安装 docker
1
2
yum makecache
yum install docker-ce
  • 开机自启动并启动 docker
1
2
systemctl enable docker
systemctl start docker
  • 加速 docker 镜像

新增文件vim /etc/docker/daemon.json

文件内容

1
2
3
4
5
6
7
8
{
"debug": true,
"experimental": false,
"registry-mirrors": [
"https://o5ot2rw5.mirror.aliyuncs.com",
"https://registry.docker-cn.com"
]
}

插一句
阿里云的镜像加速地址,需要先注册阿里云之后才能看到,注册之后访问https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors就可以看到了

daemon.json 文件创建完了重启下 docker

1
systemctl restart docker

docker 基本概念

镜像

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

容器

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。

仓库

仓库的概念跟 git 类似,存放镜像的地方,点击这里访问官方地址

docker 基本命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 启动容器,后面跟参数容器名或者容器ID
docker start
# 关闭容器,后面跟参数容器名或者容器ID
docker stop 容器名(容器ID也可以)
# 运行容器
docker run
# 查看正在运行的容器
docker ps
# 删除容器,后面跟参数容器ID,注意,运行中的不能删除
docker rm
# 列出本地镜像
docker images
# 拉取镜像
docker pull

下面开始实战,部署 nextcloud

nextcloud

nextcloud 介绍

NextCloud 是一款开源网络硬盘系统,最新版本是 12,NextCloud 源代码完全开放,你可以在开源许可协议的约束下免费使用,并且同时支持androidios系统

docker 部署 nextcloud

  • 创建 mysql 容器
1
2
3
4
5
6
7
8
9
10
11
# 创建容器
docker run --name nextcloud_db -e MYSQL_ROOT_PASSWORD=123456789 -d mysql:5
# 进入mysql容器准备创建nextcloud的数据库、用户名、密码
docker exec -it nextcloud_db mysql -u root -p
# 下面几行是数据库
create database nextcloud;
create user nextcloud@localhost identified by '123456';
create user nextcloud@'%' identified by '123456';
grant all privileges on nextcloud.* to nextcloud@localhost identified by '123456';
grant all privileges on nextcloud.* to nextcloud@'%' identified by '123456';
flush privileges;

参数详解

run 命令

–name 指定容器名称是 nextcloud_db
-e 设置环境变量,这里设置了数据库的 root 密码
-d 指定容器后台运行
mysql:5 指定镜像是 mysql,并且是 5.x 的版本

exec 命令

-i -t 参数
docker exec 后边可以跟多个参数,这里主要说明 -i -t 参数。

只用 -i 参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示符,但命令执行结果仍然可以返回。

-i -t 参数一起使用时,则可以看到我们熟悉的 Linux 命令提示符,并且从这个 stdin 中 exit,不会导致容器的停止。

  • 创建 nextcloud 容器
1
docker run --name=nextcloud --link nextcloud_db:db -v /data:/var/www/html/data -p 1080:80 -d nextcloud

参数详解

–name 指定容器名称是 nextcloud
–link nextcloud_db:db 将上面创建的名为 nextcloud 的容器映射名为 db 的服务提供给 nextcloud 容器使用
-v /data:/var/www/html/data 将本地的 /data 目录挂载到容器的 /var/www/html/data 目录

打开浏览器访问http://你的服务器IP:1080接可以看见 NextCloud 的界面了,然后参照提示完成设置即可

这里,数据库选择是 mysql, 数据库名 nextcloud,用户名 nextcloud,密码 123456,数据库地址是 db(就是上面 nextcloud_db 容器的映射服务名称)

后记

所有容器对应的目录位于/var/lib/docker/containers目录下,文件名是容器的 ID

上面的--link操作,会在对应容器的 hosts 文件里面加 IP 与主机名的映射

1
172.17.0.2      db 0ee227b81599 nextcloud_db

至此,部署完毕。

参考链接