0%

Docker部署Flask

Dokcer的安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
使用脚本自动安装
在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,Ubuntu 系统上可以使用这套脚本安装,另外可以通过 --mirror 选项使用国内源进行安装:
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
# $ sudo sh get-docker.sh --mirror AzureChinaCloud
执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker CE 的稳定(stable)版本安装在系统中。


Ubuntu 16.04+、Debian 8+、CentOS 7
在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}

启动 Docker CE

镜像加速

1
2
$ sudo systemctl enable docker
$ sudo systemctl start docker

建立 docker 用户组

默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。

建立 docker 组:

1
$ sudo groupadd docker

将当前用户加入 docker 组:

1
$ sudo usermod -aG docker $USER

退出当前终端并重新登录,进行如下测试。

测试 Docker 是否安装正确

1
$ docker run hello-world

1、Docker可视化面板安装

1
docker run -d -p 5471:10086 -v /var/run/docker.sock:/var/run/docker.sock tobegit3hub/seagull
1
docker run -p 8888:8888 --name swzl cb1642485ca7  -v /www/wwwroot/ctguswzl.cn:/www/wwwroot/ctguswzl.cn flask:latest
1
2
3
4
5
docker run -it  --rm=true -p 8888:8888  -v /www/wwwroot/ctguswzl.cn:/www/wwwroot/ctguswzl.cn flask:latest	 /bin/sh

docker run -it -p 8888:8888 -v /www/wwwroot/ctguswzl.cn:/www/wwwroot/ctguswzl.cn flask:latest /bin/sh

docker run -it -p 8888:8888 --name flask -v /www/wwwroot/ctguswzl.cn:/www/wwwroot/ctguswzl.cn registry.cn-hangzhou.aliyuncs.com/iboy/ctguswzl:1.0 /bin/sh

mkdir -p /www/wwwroot/ctguswzl.cn
mkdir -p /www/server

迁移

1
tar -zcvf server.tar.gz  *

cerboot实现泛域名证书自动续期

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 创建目录
mkdir -p /www/server/certbot

# 进入目录
cd /www/server/certbot

# 下载
wget https://dl.eff.org/certbot-auto

# 设为可执行权限
chmod +x certbot-auto

# 加入到系统可执行目录
ln -s /www/server/certbot/certbot-auto /usr/bin/

# 申请证书,替换成你自己的域名
ln -s /www/server/certbot/certbot-auto /usr/bin/
ln -s /www/server/certbot/certbot-auto /usr/bin/ \
&& certbot-auto -d "*.ctguswzl.cn" -d "ctguswzl.cn" --manual --preferred-challenges dns-01 certonly --server https://acme-v02.api.letsencrypt.org/directory
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1 0 */1 * * root certbot-auto renew --manual --preferred-challenges dns --deploy-hook  "docker start nginx" --manual-auth-hook "/www/server/certbot/tool/au.sh python aly add" --manual-cleanup-hook "/www/server/certbot/tool/au.sh python aly clean" 


certbot-auto renew --cert-name ctguswzl.cn --manual-auth-hook /www/server/certbot/tool/au.sh --dry-run

0 3 1 * * certbot-auto renew --renew-hook "sudo nginx -s reload"
0 3 1 * * certbot-auto renew --renew-hook "sudo nginx -s reload"

0 1 */1 * * certbot renew --force-renewal --cert-name ctguswzl.cn --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory --manual --manual-auth-hook "/www/server/certbot/tool/au.sh python txy add" --manual-cleanup-hook "/www/server/certbot/tool/au.sh python txy clean" >/dev/null 2>&1


/bin/sh -c cd /www/server/certbot && certbot-auto renew --force-renewal --cert-name ctguswzl.cn --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory --manual --manual-auth-hook "/www/server/certbot/tool/au.sh python txy add" --manual-cleanup-hook "/www/server/certbot/tool/au.sh python txy clean" --renew-hook "docker restart nginx" >/dev/null 2>&1

每天凌晨1点执行定时任务续签证书
0 1 * * * /bin/sh -c /www/server/certbot/certbot-auto renew --force-renewal --cert-name ctguswzl.cn --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory --manual --manual-auth-hook "/www/server/certbot/tool/au.sh python txy add" --manual-cleanup-hook "/www/server/certbot/tool/au.sh python txy clean" --renew-hook "docker restart nginx" >/dev/null 2>&1
1
2
pip install virtualenv
sudo apt-get install python3.6-venv

正解

apt-get purge python-virtualenv python3-virtualenv virtualenv
pip install virtualenv

pip install virtualenv==16.1

Docker可视化面板

1
2
3
4
5
6
7
8
docker run -d \
-p 9000:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer


docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data -v /public:/public portainer/portainer:1.20.2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 docker commit -a "iBoy" -m "Portainer中文汉化" 398562fad864  registry.cn-hangzhou.aliyuncs.com/iboy/portainer:1.0


docker run -d \
-p 9001:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
registry.cn-hangzhou.aliyuncs.com/iboy/portainer:1.0

https://blog.csdn.net/weixin_42851117/article/details/106645555

docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name prtainer registry.cn-zhangjiakou.aliyuncs.com/ctgu/portainer


docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v pcn_data:/data --name prtainer5 registry.cn-zhangjiakou.aliyuncs.com/ctgu/portainer

docker cp /root/public/. 2a8:/public/

registry.cn-zhangjiakou.aliyuncs.com/ctgu/portainer

docker-compose安装

1
sudo curl -L https://github.wuyanzheshui.workers.dev/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

秘钥登录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
scp id_rsa.pub root@192.168.19.7:~/.ssh
我们一般使用 PuTTY 等 SSH 客户端来远程管理 Linux 服务器。但是,一般的密码方式登录,容易有密码被暴力破解的问题。所以,一般我们会将 SSH 的端口设置为默认的 22 以外的端口,或者禁用 root 账户登录。其实,有一个更好的办法来保证安全,而且让你可以放心地用 root 账户从远程登录——那就是通过密钥方式登录。

密钥形式登录的原理是:利用密钥生成器制作一对密钥——一只公钥和一只私钥。将公钥添加到服务器的某个账户上,然后在客户端利用私钥即可完成认证并登录。这样一来,没有私钥,任何人都无法通过 SSH 暴力破解你的密码来远程登录到系统。此外,如果将公钥复制到其他账户甚至主机,利用私钥也可以登录。

下面来讲解如何在 Linux 服务器上制作密钥对,将公钥添加给账户,设置 SSH,最后通过客户端登录。

1. 制作密钥对

首先在服务器上制作密钥对。首先用密码登录到你打算使用密钥登录的账户,然后执行以下命令:

[root@host ~]$ ssh-keygen <== 建立密钥对
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): <== 按 Enter
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): <== 输入密钥锁码,或直接按 Enter 留空
Enter same passphrase again: <== 再输入一遍密钥锁码
Your identification has been saved in /root/.ssh/id_rsa. <== 私钥
Your public key has been saved in /root/.ssh/id_rsa.pub. <== 公钥
The key fingerprint is:
0f:d3:e7:1a:1c:bd:5c:03:f1:19:f1:22:df:9b:cc:08 root@host
密钥锁码在使用私钥时必须输入,这样就可以保护私钥不被盗用。当然,也可以留空,实现无密码登录。

现在,在 root 用户的家目录中生成了一个 .ssh 的隐藏目录,内含两个密钥文件。id_rsa 为私钥,id_rsa.pub 为公钥。

2. 在服务器上安装公钥

键入以下命令,在服务器上安装公钥:

[root@host ~]$ cd .ssh
[root@host .ssh]$ cat id_rsa.pub >> authorized_keys
如此便完成了公钥的安装。为了确保连接成功,请保证以下文件权限正确:

[root@host .ssh]$ chmod 600 authorized_keys
[root@host .ssh]$ chmod 700 ~/.ssh
3. 设置 SSH,打开密钥登录功能

编辑 /etc/ssh/sshd_config 文件,进行如下设置:

RSAAuthentication yes
PubkeyAuthentication yes
另外,请留意 root 用户能否通过 SSH 登录:

PermitRootLogin yes
当你完成全部设置,并以密钥方式登录成功后,再禁用密码登录:

PasswordAuthentication no
最后,重启 SSH 服务:

[root@host .ssh]$ service sshd restart
4. 将私钥下载到客户端,然后转换为 PuTTY 能使用的格式

使用 WinSCP、SFTP 等工具将私钥文件 id_rsa 下载到客户端机器上。然后打开 PuTTYGen,单击 Actions 中的 Load 按钮,载入你刚才下载到的私钥文件。如果你刚才设置了密钥锁码,这时则需要输入。

载入成功后,PuTTYGen 会显示密钥相关的信息。在 Key comment 中键入对密钥的说明信息,然后单击 Save private key 按钮即可将私钥文件存放为 PuTTY 能使用的格式。

今后,当你使用 PuTTY 登录时,可以在左侧的 Connection -> SSH -> Auth 中的 Private key file for authentication: 处选择你的私钥文件,然后即可登录了,过程中只需输入密钥锁码即可。
1
2


iBoy wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!