Lesson 8. 云服务器与docker
腾讯云地址: https://cloud.tencent.com/
云服务器
-
云服务器的作用:
(1) 存放我们的 docker 容器,让计算跑在云端。
(2) 获得公网IP地址,让每个人可以访问到我们的服务。
- AcTerminal, 云服务器, docker, 三者之间的关系:
-
从租到的毛坯服务器装 tmux 和 docker:
-
我用的是腾讯云的服务器,腾讯云和其他平台不同,给的是具有
sudo
权限的用户ubuntu
而非root
用户。为了防止误操作,创建一个新的用户acs
并给予sudo
权限。ssh ubuntu@服务器公网IP地址 # 填租到的服务器提供的公网IP地址 sudo adduser USER_NAME # 填新添加用户的用户名 sudo usermod -aG sudo USER_NAME
-
配置免密登录方式,在 Lesson 4. ssh 中有详细步骤。
-
安装
tmux
并且把祖传配置上传到服务器。sudo apt-get update sudo apt-get install tmux scp .bashrc .vimrc .tmux.conf server_name: # y总开发的AcTerminal中的祖传配置
-
之后在
tmux
中按照 docker安装教程 安装docker
。docker --version # 安装完成后会显示安装的 docker 版本
-
另外也可以在这个毛坯服务器上玩玩,随便下点东西熟悉熟悉。
sudo apt-get install tree # 比如安装 tree 命令
-
docker
-
docker 的作用:
保证在不同的运行环境下,能有完全相同的软件版本环境,帮你跳过配环境的过程。
-
docker 的相关概念:
- image 镜像: 可以理解成模板。每个镜像形如
名称:tag(版本号)
,例如ubuntu:20.04
。 - container 容器: 每一个容器相当于完全独立的云端服务器。
- 一个 docker 包含多个 image 镜像,每个 image 镜像可以生成多个 container 容器,用相同镜像生成的容器的环境完全一样。
- image 镜像: 可以理解成模板。每个镜像形如
- 把一个容器迁移到其他的服务器:
-
docker 的相关操作:
-
将当前用户添加到
docker
用户组,避免在每个docker
命令前都要加上sudo
权限。sudo usermod -aG docker $USER # 执行完命令后需要重新 ssh 到服务器
-
镜像
images
的相关操作:# image 基本操作 docker pull ubuntu:20.04 # 拉取镜像 docker images # 列出本地所有镜像 docker rmi ubuntu:20.04 # 删除镜像 # 迁移 image 到其他服务器 docker save -o ubuntu_20_04.tar ubuntu:20.04 # 将镜像 ubuntu:20.04 导出到本地文件 ubuntu_20_04.tar chmod +r ubuntu_20_04.tar # 设置可读权限 scp server1:ubuntu_20_04.tar . # logout 退回到 AcTerminal,把 .tar 压缩文件复制到本地 scp ubuntu_20_04.tar server2: # 再从 AcTerminal 上传到目标服务器 docker load -i ubuntu_20_04.tar # 根据文件生成镜像(把镜像加载到docker) # container 生成 image docker [container] commit CONTAINER IMAGE_NAME:TAG # 创建某个 container 的镜像,[]表示可选内容
-
容器
container
的相关操作:docker ps -a # 查看本地的所有容器 docker [container] create -it ubuntu:20.04 # image 生成 container docker [contaienr] run -itd ubuntu:20.04 # image 生成 container 并且启动容器 docker [container] rm CONTAINER # 删除容器 docker rename CONTAINER1 CONTAINER2 # 重命名容器 docker [container] start CONTAINER # 启动容器 docker [container] stop CONTAINER # 停止容器 docker [container] restart CONTAINER # 重启容器 docker [container] attach CONTAINER # 进入容器; ctrl+d --> 停止容器; # ctrl+p --> ctrl+q 挂起容器; docker export -o xxx.rar CONTAINER # 将容器 CONTAINER 导出到本地文件 xxx.tar 中 docker import xxx.tar IMAGE_NAME:TAG # 将本地文件xxx.tar导入成镜像,并将镜像命名为IMAGE_NAME:TAG docker cp xxx CONTAINER:xxx # 在本地和容器间复制文件 docker cp CONTAINER:xxx xxx docker stats # 查看所有容器的统计信息 docker update CONTAINER --memory 500MB # 修改容器限制
迁移时
docker export / import
与docker save / load
的区别:
export / import
丢弃多余信息,仅保留必要的状态,save / load
会保存完整记录。
-
-
实战: 把 acwing 中的
image
上传到租的服务器中生成容器并更改成熟悉的配置。(在服务器上搭建自己的虚拟机)-
上传
image
到自己租的云端服务器:scp /var/lib/acwing/docker/images/docker_lesson_1_0.tar SERVER_NAME:
-
image
加载到docker
:docker load -i docker_lesson_1_0.tar
-
创建并运行
docker_lesson:1.0
镜像的容器:docker run -p 20000:22 --name my_docker_server -itd docker_lesson:1.0
-
进入自己创建的
container
的根用户下并且设置密码:docker attach my_docker_server passwd
-
在租服务器的云平台放行
20000
端口。 -
在 container 中安装
ssh
和sudo
:apt-get update apt-get sudo apt-get update apt-get install ssh apt-get update sudo /etc/init.d/ssh start
-
和之前一样,创建工作账户
acs
,分配sudo
权限,再配置免密登录(可以直接ssh
到搭建的虚拟机),最后安装tmux
上传祖传配置,大功告成 !
-