要安装Docker-CE,必须是CentOS7.X并且确认是64位版本
我的环境:CentOS7.5 64位系统最小化安装,禁用Selinux
更新CentOS系统:
#yum install -y bash-completion;
#yum update;
#reboot
安装最新版Docker
最小化安装没有旧版本的docker,若有,就要事先卸载:
#yum remove docker docker-common container-selinux docker-selinux docker-engine docker-engine-selinux
所有默认在/var/lib/docker/的镜像、容器、数据、网络等等都会被保留。
安装Docker的依赖
#yum install -y yum-utils device-mapper-persistent-data lvm2
安装Docker官方仓库
#yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo
更新仓库源
#yum makecache fast
注意,如果第一次安装Docker,会提示接受gpg密钥,接受即可。
从仓库安装Docker-CE
#yum install docker-ce
使用阿里云加速器,可以提升获取Docker官方镜像的速度
#vi /etc/docker/daemon.json
{
“registry-mirrors”: [“https://gfvnhm2j.mirror.aliyuncs.com”]
}
也可使用另一个加速器:https://registry.docker-cn.com
#systemctl daemon-reload
#systemctl enable docker
#systemctl start docker
#docker info 最后第二、三行就是显示加速器地址。
安装Compose工具
登录https://docs.docker.com/compose/install/
选择Linux标签,得到如下链接:
#curl -L “https://github.com/docker/compose/releases/download/1.23.2/docker-compose- ( u n a m e − s ) − (uname -s)- (uname−s)−(uname -m)” -o /usr/local/bin/docker-compose
给下载过来的脚本可执行权限:
#chmod +x /usr/local/bin/docker-compose
查看docker-compose版本:
#docker-compose –version
docker-compose version 1.23.2, build 1110ad01
申请域名、证书及开放端口
本人为了测试,给wordpress站点事先申请证书,而nextcloud证书则由容器代理自动申请。
先在阿里云申请一个域名。域名不是免费的,本人申请了相对便宜的linuxs.top域名,三年使用权。另外域名还要实名认证,否则不能用。
然后申请免费的证书。找到【安全(云盾)】——【SSL证书(应用安全)】,点击右上角购买证书——品牌Symantec——类型增强型OV SSL,点击后出现免费型DV SSL,选中它,购买。然后转到订单页里,补充详细域名信息,填写个人资料,提交审核。审核成功后,在标签“我的证书”里能看到。
如果要使用22和3386之外的端口,要在控制台上开放。在【云服务器ECS】菜单中点击【网络和安全】下的“安全组”,然后上面的【管理控制台】旁边选择当申请云服务器ECS时指定的【华南1(深圳)】,右边安全组列表里有现成的安全组,点击右边的配置规则,添加端口。
要使用80及443端口,还要域名备案才行。阿里云有备案链接入口,按指示去办理,一般一个星期可收到结果。
添加docker network
网站需要占据80端口,显然,我们的服务器不可能只有一个网站,所以部署一个nginx容器是必须的,让这个nginx来监听80以及443端口,再根据域名转发到对应的网站容器。容器之间的通信是通过network的,所以我们需要先添加一个network:
#docker network create nginx-proxy
#docker network ls
NETWORK ID NAME DRIVER SCOPE
d3989a6e25ce bridge bridge local
c5aa4cd1a852 host host local
95e352ba3047 nginx-proxy bridge local
580c2c715d37 none null local
利用compose部署容器
在root用户主目录下,编写docker-compose.yml文件:
#vi docker-compose.yml,输入以下内容:
version: '3' services: nextcloud: image: nextcloud:apache container_name: nextcloud restart: always volumes: - nextcloud:/var/www/html environment: - VIRTUAL_HOST=yunpan.linuxs.top - LETSENCRYPT_HOST=yunpan.linuxs.top - LETSENCRYPT_EMAIL=45574500@qq.com mysql: image: mysql:5.7 container_name: mysql-5.7 volumes: - mysql_data:/var/lib/mysql restart: always environment: - MYSQL_ROOT_PASSWORD: MyPassw0rd - MYSQL_DATABASE: wordpress - MYSQL_USER: wordpress - MYSQL_PASSWORD: Passw0rd wordpress: depends_on: - mysql image: wordpress:latest container_name: wordpress volumes: - wp_site:/var/www/html restart: always environment: - VIRTUAL_HOST: blog.linuxs.top,linuxs.top - WORDPRESS_DB_HOST: mysql:3306 - WORDPRESS_DB_USER: wordpress - WORDPRESS_DB_PASSWORD: Passw0rd proxy: build: ./proxy container_name: nginx-proxy restart: always ports: - 80:80 - 443:443 labels: com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: "true" volumes: - certs:/etc/nginx/certs:ro - vhost.d:/etc/nginx/vhost.d - html:/usr/share/nginx/html - /var/run/docker.sock:/tmp/docker.sock:ro letsencrypt-companion: image: jrcs/letsencrypt-nginx-proxy-companion container_name: letsencrypt restart: always volumes: - certs:/etc/nginx/certs - vhost.d:/etc/nginx/vhost.d - html:/usr/share/nginx/html - /var/run/docker.sock:/var/run/docker.sock:ro depends_on: - proxy volumes: nextcloud: mysql_data: wp_site: certs: vhost.d: html: networks: default: external: name: nginx-proxy
注意proxy是使用Dockerfile文件创建的,在docker-compose.yml同目录下创建proxy文件夹,然后编写两个文件:
#mkdir proxy && cd proxy
#vi Dockerfile,输入如下内容:
FROM jwilder/nginx-proxy:alpine
COPY uploadsize.conf /etc/nginx/conf.d/uploadsize.conf
#vi uploadsize.conf,输入如下内容:
client_max_body_size 1G;
被代理访问的容器必须提供环境变量VIRTUAL_HOST,被代理申请证书的容器必须配置环境变量LETSENCRYPT_HOST和LETSENCRYPT_EMAIL。
文件docker-compose.yml没有指定证书的绝对位置,则默认位于/var/lib/docker/volume/下,且目录名是当前docker-compose.yml所在的目录名(root)+挂载目录名(certs),手工创建这个证书目录:
#mkdir -p /var/lib/docker/volumes/root_certs/_data/
然后将wordpress的证书blog.linuxs.top.crt及blog.linuxs.top.key放入上面创建的目录内。
注意证书的文件名必须与网站域名一致,这是因为镜像nginx-proxy中的脚本包含了如下功能:
如果在certs文件夹下找到当前域名的.crt和.key文件,则将自动将访问转到HTTPS协议。
如果都是自动申请证书,则不需要上面这一步操作。
在当前目录下启动docker:
#docker-compose up -d
原文链接:https://blog.csdn.net/liuyuhui_gdtyj/article/details/88619589