个人服务器搭建(docker运用实例)

一、要点解析

1. 镜像与容器
  • 镜像:镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变

  • 容器的实质是进程,容器进程运行属于自己的独立和命名空间。容器可以拥有自己的root文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID空间。

  • 二者区别:镜像和容器的关系,就如面向对象程序设计中的类和实例一样。镜像是静态的定义,容器是镜像运行时的实体。

注:docker最佳实践要求,容器不应该向其存储层写入任何数据,容器存储层要保持无状态化。当所有的文件进行写入操作,都应该使用数据卷,或者绑定宿主目录;读写时跳过容器存储层,直接对宿主进行读写
2. 镜像相关命令
  • 获取镜像:docker pull 名称

  • 查看主机已有镜像:docker images

  • 搜索远端仓库镜像:docker search

  • 删除镜像:docker rmi ID

  • 创建镜像:docker commit [options];参数说明: -a,作者信息-m,提交信息-p,提交时暂停容器运行

  • 上传镜像:docker push

3. 容器相关命令
  • 查看本机存在的所有容器:docker ps -a

  • 查看运行容器:docker ps

  • 停止容器:docker container stop ID

  • 删除容器:docker container rm ID

  • 新建容器

    • 命令: docker create 容器

    • 注意:新建容器处于停止状态。可以使用命令docker start进行启动

  • 新建容器并启动

    • 启动容器方式有两种,第一基于镜像新建容器并启动,第二将终止状态容器重新启动。

    • 命令:docker run

  • 利用 docker run 新建容器并启动容器,docker在后台运行

    • 检查本地是否存在指定的镜像,不存在就从共有仓库下载

    • 利用镜像创建并启动一个容器

    • 分配一个文件系统,并在只读的镜像层外面挂载一层可读可写

    • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去

    • 从地址池配置一个IP地址给容器

    • 执行用户指定的应用程序

    • 执行完毕后容器被终止

  • 进入容器

    • 命令:docker run -t -i 镜像 /bin/bash

    • 命令:docker exec -t -i 镜像 /bin/bash

    • 两者的区别在于,前者直接拉去镜像,并运行容器,进入容器内;后者,主要是在运行容器的基础上进去

  • 退出容器

    • 用户可以通过按Ctrl+d 或输入exit命令来退出容器。注意:在退出容器之后,容器将会自动关闭

    • 在不终止容器的情况下退出容器Ctrl+q

  • 终止容器

    • 命令:docker stop
  • 删除容器

    • 命令:docker rm

    • 参数说明:

      -f 强行终止并删除一个运行中的容器

      -l 删除容器连接,但保留容器

      -v 删除容器挂载的数据卷

  • 导入导出容器

    • 导入导出用的较少,将已有容器重新打包成镜像上传仓库
4.实战(创建个人开发部署干净环境)

目的:利用docker 搭建一个干净的ubuntu环境,部署自己运维项目,在自己服务器过期一键迁移。

  • 思想: 创建ubuntu系统部署nginx、django项目,相关数据库连接等,连接一个docker搭建mysql环境。

  • 查看容器镜像详细信息:docker inspect id

  • 创建环境并进入:docker run -it -p 8000:80 --name myubuntu -v /opt/myubuntu:/opt/myubuntu ubuntu /bin/bash

-v 后面的映射关系是 “宿主机文件/目录:容器里对应的文件/目录”,其中,宿主机上的文件/目录是要提前存在的,容器里对应的文件/目录会自动创建。

  • 退出容器并使容器处于运行状态:Ctrl+p+q

  • 查看运行容器:docker ps

  • 进入容器(在运行容器的基础内进入):docker exec -it myubuntu /bin/bash

  • 更新容器内的软件包(第一次使用系统):apt-get update

  • 安装相应软件(第一次使用系统):apt-get install vim

  • 安装相应软件(第一次使用系统):apt-get install apt-get install net-tools


创建ssh服务
  • 安装ssh服务:apt-get install openssh-server

  • 安装ssh客户端:apt-get install openssh-client

  • 开启ssh服务:/etc/init.d/ssh start

  • 修改配置文件:vim /etc/ssh/sshd_config,在# Logging 下添加PermitRootLogin yes

  • 重启服务:service ssh restart

  • 设置密码:passwd root

  • docker 将ssh端口映射出去

    • 查看正在运行容器:docker ps

    • 停止容器:docker stop 4ca

    • 将此容器打包成新的镜像:docker commit 4ca myubuntu-v1.01

    • 删除该容器:docker rm 4ca

    • 运行新创建新容器:docker run -it -p 8000:80 -p 111:22 --name myubuntu -v /opt/myubuntu:/opt/myubuntu myubuntu-v1.01 /bin/bash


安装nginx
  • 安装nginx: apt-get install nginx

  • 检查nginx语放: ./nginx -t

  • 启动nginx: ./nginx

  • 修改端口转发:

     location /blog {
    
             proxy_set_header Host $host:80;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_pass http://172.17.0.1:80/;
    
      }
    
  • nginx重启:./nginx -s reload

  • 停止nginx: nginx -s stop


Django 部署

因为,我们部署环境是在docker 里,纯净的ubuntu中没有相应的pythn环境,所以我们必须安装相应的python软件。

  • 安装python2: apt-get python

  • 安装pip: apt-get install python-pip

  • 安装python3: apt-get python3

  • 安装pip3:apt-get install python3-pip

  • 安装虚拟环境:pip3 install virtualenv

  • 创建虚拟环境(使用 --python=python3 来指定克隆 Python3 的环境):virtualenv --python=python3 env

  • 进入虚拟环境:source env/bin/activate

  • 进入项目目录:cd hq_blog

  • 导入依赖环境:pip install -r requirements.txt

  • 补充说明:在导入(安装)依赖,个人已经出现过三次数据库安装(mysqlclient)失败,以下是解决思路:

    • 全局更新:apt-get update

    • 解决代码:apt-get install python3 python-dev python3-dev, apt-get install build-essential libssl-dev libffi-dev, apt-get install libxml2-dev libxslt1-dev zlib1g-dev

  • 收集静态文件:python manage.py collectstatic

  • 数据库连接(docker ubuntu容器连接docker mysql容器)

    • 查看容器IP: docker inspect -f='{{.Name}} {{.NetworkSettings.IPAddress}} {{.HostConfig.PortBindings}}' $(docker ps -aq)

    • 开发数据使用端口:docker run -it -p 8000:80 -p 111:22 -p 336:3306 --name myubuntu -v /opt/myubuntu:/opt/myubuntu myubuntu-v1.02 /bin/bash

  • 生成数据库:python manage.py makemigrations

  • 创建数据库文件:python manage.py migrate

  • 创建超级用户:python manage.py createsuperuser

出错:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

  • 解决方案:

    • 查看编码格式:locale -a查看是否有utf8

    • 查看编码环境:python -c 'import locale; print(locale.getdefaultlocale())',python -c 'import locale; print(locale.getpreferredencoding())'

    • 设置utf8: export LANG="C.UTF-8"

  • 修改超级用户密码:python manage.py changepassword 用户

  • 安装 pip install uwsgi

  • 配置文件uwsgi文件(uwsgi.ini)

    [uwsgi]
      # Django-related settings
      socket = 127.0.0.1:8000
      # 项目绝对路径
      chdir          = /opt/myubuntu/hq_blog
      # Django的wsgi文件相对路径
      wsgi-file      = /opt/myubuntu/hq_blog/hq_blog/wsgi.py
      # process-related settings
      # master
      master          = True
      # 最大进程数,一般为cpu的个数
      processes      = 4
      # 线程数
      threads        = 2
      #设置此参数,有一个主进程
      master=True
      #主进程id写入文件里
      pidfile= /var/log/nginx/uwsgi.pid
      # ... with appropriate permissions - may be needed
      chmod-socket    = 664
      #退出时,清理环境
      vacuum          = True
      reload-mercy    = 10
      max-requests    = 5000
      limit-as        = 512
      buffer-size    = 30000
      uid = 1000
      gid = 2000
    
  • 启动运行uwsgiuwsgi --ini uwsgi.ini

  • 重新启动uwsgiuwsgi --reload uwsgi.pid

  • 停止uwsgiuwsgi --stop uwsgi.pid

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值