1:lesson8
云服务器
云平台的作用:
存放我们的docker容器,让计算跑在云端。
获得公网IP地址,让每个人可以访问到我们的服务。
任选一个云平台即可,推荐配置:
- 1核 2GB(esc,后期可以动态扩容,前期配置低一些没关系)
- 网络带宽采用按量付费,最大带宽拉满即可(费用取决于用量,与最大带宽无关)
- 系统版本:ubuntu 20.04 LTS(推荐用统一版本,避免后期出现配置不兼容的问题)
docker安装教程地址:https://docs.docker.com/engine/install/ubuntu/
添加一下安全组:设置一些端口的访问权限。
然后设置一下root密码。
各种功能和配置参考帮助文档。
SSH远程连接服务器: ssh root@116.62.200.147
。
创建acs用户:在root用户下运行各种命令可能有风险。
1 | adduser acs # 创建用户acs |
退回AC Terminal,然后配置acs用户的别名和免密登录。
官网安装Docker教程:
1 | sudo apt-get update |
作业
注意:本次作业的2个题目不是独立的,每个题目会依赖于前一个题目,因此评测时如果当前题目错误,则不再评测后续题目。
创建好作业后,先进入文件夹/home/acs/homework/lesson_8/,然后:
(0) 进入homework_0文件夹,然后:
[1] 租一台云服务器
[2] 配置服务器别名及免密登录
[3] 将服务器别名写在当前目录下的server_name.txt文件中
(1) 进入homework_1文件夹,然后:
[1] 在租好的云服务器中安装docker
[2] 将服务器别名写在当前目录下的server_name.txt文件中
(2) 进入homework_2文件夹,然后:
[1] 将AC Terminal中的/var/lib/acwing/docker/images/docker_lesson_1_0.tar镜像上传到租好的服务器中
[2] 登录到租好的服务器
[3] 将上传的镜像提取出来
[4] 创建该镜像的容器,设置端口映射:20000:22。
[5] 去云平台控制台中修改安全组配置,放行端口20000。
[6] 进入该容器,创建新账户acs
[7] 返回AC Terminal。配置容器中acs账户的别名及免密登录。
[8] 将别名写在当前目录下的server_name.txt文件中
1 | acs@cd20639d6fd3:~/homework/lesson_8/homework_0$ echo aliserver > server_name.txt |
2:lesson9
Docker
https://www.docker.com 最好的资源在官网!
Docker系列教程: https://caochenlei.blog.csdn.net/article/details/119428303。
Docker简易教程: Docker 入门教程 - 阮一峰的网络日志 (ruanyifeng.com)。
Docker架构
将当前用户添加到docker用户组
为了避免每次使用docker命令都需要加上sudo权限,可以将当前用户加入安装中自动创建的docker用户组(可以参考官方文档):
1 | docker version |
镜像(images)
Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器container实例。
image镜像是一个二进制文件。镜像名称格式为名称:版本号
,如果版本号不指定则是最新的版本。
- docker pull ubuntu:20.04:拉取一个镜像,默认从Docker仓库下载镜像到本地
- docker images:列出本地所有镜像
- docker image rm ubuntu:20.04 或 docker rmi ubuntu:20.04:删除镜像ubuntu:20.04
- docker [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)
image 文件生成的容器实例,本身也是一个文件,称为容器文件。也就是说,一旦容器生成,就会同时存在两个文件: image 文件和容器文件。而且关闭容器并不会删除容器文件,只是容器停止运行而已。
- docker [container] create -it ubuntu:20.04:利用镜像ubuntu:20.04创建一个容器。
- docker ps -a:查看本地的所有容器,不加-a查看所有正在运行的容器
- docker [container] start CONTAINER:启动容器
- docker [container] stop CONTAINER:停止容器
- docker [container] restart CONTAINER:重启容器
- docker [contaienr] run -itd ubuntu:20.04:创建并启动一个容器,-it不加d会创建并启动进入一个容器
- docker [container] attach CONTAINER:进入容器,只能进入启动中的容器
- 先按Ctrl-p,再按Ctrl-q可以挂起容器,类似tmux的挂起操作
- 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:在本地和容器间复制文件,复制文件夹不用加-r
- docker rename CONTAINER1 CONTAINER2:重命名容器
- docker update CONTAINER —memory 500MB:修改容器限制
实战
概述:本地通过ssh越过服务器直接登录到服务器上的docker容器。
进入AC Terminal,然后:
1 | scp /var/lib/acwing/docker/images/docker_lesson_1_0.tar server_name: # 将镜像上传到自己租的云端服务器 |
去云平台控制台中修改安全组配置,放行端口20000。
返回AC Terminal,即可通过ssh登录自己的docker容器:
1 | ssh root@xxx.xxx.xxx.xxx -p 20000 # 将xxx.xxx.xxx.xxx替换成自己租的服务器的IP地址 |
然后,可以仿照上节课内容,创建工作账户acs。
1 | apt-get sudo |
tips:如果apt-get下载软件速度较慢,可以参考清华大学开源软件镜像站中的内容,修改软件源。
最后,可以参考4. ssh——ssh登录配置docker容器的别名和免密登录。
1 | 回到AC terminal |
3:Bug复盘
本地Git输入git push
后出现如下报错:
1 | $ git push -u origin master |
首先尝试git pull
:
这句话是说将远程中进行的相关修改保存下来。
1 | $ git pull origin master |
如果出现如上报错,再处理:
解决上述问题后就可保证远程仓库的更新会被同步到本地而本地仓库的修改也不会被覆盖 然后就是add,commit,push命令将本地的修改上传到远程仓库中。
1 | $ git add . |