Docker

项目部署

Posted by JackyCJ on April 1, 2020

Docker进行项目部署

Flask

  1. 制作镜像,创建文件夹 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')
    
    
  2. 生成镜像

     docker build my_docker_flask:latest
    
  3. 测试镜像

     docker run -d -p 50:50 my_docker_flask:latest
    

Centos

  1. 下载镜像(官方镜像不带Desktop)

     # 官方最新是Centos 8
     docker pull centos
     # 安装Centos 7,自带Desktop
     docker pull centos:7
    
  2. 创建容器
    关于各启动参数的意思 –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
    
  3. 启动容器

     docker exec -it centos-desktop-vnc bash
    
  4. 安装 Desktop
    1. 查看有什么组件

       yum upgrade
       yum grouplist
       # 安装GNOME Desktop
       yum groupinstall GNOME Desktop
      
    2. 配置默认启动图形界面

       # 断开默认启动方式
       unlink  /etc/systemd/system/default.target  
       # 创建图形启动方式为默认启动方式
       ln -sf  /lib/systemd/system/graphical.target   /etc/systemd/system/default.target   
      
    3. 安装 vnc server

       yum -y install tigervnc-server tigervnc-server-module
      
  5. 配置VNC
    1. 复制配置模板文件为vncserver@:1.service

       cp /lib/systemd/system/vncserver@.service /lib/systemd/system/vncserver@:1.service
      
    2. 修改配置文件

      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
      
    3. 设置vnc链接密码,如果有view-only选项的话选n。

vncserver #输入两次密码,完成密码设置
  1. 重启容器并且更新systemctl

     exit  # 退出容器
     docker restart centos-desktop-vnc # 重启容器
     docker  exec -it centos-desktop-vnc bash  #重新进入容器
     systemctl daemon-reload #更新systemctl
    

    如果 systemctl daemon-reloadsystemctl start vncserver@:1.service 发生错误,可以尝试重启容器,并把 /lib/systemd/system/vncserver@:1.service 配置里的 Type=forking 改为 Type=simple

  2. 启动vncserver@:1.service服务,并设置开机自启

     systemctl start vncserver@:1.service && systemctl enable vncserver@:1.service
     # 启动失败情况下处理方式
     vncserver -kill :1
     vncserver :1
    
  3. 查看进程是否启动

     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

  1. 下载镜像

     docker pull ubuntu
    
  2. 创建容器

     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
    
  3. 退出系统

    先按,ctrl+p 再按,ctrl+q

  4. 安装开启ssh运行用户远程登录

    1. 安装sshd命令:

       apt-get install openssh-server openssh-client
      
    2. 编辑 /etc/ssh/sshd_config ,注释掉: PermitRootLogin without-password ,增加 PermitRootLogin yes
    3. 启动ssh

       service ssh start
       service ssh stop
       service ssh restart
      

常用命令

  • 查看ubuntu版本:

      cat /etc/issue
    

MongoDB

  1. 下载镜像

     docker pull mongo
    
  2. 创建容器
  3. 启动

     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备份数据库

  1. 常用命令格 ./mongodump -h IP –port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径 如果没有用户谁,可以去掉-u和-p。(用户名和密码是用户访问数据库) 如果导出本机的数据库,可以去掉-h。 如果是默认端口,可以去掉–port。 如果想导出所有数据库,可以去掉-d。

  2. 导出所有数据库 ./mongodump -u 用户名 -p 密码 -o /usr/local/server/mongodb/backup/

二.mongorestore还原数据库

  1. 常用命令格式
./mongorestore -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 --drop 文件存在路径
–drop的意思是,先删除所有的记录,然后恢复,慎用!!!
文件存在路径:指的是之前数据库备份的路径
  1. 恢复所有数据库到mongodb中
./mongorestore -u 用户名 -p 密码 /usr/local/server/mongodb/backup/

三.mongoexport导出表,或者表中部分字段

  1. 常用命令格式
./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,在这里有共同点
  1. 导出整张表 这里以数据库表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

参考