1、使用云服务器及配置docker环境
云服务器和docker基础
AcWing Django框架课学习笔记
云平台:阿里云
环境:linux ubuntu 20.04
云平台的作用:
- 存放docker容器 让计算跑在云端
- 获得公网ip,让别人访问到我的web应用
服务器:核心放在ECS服务器上
- ECS服务器(毛坯服务器) :需要根据需求自己定制 ,存放web框架
- 租一个服务:mysql、redis、cdn
方式:
1、通过socket(ip地址+端口)
2、http
AC Terminal:
AcWing提供的一个远程Linux服务器,拥有完全独立的运行环境与空间。
可连网,支持作为跳板ssh登录到我们租的云服务器服务器上。
需要配置ssh免密登录、别名
docker容器:(开发的主要工作环境)
- 优势:可以迁移
- 能够使所有人使用统一的环境(docker镜像)
进入docker:
-
登录到运行docker的服务器 attach到docker
-
通过ssh登录docker容器
一、租云服务器并用AC Terminal登录
先租一个云服务器:1核2GB就可以
我这里使用的是阿里云,并设置好登录密码(我这里是试用一个月)
然后打开AC Terminal,用ssh登录到租好的服务器上
注意:复制和粘贴是ctrl + shift + c/v
ssh root@xxx.xxx.xxx.xxx # xxx.xxx.xxx.xxx替换成新服务器的公网IP
logout # 用ctrl+d也可以
查看内存:
free -h
查看有几核:
cat /proc/cpuinfo
登录的时候默认是root用户,root用户权限太大,容易误删关键的系统文件。最好的方式是建立一个新的用户然后赋予sudo权限。
创建acs用户:
adduser acs # 创建用户acs
usermod -aG sudo acs # 给用户acs分配sudo权限
二、配置免密登陆:
配置别名:
使用logout退回到AC Terminal
创建文件~/.ssh/config
,命令:
vim ~/.ssh/config
在文件中输入:
Host server1
Hostname Ip地址
User 用户名
保存并退出:按Esc,然后输入:
:wq
之后再使用服务器时,可以直接使用别名server1
配置免密登录:
创建密钥:
ssh-keygen
然后一直回车即可。
执行结束后,~/.ssh/目录下会多两个文件:
- id_rsa:私钥
- id_rsa.pub:公钥
之后想免密码登录哪个服务器,就将公钥传给哪个服务器即可。
例如,想免密登录myserver服务器。则将公钥中的内容,复制到myserver中的~/.ssh/authorized_keys文件里即可。
也可以使用如下命令一键添加公钥:
ssh-copy-id server1
然后输入密码,这样就配置完成了免密登录,可以直接使用命令ssh server1
实现登录
三、配置docker:
首先先更新环境:
sudo apt-get update
安装tmux:
sudo apt-get install tmux
退出tmux命令:ctrl+D
对tmux进行配置:
将AC Terminal上的三个文件通过scp发送到服务器上:
注意:冒号不要忘
scp .bashrc .vimrc .tmux.config server1:
tmux常用操作:
上下分屏:ctrl + b 再按 "
左右分屏:ctrl + b 再按 %
切换屏幕:ctrl + b 再按o
关闭一个终端:ctrl + b 再按x
退出:ctrl + d
tmux的主要作用是可以再终端中多开窗口
安装docker:
依次执行以下命令:
1、
sudo apt-get update
2、
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
3、
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
4、
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
再更新一下:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
这样就完成了
最后输入:
docker --version
能正确显示版本信息就说明已经安装完成
四、docker教程:
基本概念:
一个docker有若干的镜像,一个镜像可以生成若干个容器。每个容器可以看做一个独立的云服务器,而同一个镜像生成的容器的环境一定是完全相同。
镜像可以看做一个模具,容器就像用模子做出来的月饼
镜像(images)
docker pull ubuntu:20.04
:拉取一个镜像docker images
:列出本地所有镜像docker image rm ubuntu:20.04
或docker rmi ubuntu:20.04
:删除镜像ubuntu:20.04docker [container] commit CONTAINER IMAGE_NAME:TAG
:创建某个container的镜像docker save -o ubuntu_20_04.tar ubuntu:20.04
:将镜像ubuntu:20.04导出到本地文件ubuntu_20_04.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 [container] start CONTAINER
:启动容器docker [container] stop CONTAINER
:停止容器docker [container] restart CONTAINER
:重启容器docker [contaienr] run -itd ubuntu:20.04
:创建并启动一个容器docker [container] attach CONTAINER
:进入容器
先按Ctrl-p,再按Ctrl-q可以挂起容器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:tagdocker 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
:修改容器限制
所谓迁移: 将需要迁移的容器生成一个镜像,镜像类似于一个压缩文件,可以传到其他服务器,在其他服务器上将这个镜像加载到docker里,通过这个镜像就可以生成新的容器,这就实现了迁移。
将当前用户添加到docker用户组
为了避免每次使用docker命令都需要加上sudo权限,可以将当前用户加入安装中自动创建的docker用户组(可以参考官方文档):
sudo usermod -aG docker $USER
实战:
进入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镜像
docker attach my_docker_server # 进入创建的docker容器
passwd # 设置root密码
然后就可以先按ctrl+p再按ctrl+q来挂起容器
设置好密码之后就可以用ssh登录到docker的容器里面了(无论是在Ac Terminal还是在自己租的云服务器上都可以登录进docker)
生成的docker容器在本质上就是一个云服务器。在云服务器的管理控制台可以开放端口(比如说20000),然后直接从任何地方通过ssh登录到在云服务器上创建的docker容器中
ssh root@xxx.xxx.xxx.xxx -p 20000 # 将xxx.xxx.xxx.xxx替换成自己租的服务器的IP地址
同样也可以配置别名和免密登录
为什么不在云平台的上做,要在云平台上搭docker再做呢?
因为docker方便迁移。云平台内部比较好迁移(例如阿里云-阿里云),但用docker的话,云平台之间的迁移也很方便(例如阿里云-腾讯云)
作业:
注意: 本次作业的3个题目不是独立的,每个题目会依赖于前一个题目,因此评测时如果当前题目错误,则不再评测后续题目。
创建好作业后,先进入文件夹/home/acs/homework/lesson_8/
,然后:
- 进入
homework_0
文件夹,然后:- 租一台云服务器
- 配置服务器别名及免密登录
- 将服务器别名写在当前目录下的
server_name.txt
文件中
- 进入
homework_1
文件夹,然后:- 在租好的云服务器中安装docker
- 进入
homework_2
文件夹,然后:- 将AC Terminal中的
/var/lib/acwing/docker/images/docker_lesson_1_0.tar
镜像上传到租好的服务器中 - 登录到租好的服务器
- 将上传的镜像提取出来
- 创建该镜像的容器,设置端口映射:
20000:22
。 - 去云平台控制台中修改安全组配置,放行端口20000。
- 进入该容器,创建新账户
acs
- 返回
AC Terminal
。配置容器中acs账户的别名及免密登录。 - 将别名写在当前目录下的
server_name.txt
文件中
- 将AC Terminal中的
homework x create 生成作业x
homework x test # 测试作业
配置别名和免密登录以及安装docker都在上面已经实现了
通过echo将别名写入server_name.txt中
将镜像上传到租好的服务器中,加载镜像
注册用户,设置密码。可以登录到docker虚拟机上:
在config里面配置免密登录:
通过测试,作业完成:
更多推荐
所有评论(0)