背景: 网站环境为LNMP,现在想对服务器进行容器化。
目的:
- 实现网站环境一键搭建,以便后续做迁移或者重置服务器
- 学习了解docker的原理及实际操作过程。
任务:
- 分析了解我的文件在服务器上该如何布局。
- 服务器安装docker环境并进行配置
- 自定义docker-compose.yml和config文件(使用Docker-compose为我现在用的nginx、mysql、网站程序、和phpMyAdmin分别配置容器)
- 制作Docker-compose的镜像?
- 做数据库定时备份
实操:
1. 设计:
我的理解及需求: docker容器是一个进程,进程杀死后container里未备份的数据就不存在了,所以需要解决如何在程序运行在container的前提下将产生的数据存储在物理存储中。
最初设想的实现方式: docker数据挂载,将mysql容器的数据挂载到宿主机的指定文件夹下。
最终: 基于以上想法,通过docker-compose.yml文件写好nginx和mysql的映射
参考资料: https://gitee.com/kingofhua/docker-lnmp
2. 服务器安装docker环境并进行配置
服务器环境:CentOS7(7以下不支持)
ps: docker目前只支持linux,不支持Windows
docker安装完成后所有的内容都会保存在/var/lib/docker目录下,保存了和docker相关的images, containers, volumes, networks等信息,Docker Engine – Community 的包叫做docker-ce
安装docker-ce有很多种方法:
- 选择使用docker的repositories来安装docker,这样可以简化安装和升级任务。比较推荐,这是大多人的选择
- PRM包安装,下载RPM包手动安装,并完全手动管理升级。在no access to the internet的环境下是不错的选择
- 自动化脚本,通常在测试环境和开发环境,会选择使用自动化的脚本来安装docker
前期工作:卸载旧版本docker
yum -y remove docker docker-common docker-selinux docker-engine
1. 设置yum仓库
要使用docker的repo来安装docker,我们首先需要安装yum-utils,device-mapper-persistent-data,lvm2。其中yum-utils 提供了 yum-config-manager 功能,后2者用于服务设备映射存储驱动程序。
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2. 启动docker-nightly版本,docker-ce提供了3种方式用于docker的更新,稳定,测试和夜间(官网原文):
Stable gives you latest releases for general availability.
Test gives pre-releases that are ready for testing before general availability.
Nightly gives you latest builds of work in progress for the next major release.
启动/禁用nightly更新方式
sudo yum-config-manager --enable docker-ce-nightly
sudo yum-config-manager --disable docker-ce-nightly
3. 设置yum源
1)官方(推荐)
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
2)阿里云yum源(不推荐)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
需要注意的是,docker不设置阿里云镜像源也是能正常安装的,并且阿里云镜像源地址也可能会更改,所以以上地址可能会返回404,如果以上镜像源地址不存在也可以忽略这一步直接进行下一步.
4. 启动docker并加入开机自动启动
systemctl start docker
systemctl enable docker
5. 验证docker服务是否启动成功
运行系统提供的一个镜像,输出Hello from Docker!,容器启动过程可能较慢,请耐心等待。
sudo docker run hello-world
6. 配置镜像
国内各大云服务商(Azure、阿里云、七牛等)均提供了 Docker 镜像加速服务,我使用阿里云,所以镜像加速器也选择的阿里云:
直接访问阿里云容器镜像服务:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
根据官方给出的文档配置镜像加速器:
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”: [
"https://YOUR-ALI-CODE.mirror.aliyuncs.com",
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
拓展: 卸载docker
有可能有一天不想再运行docker服务了,或者该主机有别的用途,不想docker占用主机资源,那么可以卸载docker服务。
stop docker
systemctl stop docker
Uninstall the Docker package
systemctl remove docker
删除主机上的映像、容器、卷或自定义配置文件
sudo rm -rf /var/lib/docker
3. 自定义docker-compose.yml和config
我需要做的:
- 确定各个程序的版本,mysql,php,nginx
- mysql:这里只需要配置初始用户密码和默认编码方式utf8mb4(为了网站使用emoji表情)就好,数据库文件后续可以直接导入
- php:根据提供的配置即可
- nginx:1.域名管理, 我当前的lnmp是做了反向代理存放多个vhost,这次也想继续这样做,所以需要制作一个文件夹存放config文件; 2. https 我当前的网站ssl证书是放在conf文件夹的,我直接放进去就可以吗?3. 端口设置,暴露nginx容器的哪个端口,localhost的哪个端口?
- 网站程序文件:配置github action文件,制作私有镜像
- phpmyadmin:这个程序也直接放在我的网站程序文件里?
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
配置镜像加速器
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://mf2zu92l.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker