Recentemente, eu queria instalar o docker no servidor que vem comendo cinzas há mais de um ano, mas não consegui encontrar uma fonte de yum adequada. Mais tarde, depois de algum Baidu, descobri que o centos8 ia ser frio, então muitos sites espelho removeram a fonte do CentOS 8.
De jeito nenhum, depois de uma breve reflexão, decidi reinstalar o sistema operacional e substituí-lo por centos7.9.Felizmente, não há nada importante no servidor, basta mover um ninho para o blog.
Após a reinstalação do sistema, o processo de instalação do docker ocorreu sem problemas.
Comece a instalar o nginx.
1. Puxe a imagem nginx mais recente diretamente
docker pull nginx
2. Crie alguns novos diretórios e monte as pastas relevantes no container nginx para o host, principalmente para facilitar a reescrita da configuração, seguida de deletar o container, esses arquivos não serão perdidos
mkdir -p /usr/local/nginx/{conf,html,logs,ssl}
3. Inicie um contêiner nginx para cp alguns arquivos e coloque-os na pasta recém-criada na etapa 2
docker run --name nginx -p 80:80 -d nginx
4. Copie o arquivo de configuração no contêiner para o host
Você pode simplesmente ver os detalhes das pastas no contêiner. A propósito, se você usar o yum para instalar a versão nginx-1.20.x diretamente, o diretório nginx será colocado em /usr/local/nginx, mas a instalação do docker ainda é o mesmo que o antigo. O mesmo diretório da versão nginx.
docker cp a25b9f301349:/etc/nginx/nginx.conf /usr/local/nginx/conf/
docker cp a25b9f301349:/etc/nginx/conf.d /usr/local/nginx/
复制代码
5. Pare o contêiner nginx atual e exclua-o
docker stop a25b9f301349
docker rm a25b9f301349
复制代码
6. Gere o certificado e coloque-o no diretório ssl do host
Para saber como gerar o certificado, você pode dar uma olhada em acmesh-official/acme.sh .
7. Modifique o arquivo de configuração
Você pode ver que existem dois arquivos de configuração, e agora você só precisa modificar o arquivo default.conf. O motivo pode ser visto abaixo:
vim conf/nginx.conf
Ou seja, se ele se chama default.conf ou não, desde que esteja no diretório conf.d, ele será carregado
vim conf.d/default.conf
server {
listen 80;
listen [::]:80;
server_name www.telami.cn;
rewrite ^(.*) https://$server_name$1 permanent;
}
server {
listen 443 ssl;
server_name www.telami.cn;
ssl_certificate /etc/nginx/ssl/telami.cn.pem;
ssl_certificate_key /etc/nginx/ssl/telami.cn.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
复制代码
8. Inicie um novo contêiner nginx
docker run \
--name nginx \
-p 443:443 -p 80:80 \
-v /usr/local/nginx/logs:/var/log/nginx \
-v /usr/local/nginx/html:/usr/share/nginx/html \
-v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/nginx/conf.d:/etc/nginx/conf.d \
-v /usr/local/nginx/ssl:/etc/nginx/ssl/ \
--privileged=true -d --restart=always nginx
复制代码
Explique brevemente:
- -v: O diretório em que o host está montado, o diretório na frente dos dois pontos ":" é o diretório do host e o diretório a seguir é o diretório no contêiner;
- -d: roda em segundo plano;
- --restart=always: reinicia automaticamente o contêiner ao reiniciar o docker;
Falando nisso, há um ponto a ser observado, ou seja, no arquivo defaul.conf acima, o caminho absoluto que aparece é o caminho no container, não na máquina host. Por exemplo, ao configurar o ssl:
ssl_certificate /etc/nginx/ssl/telami.cn.pem;
ssl_certificate_key /etc/nginx/ssl/telami.cn.key;
复制代码
É só que ao rodar, -v /usr/local/nginx/ssl:/etc/nginx/ssl/ monta o diretório para que o container possa ler o certificado.
ssl_certificate /usr/local/nginx/ssl/telami.cn.pem;
O nginx não pode ser iniciado e relatará um erro informando que o arquivo não pode ser encontrado.
Ok, por hoje é só, até a próxima~