acwing搭建云服务器及docker的使用

搭建云服务器

以下环境为Ubuntu20

云平台作用

关系

  1. 在租到的服务器上搭建docker类似于在服务器上又开了一台虚拟服务器,重新划分了一下服务器的房子
  2. docker的搭建原因:docker有很强的迁移性,例如从阿里云的服务器迁移到腾讯云时,使用docker可以很容易地迁移
  3. docker是非常独立的:可以在一个服务器上开任意多个docker
  4. 未来的开发环境是在docker所在的第三层

选择配置问题

常规搭建步骤

配置以下本地的 ~/.ssh/config文件,可以实现不用username@hostname,使用别名机制登录

配置一下免密登录

代码语言:javascript
复制
## 免密登录
1. 在本地(本子上),**ssh-keygen**,会在.ssh/文件夹下生成密钥:id_rsa和公钥id_rsa.pub
2. 之后想要免密登录哪个服务器,就将本地的公钥传给哪个服务器即可
3. 在服务器中的.ssh/路径下创建一个 **authorized_keys** 文件,然后将本地生成的密钥复制到这个文件中,如果原本就有这个文件,那么只需要在后面加上密钥即可
4. 例如,想要免密登录myserver服务器,就将公钥中的内容,复制到myserver中的~/.ssh/authorized_keys文件里即可
5. 也可以使用**ssh-copy-id myserver**一键添加公钥
6. 公钥添加到.ssh/authorized_keys中即可免密登录
7. 误区:在服务器上的生成了密钥,传到了服务器本身的authorized_keys或者主机上的,**不能自己登自己**
8. 可以将自己的密钥传递给多个服务器,当服务器很多时,可以实现只需服务器名字登陆![](https://strongwillpro.oss-cn-beijing.aliyuncs.com/img/20220714164253.png)

配置一下tmux和vim,将本地的.vimrc和.tmux.conf文件传到服务器的根目录下

代码语言:javascript
复制
scp .vimrc .tmux.conf myserver:

安装docker

  1. 登录docker官网,一步一步来就行

配置docker

代码语言:javascript
复制
https://docs.docker.com/engine/install/ubuntu/

将当前用户添加到docker用户组

为了避免每一次使用docker都要加上sudo权限,可以将当前用户加入安装中自动创建的docker用户组

代码语言:javascript
复制
sudo usermod -aG docker $USER

基本概念

  1. 镜像:image ,相当于一个模板,每一个镜像都可以生成一堆容器,container
  2. 每个image的名称:xxxx:xxxx,冒号前面为名称,冒号后面为tag,即版本号

镜像

拉取(从docker Hub中下载一个镜像)一个镜像,此处以拉取20版ubuntu为例,镜像名称:镜像版本

代码语言:javascript
复制
docker pull ubuntu:20.04

列出本地所有镜像

代码语言:javascript
复制
docker images

删除某个镜像,此处以ubuntu:20为例

代码语言:javascript
复制
docker image rm ubuntu:20.04 或者 docker rmi ubuntu:20.04

创建某个container的镜像

代码语言:javascript
复制
docker [container] commit CONTAINER IMAGE_NAME:TAG

将镜像ubuntu:20.04导出到本地ubuntu_20_04.tar中(以另一种文件格式保存)

代码语言:javascript
复制
docker save -o ubuntu_20_04.tar ubuntu:20.04

将镜像ubuntu:20.04从本地文件ubuntu_20_04.tar中加载出来

代码语言:javascript
复制
docker load -i ubuntu_20_04.tar

容器

利用镜像创建一个容器,create -it

代码语言:javascript
复制
docker [container] create -it ubuntu:20.04

查看本地所有的容器,所有创建了的容器,不只是启动了的就加[-a]参数,如果不加-a参数的话就是默认正在启动的容器

代码语言:javascript
复制
docker ps [-a]

启动容器,start

代码语言:javascript
复制
docker [container] start CONTAINER

停止容器,stop

代码语言:javascript
复制
docker stop CONTAINER

重启容器,restart

代码语言:javascript
复制
docker restart CONTAINER

创建并启动一个容器,加-d不进入,不加-d就是创建并进入容器,run,-it

代码语言:javascript
复制
docker run -itd ubuntu:20.04

进入容器,先按ctrl+p,再按ctrl+q可以挂起容器

代码语言:javascript
复制
docker attach container

在容器中执行命令,exec

代码语言:javascript
复制
docker exec container command

删除容器,rm

代码语言:javascript
复制
docker rm container

删除所有已经停止的容器,prune

代码语言:javascript
复制
docker container prune

将容器container导出到本地文件xxx.rar中,export

代码语言:javascript
复制
docker export -o xxx.rar container

将本地文件xxx.tar导出为镜像,并且将镜像命名为image_name:tag,import,从本地导向容器是import,从容器导向本地是export,进出关系

代码语言:javascript
复制
docker import xxx.tar image_name:tag

docker export/import 与docker save/load的区别

代码语言:javascript
复制
export/import 会丢弃记录和元数据信息,仅仅保存容器当时的快照信息,例如容器的名字就不会保留
save/load 会保留完整记录,体积更大

查看某个容器的所有进程,top

代码语言:javascript
复制
docker top container

查看所有容器的统计信息,包括CPU,内存,存储,网络等信息,stats

代码语言:javascript
复制
docker stats

在本地和容器之间复制文件,还是和cp和scp的格式一样,先source后destination,先从后到,cp

代码语言:javascript
复制
docker cp xxx container:xxx
docker cp container:xxx xxx

重命名容器,rename

代码语言:javascript
复制
docker rename container1 container2

修改容器限制,update

代码语言:javascript
复制
docker update container --memory 500MB

容器和镜像的区别

  1. docker的生命周期:镜像image+容器container+仓库registry,容器是由镜像实例化而来
  2. 容器即为进程,是镜像的实例,是运行环境包的实例,可以针对这个环境包运行N个实例,即容器是镜像的一种具体表现形式
  3. 镜像即为文件,想象为一个盖章,可以盖到任意的docker平台中去运行
  4. 容器是基于镜像所创建的,容器中的进程依赖于镜像中的文件
  5. docker就是一个mini版本的Linux系统,拥有完全与宿主机隔离的系统文件,进程,用户权限,网络空间等
  6. 镜像和容器的先后顺序:现有镜像后由实例的容器,虽然创建镜像可以参考某个容器,但是标准的做法是先制作镜像后跑容器

docker入门概念

  1. 开发和运维工程师的结合,更快的交付

docker和docker hub的关系

docker是官网

docker hub是安装docker镜像的仓库

dockerfile image container repository

通过dockerfile可以生成docker image

自己制作的镜像可以上传到docker hub平台,也可以从平台上拉去我们所需要的镜像

当镜像拉取到本地后,我们可以实例化这个镜像,形成一个container(实例)了

代码语言:javascript
复制
docker run [组织名称]/<镜像名称>:[镜像标签]

dockerfile

概念
  1. Dockerfile 是 Docker 比较重要的概念。它是 Docker 创建镜像的核心,它的出现给 Docker 提供了两大好处:
  2. 文本化的镜像生成操作让其方便版本管理和自动化部署
  3. 每条命令对应镜像的一层,细化操作后保证其可增量更新,复用镜像块,减小镜像体积
dockerfile的编写规则

使用#来注释

from指令告诉docker使用哪个镜像作为基础

run开头的指令会在创建中运行,比如安装一个软件包

copy指令将文件复制到镜像中

workdir指定工作目录

cmd/entrypoint 镜像启动执行命令

最后执行以下命令即可完成docker镜像的创建

代码语言:javascript
复制
docker build lizheming/drone-wechat:latest