Docker进行项目部署
Flask
-
制作镜像,创建文件夹 Docker_flask,创建以下文件:
- Dockerfile
# Dockerfile - this is a comment. Delete me if you want. FROM python:3.6.3 COPY . /app WORKDIR /app RUN pip install -r requirements.txt ENTRYPOINT ["python"] CMD ["app.py"]- requirements.txt
flask flask_restful- app.py
# app.py - a minimal flask api using flask_restful from flask import Flask from flask_restful import Resource, Api app = Flask(__name__) api = Api(app) class HelloWorld(Resource): def get(self): return {'hello ~ ': 'world!'} api.add_resource(HelloWorld, '/') if __name__ == '__main__': app.run(debug=True, host='0.0.0.0') -
生成镜像
docker build my_docker_flask:latest -
测试镜像
docker run -d -p 50:50 my_docker_flask:latest
Centos
-
下载镜像(官方镜像不带Desktop)
# 官方最新是Centos 8 docker pull centos # 安装Centos 7,自带Desktop docker pull centos:7 -
创建容器
关于各启动参数的意思 –name 是给容器起名字,方便调用 -p 是映射内外端口,这里映射了5901端口,也就是要运行的vncserver所需要的端口# 不带参数,默认调用最新版本 docker run --name centos-desktop-vnc --privileged -p 5901:5901 --ulimit memlock=-1 -td centos /usr/sbin/init # 调用centos:7创建 docker run --name centos-desktop-vnc --privileged -p 5901:5901 --ulimit memlock=-1 -td centos:7 /usr/sbin/init -
启动容器
docker exec -it centos-desktop-vnc bash - 安装 Desktop
-
查看有什么组件
yum upgrade yum grouplist # 安装GNOME Desktop yum groupinstall GNOME Desktop -
配置默认启动图形界面
# 断开默认启动方式 unlink /etc/systemd/system/default.target # 创建图形启动方式为默认启动方式 ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target -
安装 vnc server
yum -y install tigervnc-server tigervnc-server-module
-
- 配置VNC
-
复制配置模板文件为vncserver@:1.service
cp /lib/systemd/system/vncserver@.service /lib/systemd/system/vncserver@:1.service -
修改配置文件
nano这个软件可能需要安装一下
yum install nano开始编辑配置:
nano /lib/systemd/system/vncserver@:1.service会看到如下配置内容:
[Unit] Description=Remote desktop service (VNC) After=syslog.target network.target [Service] Type=forking ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' ExecStart=/usr/sbin/runuser -l <USER> -c "/usr/bin/vncserver %i" PIDFile=/home/<USER>/.vnc/%H%i.pid ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' [Install] WantedBy=multi-user.target我们只要把< USER >替换成我们的用户名就可以了,由于docker是以root登入的,我们把< USER >改成root。改好如下:
[Unit] Description=Remote desktop service (VNC) After=syslog.target network.target [Service] Type=forking ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' ExecStart=/usr/sbin/runuser -l root -c "/usr/bin/vncserver %i" PIDFile=/home/root/.vnc/%H%i.pid ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' [Install] WantedBy=multi-user.target -
设置vnc链接密码,如果有view-only选项的话选n。
-
-
重启容器并且更新systemctl
exit # 退出容器 docker restart centos-desktop-vnc # 重启容器 docker exec -it centos-desktop-vnc bash #重新进入容器 systemctl daemon-reload #更新systemctl如果 systemctl daemon-reload 和 systemctl start vncserver@:1.service 发生错误,可以尝试重启容器,并把 /lib/systemd/system/vncserver@:1.service 配置里的 Type=forking 改为 Type=simple 。
-
启动vncserver@:1.service服务,并设置开机自启
systemctl start vncserver@:1.service && systemctl enable vncserver@:1.service # 启动失败情况下处理方式 vncserver -kill :1 vncserver :1 -
查看进程是否启动
netstat -anp|grep 590 # 如果没有netstat这个命令,输入 yum install net-tools -y 进行安装如果看到下面内容,就说明vnc服务起来了。
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 233/Xvnc tcp 0 0 172.17.0.2:5901 172.17.0.1:55824 ESTABLISHED 233/Xvnc tcp6 0 0 :::5901 :::* LISTEN 233/Xvnc
-
查看版本号
# 适用所有Linux $ uname -a # 适用redhat和centos $ cat /etc/redhat-release # 当前centos 版本与redhat对应的版本 $ cat /proc/version -
修改VNC密码
cd /root/.vnc/ rm -rf passwd
Ubuntu
-
下载镜像
docker pull ubuntu -
创建容器
docker run -it -p 80:80 ubuntu /bin/bash docker run -it -v /download:/download -p 53:53 ubuntu bash这是一个极度精简的系统,连最基本的 wget 命令都没有;所以先要 apt-get update 升级系统和安装 apt-get install wget 命令;/download:/download 是共享文件夹。
apt-get update
apt install wget net-tools
ifconfig
apt install gcc make libpcre3 libpcre3-dev zlib1g-dev -
退出系统
先按,ctrl+p 再按,ctrl+q
-
安装开启ssh运行用户远程登录
-
安装sshd命令:
apt-get install openssh-server openssh-client - 编辑 /etc/ssh/sshd_config ,注释掉: PermitRootLogin without-password ,增加 PermitRootLogin yes
-
启动ssh
service ssh start service ssh stop service ssh restart
-
常用命令
-
查看ubuntu版本:
cat /etc/issue
MongoDB
-
下载镜像
docker pull mongo - 创建容器
-
启动
docker run --name mongodb -p 27017:27017 -d mongo --auth
导出数据命令:mongoexport -h dbhost -d dbname -c collectionName -o output
-h :数据库地址,MongoDB 服务器所在的 IP 与 端口,如 localhost:27017
-d :指明使用的数据库实例,如 test
-c 指明要导出的集合,如 c1
-o 指明要导出的文件名,如 E:/wmx/mongoDump/c1.json,注意是文件而不是目录,目录不存在时会一同新建
一.mongodump备份数据库
-
常用命令格 ./mongodump -h IP –port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径 如果没有用户谁,可以去掉-u和-p。(用户名和密码是用户访问数据库) 如果导出本机的数据库,可以去掉-h。 如果是默认端口,可以去掉–port。 如果想导出所有数据库,可以去掉-d。
-
导出所有数据库 ./mongodump -u 用户名 -p 密码 -o /usr/local/server/mongodb/backup/
二.mongorestore还原数据库
- 常用命令格式
./mongorestore -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 --drop 文件存在路径
–drop的意思是,先删除所有的记录,然后恢复,慎用!!!
文件存在路径:指的是之前数据库备份的路径
- 恢复所有数据库到mongodb中
./mongorestore -u 用户名 -p 密码 /usr/local/server/mongodb/backup/
三.mongoexport导出表,或者表中部分字段
- 常用命令格式
./mongoexport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 -f 字段 -q 条件导出 --type=csv -o 文件名
-f 导出指字段,以字号分割,-f name,email,age导出name,email,age这三个字段
-q 可以根据查询条件导出,-q ‘{ “uid” : “100” }’ 导出uid为100的数据
–csv 表示导出的文件格式为csv的,这个比较有用,因为大部分的关系型数据库都是支持csv,在这里有共同点
- 导出整张表 这里以数据库表user为例,将user表格导出格式为csv文件
./mongoexport -u 用户名 -p 密码 -d platform -c user --type=csv -f name,password -o /usr/local/server/mongodb/user.csv
四.mongoimport导入表,或者表中部分字段
注意:如果导入的时候需要先删除掉原来的集合,可以再加上–drop
1.1 还原整表导出的非csv文件
./mongoimport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 --upsert --file 文件名
–upsert 插入或者更新现有数据
1.2 还原部分字段的导出文件
./mongoimport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 --upsertFields 字段 --file 文件名
–upsertFields跟–upsert一样,更新或者插入现有字段
1.3 还原导出的csv文件
./mongoimport -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表名 --type 文件类型 --headerline --upsert --file 文件名
–type 表示文件类型
–headline 表示不导入首行(csv文件的首行是表头)
1.4 还原导出的表数据
这里以数据库表user为例,将user.csv文件导入到数据库user表中
./mongoimport -u 用户名 -p 密码 -d platform -c user --type csv --headerline --upsert --file /usr/local/server/mongodb/user.csv --drop