租云服务器及配docker环境
概述
AC Terminal(本地终端)、云平台服务器以及docker之间的关系
- 云服务器分成毛坯型和服务型
- 毛坯型服务器允许个性化定制,开发使用的框架环境和
thrift
服务都搭在毛坯里,是项目的核心服务端 - 服务型服务器里有搭建好的一些服务甚至应用,如数据库,redis。这些服务在项目中被中心服务端调用
- 毛坯型服务器允许个性化定制,开发使用的框架环境和
- 开发项目并不直接在云服务器里开发,而是要套一层docker虚拟机后,在docker里开发,这样有利于项目配置的迁移(直接docker镜像)和整体服务的稳定(一个服务器里可以开多个docker,写多个项目,一个docker崩了不影响其他docker)
- 开发流程就是本地终端或AC Terminal通过
ssh
连接到云服务器,进入docker(docker内部也可以配置ssh登录,因此可以直接登录到docker里),写项目
云平台的作用:
- 存放我们的docker容器,让计算跑在云端。(服务器是别人的,但docker是你的)
- 获得公网IP地址,让每个人可以访问到我们的服务。(一定要有公网IP!!!)
任选一个云平台即可,推荐配置:
- 1核 2GB(后期可以动态扩容,前期配置低一些没关系,但内存至少2GB,否则一些软件可能装不上)
- 网络带宽采用按量付费,最大带宽拉满即可(费用取决于用量,与最大带宽无关)
- 平时说的带宽指的是下行带宽,即从网络传输到本地的速度。下行带宽越大,下载速度越大(登录网站本质也是从网站服务器上下载HTML CSS JS 文件,因此服务器带宽越大,用户登录速度也越快)
- 上行带宽指的是从本地上传到网络的速度,速度可以认为没有限制。所以平时本地上传数据到网盘或网站时速度很快,服务器下载数据速度也很快。
- 当我们提高带宽时,提高的是下行带宽,方式是把上行带宽的一部分划分给下行带宽。由于上行带宽使用频率较低,速度本身较快,所以并不会造成很大影响,运营商还能额外赚取服务费
- 系统版本:ubuntu 20.04 LTS(推荐用统一版本,避免后期出现配置不兼容的问题)
- 轻量级服务器也可以选择,但官方会配好一些环境,后期想配自己的环境时可能会有冲突(但腾讯的轻量级是2核4GB内存的,可以很好的配上环境,且价格十分划算,可以冲)
租云服务器
运营商网址
- 阿里云
- 最近没有学生优惠了,新客1核2GB 419/年。价格总体是三家中等水平
- 腾讯云
- 轻量学生机价格很优惠,三年432,普通云服务器新客只能买2核4GB及以上配置,价格468/年。价格总体比较便宜
- 华为云
- 总体价格很贵,更新频率低于另外两家。但华为云有一些限时秒杀的活动,可以很便宜的拿下一些配置普通的服务器。新客1核2GB 450/年,学生机 2核4GB 198/年(处理器是华为自研的鲲鹏)。华为有优惠的服务器是不带主机安全的,要带只能买企业级安全,价格很贵。如果是自己用,问题不大;但要上线就谨慎。
某位大佬写的租服务器流程
安装docker
创建工作用户 acs
并赋予 sudo
权限
登录到新服务器。打开AC Terminal,然后:
ssh root@xxx.xxx.xxx.xxx # xxx.xxx.xxx.xxx替换成新服务器的公网IP
# 注意分配的用户名,腾讯云不是root,是ubuntu(跟OS同名)
创建acs用户:(由于根用户权限太大,误操作的后果很严重,因此需要再创建一个非根用户,分配 sudo
权限,这样想行使根权限时就要加 sudo
,操作更安全)
adduser acs # 创建用户acs
usermod -aG sudo acs # 给用户acs分配sudo权限
配置免密登录方式
退回AC Terminal,然后配置 acs
用户的别名和免密登录,可以参考4. ssh——ssh登录。
配置新服务器的工作环境(先把 tmux
装好再传配置包)
将AC Terminal的配置传到新服务器上:
scp .bashrc .vimrc .tmux.conf server_name: # server_name需要换成自己配置的别名
安装 tmux
和 docker
登录自己的服务器,然后安装 tmux
:
sudo apt-get update
sudo apt-get install tmux
打开 tmux
。(养成好习惯,所有工作都在 tmux
里进行,防止意外关闭终端后,工作进度丢失)
然后在 tmux
中根据docker安装教程安装 docker
即可。(就是把教程里的Set up the repository到Install Docker Engine头两个命令间的所有命令执行一遍)
docker教程
- 一个docker可以有很多镜像,镜像相当于一种配置或模板
- 一个镜像可以生成多个容器,同一个镜像生成的容器,内部环境是一样的
- 镜像和容器的关系可以类比类和实例
- 容器可以看作虚拟机
- 容器可以创造镜像
- 对于从同一个镜像衍生出来的几个镜像,docker在存储时会进行优化,重复的部分只存一份
- 迁移的过程是先生成要转移的docker容器的镜像,然后将镜像传到目标服务器上,再将镜像加载到docker里,用该镜像生成一个新的容器
将当前用户添加到 docker
用户组
为了避免每次使用 docker
命令都需要加上 sudo
权限,可以将当前用户加入安装中自动创建的 docker
用户组(可以参考官方文档):
sudo usermod -aG docker $USER
镜像(images)
docker pull ubuntu:20.04
:拉取一个镜像- 所有的镜像都是
name:tag
的形式
- 所有的镜像都是
docker images
:列出本地所有镜像docker image rm ubuntu:20.04
或docker rmi ubuntu:20.04
:删除镜像ubuntu:20.04
docker [container] commit CONTAINER IMAGE_NAME:TAG
:创建某个container
的镜像- 中括号意思是可选,可以不写
container
这个字符串
- 中括号意思是可选,可以不写
docker save -o ubuntu_20_04.tar ubuntu:20.04
:将镜像ubuntu:20.04
导出到本地文件ubuntu_20_04.tar
中- 所有导出的
.tar
文件都要加上一个可读权限
- 所有导出的
docker load -i ubuntu_20_04.tar
:将镜像ubuntu:20.04
从本地文件ubuntu_20_04.tar
中加载出来
容器(container)
docker [container] create -it ubuntu:20.04
:利用镜像ubuntu:20.04
创建一个容器。docker ps -a
:查看本地的所有容器docker ps
显示所有正在运行的容器
docker [container] start CONTAINER
:启动容器docker [container] stop CONTAINER
:停止容器docker [container] restart CONTAINER
:重启容器docker [contaienr] run -itd ubuntu:20.04
:创建并启动一个容器docker [contaienr] run -it ubuntu:20.04
:创建、启动并进入一个容器
docker [container] attach CONTAINER
:进入容器- 先按
Ctrl-p
,再按Ctrl-q
可以挂起容器 - 直接
Ctrl-d
的话会把容器关掉
- 先按
docker [container] exec CONTAINER COMMAND
:在容器中执行命令docker [container] rm CONTAINER
:删除容器- 不能删除一个正在运行的容器
docker container prune
:删除所有已停止的容器docker export -o xxx.tar CONTAINER
:将容器CONTAINER
导出到本地文件xxx.tar
中docker import xxx.tar image_name:tag
:将本地文件xxx.tar
导入成镜像,并将镜像命名为image_name:tag
docker export/import
与docker save/load
的区别:export/import
会丢弃历史记录和元数据信息,仅保存容器当时的快照状态save/load
会保存完整记录,体积更大
docker top CONTAINER
:查看某个容器内的所有进程docker stats
:查看所有容器的统计信息,包括CPU、内存、存储、网络等信息docker cp xxx CONTAINER:xxx
或docker cp CONTAINER:xxx xxx
:在本地和容器间复制文件docker rename CONTAINER1 CONTAINER2
:重命名容器docker update CONTAINER --memory 500MB
:修改容器限制- 修改限制就可以用来评测了
实战
进入AC Terminal,然后:
scp /var/lib/acwing/docker/images/docker_lesson_1_0.tar server_name: # 将镜像上传到自己租的云端服务器
ssh server_name # 登录自己的云端服务器
docker load -i docker_lesson_1_0.tar # 将镜像加载到本地
docker run -p 20000:22 --name my_docker_server -itd docker_lesson:1.0 # 创建并运行docker_lesson:1.0镜像
# -p是将容器的22端口映射到服务器的20000端口。本地22端口已被用过,而登录容器需要从容器的22端口进入,所以容器22端口要映射到一个没有被使用的服务器端口
# 如果有多组端口映射,则每一组前要加 -p
docker attach my_docker_server # 进入创建的docker容器
passwd # 设置root密码
去云平台控制台中修改安全组配置,放行端口 20000
。
返回AC Terminal,即可通过 ssh
登录自己的 docker
容器:
ssh root@xxx.xxx.xxx.xxx -p 20000 # 将xxx.xxx.xxx.xxx替换成自己租的服务器的IP地址
然后,可以仿照上节课内容,创建工作账户 acs
。
之后更新一下
apt-get update
容器里如果没有 sudo
命令,则root下执行
apt-get install sudo
最后,可以参考4. ssh——ssh登录配置 docker
容器的别名和免密登录。
小Tips
如果 apt-get
下载软件速度较慢,可以参考清华大学开源软件镜像站中的内容,修改软件源。
版权信息
- 作者:yxc
- 链接:https://www.acwing.com/blog/content/10867/
- 来源:AcWing
- 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。