Toto je starší verze dokumentu!
Tento návod se týká zprovoznění dockeru přímo v naší VPS, tedy pod OpenVZ, což jde jen s určitými omezeními, viz níže.
Docker lze bez omezení provozovat s využitím KVM.
Tento návod je vyzkoušen pro CentOS 7.3.1611.
1) vpsAdmin / VPS → Features → je třeba zapnout Bridge, iptables a TUN/TAP (VPS se restartuje)
2) Spusťte následující příkaz a znovu restartujeme VPS:
# echo "JoinControllers=cpu,cpuacct,cpuset freezer,devices" >> /etc/systemd/system.conf
3) Docker u nás funguje jen do verze 1.10. Novější verzi se zatím nikomu nepovedlo zprovoznit, neboť to pravděpodobně vyžaduje úpravu jádra.
V oficiálních repozitářích CentOS (repo extras) je již verze 1.13, ktera s OpenVZ nefunguje. Proto je třeba nainstalovat verzi 1.10.3, která je také v repozitáři.
# yum install docker-1.10.3
yum install centos-release-openshift-origin13.noarch yum install docker-1.10.3 yum install -y yum-utils && yum-config-manager --disable CentOS-OpenShift-Origin13
4) Je vhodné zakázat aktualizace dockeru, což provedeme příkazem:
# echo "exclude=docker*" >> /etc/yum.conf
5) Aby měly kontejnery správný přístup k filesystému, je třeba upravit výchozí systemd unit.
# mkdir -p /etc/systemd/systemd/system/docker.service.d/ # cat <<EOF > /etc/systemd/system/docker.service.d/shared_mounts.conf [Service] MountFlags=shared EOF
6) Dáme vědět systemd o změnách a spustíme Docker:
# systemctl daemon-reload # systemctl start docker.service # systemctl enable docker.service
Zkontrolujeme, zda je Docker úspěšně spuštěný. Můžeme vyzkoušet hello-world image:
# docker run hello-world
usermod -aG dockerroot <username>
echo '{"group": "dockerroot"}' > /etc/docker/daemon.json
systemctl restart docker
zdroj: https://coderleaf.wordpress.com/2017/02/10/run-docker-as-user-on-centos7/ V /etc/docker/daemon.json je potreba vynechať „live-restore“: true - podpora tejto direktívy bola pridaná až v docker 1.12.
https://coderleaf.wordpress.com/2017/02/10/run-docker-as-user-on-centos7/
Použijeme neoficiální, ale populárnější image https://hub.docker.com/r/wonderfall/nextcloud/. Databáze MariaDB bude v druhém kontejneru.
1) Vytvoříme systémového uživatele, který bude vlastnit soubory Nextcloudu:
# useradd -r -s /sbin/nologin nextcloud
Zjistíme UID a GID nového uživatele:
# id nextcloud
2) Připravíme složky pro uchovávání dat z Docker kontejnerů. Všechny soubory budou uloženy pod /mnt/nas/nextcloud, kde /mnt/nas je připojený dataset z NASu.
/mnt/nas/nextcloud/db /mnt/nas/nextcloud/data /mnt/nas/nextcloud/config /mnt/nas/nextcloud/apps
Změníme vlastníka těchto složek příkazem:
# chown -R nextcloud:nextcloud /mnt/nas/nextcloud
3) Stáhneme si Docker compose:
# curl -L "https://github.com/docker/compose/releases/download/1.10.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # chmod +x /usr/local/bin/docker-compose
4) Vytvoříme docker-compose.yml s následujícím obsahem:
version: '2'
services:
nextcloud-db:
image: mariadb:10.1
volumes:
- /mnt/nas/nextcloud/db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=<password1>
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=<password2>
restart: always
nextcloud:
image: wonderfall/nextcloud:11.0
environment:
- UID=991 # nextcloud user
- GID=988 # nextcloud group
- UPLOAD_MAX_SIZE=10G
- APC_SHM_SIZE=128M
- OPCACHE_MEM_SIZE=128
- REDIS_MAX_MEMORY=64mb
- CRON_PERIOD=15m
- TZ=Europe/Prague
- ADMIN_USER=admin
- ADMIN_PASSWORD=<password3>
- DB_TYPE=mysql
- DB_NAME=nextcloud
- DB_USER=nextcloud
- DB_PASSWORD=<password2>
- DB_HOST=nextcloud-db
depends_on:
- nextcloud-db
volumes:
- /mnt/nas/nextcloud/data:/data
- /mnt/nas/nextcloud/config:/config
- /mnt/nas/nextcloud/apps:/apps2
ports:
- "127.0.0.1:8888:8888/tcp"
restart: always
Správně vyplníme některé hodnoty, hlavně hesla a UID a GID vytvořeného uživatele nextcloud.
5) Spustíme kontejnery příkazem:
# /usr/local/bin/docker-compose up -d
6) Nextcloud je nyní připraven na příjem po protokolu http na localhost adrese 127.0.0.1:8888, na kterou je třeba nastavit reverse proxy server (např. Apache nebo Nginx). Ten se může zároveň postarat i o příjem po https a převedení vnějšího IPv6 spojení na interní IPv4.