搭建云服务器
以下环境为Ubuntu20
云平台作用
关系
- 在租到的服务器上搭建docker类似于在服务器上又开了一台虚拟服务器,重新划分了一下服务器的房子
- docker的搭建原因:docker有很强的迁移性,例如从阿里云的服务器迁移到腾讯云时,使用docker可以很容易地迁移
- docker是非常独立的:可以在一个服务器上开任意多个docker
- 未来的开发环境是在docker所在的第三层
选择配置问题
常规搭建步骤
配置以下本地的 ~/.ssh/config文件,可以实现不用username@hostname,使用别名机制登录
配置一下免密登录
## 免密登录
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文件传到服务器的根目录下
scp .vimrc .tmux.conf myserver:
安装docker
- 登录docker官网,一步一步来就行
配置docker
https://docs.docker.com/engine/install/ubuntu/
将当前用户添加到docker用户组
为了避免每一次使用docker都要加上sudo权限,可以将当前用户加入安装中自动创建的docker用户组
sudo usermod -aG docker $USER
基本概念
- 镜像:image ,相当于一个模板,每一个镜像都可以生成一堆容器,container
- 每个image的名称:xxxx:xxxx,冒号前面为名称,冒号后面为tag,即版本号
镜像
拉取(从docker Hub中下载一个镜像)一个镜像,此处以拉取20版ubuntu为例,镜像名称:镜像版本
docker pull ubuntu:20.04
列出本地所有镜像
docker images
删除某个镜像,此处以ubuntu:20为例
docker image rm ubuntu:20.04 或者 docker rmi ubuntu:20.04
创建某个container的镜像
docker [container] commit CONTAINER IMAGE_NAME:TAG
将镜像ubuntu:20.04导出到本地ubuntu_20_04.tar中(以另一种文件格式保存)
docker save -o ubuntu_20_04.tar ubuntu:20.04
将镜像ubuntu:20.04从本地文件ubuntu_20_04.tar中加载出来
docker load -i ubuntu_20_04.tar
容器
利用镜像创建一个容器,create -it
docker [container] create -it ubuntu:20.04
查看本地所有的容器,所有创建了的容器,不只是启动了的就加[-a]参数,如果不加-a参数的话就是默认正在启动的容器
docker ps [-a]
启动容器,start
docker [container] start CONTAINER
停止容器,stop
docker stop CONTAINER
重启容器,restart
docker restart CONTAINER
创建并启动一个容器,加-d不进入,不加-d就是创建并进入容器,run,-it
docker run -itd ubuntu:20.04
进入容器,先按ctrl+p,再按ctrl+q可以挂起容器
docker attach container
在容器中执行命令,exec
docker exec container command
删除容器,rm
docker rm container
删除所有已经停止的容器,prune
docker container prune
将容器container导出到本地文件xxx.rar中,export
docker export -o xxx.rar container
将本地文件xxx.tar导出为镜像,并且将镜像命名为image_name:tag,import,从本地导向容器是import,从容器导向本地是export,进出关系
docker import xxx.tar image_name:tag
docker export/import 与docker save/load的区别
export/import 会丢弃记录和元数据信息,仅仅保存容器当时的快照信息,例如容器的名字就不会保留
save/load 会保留完整记录,体积更大
查看某个容器的所有进程,top
docker top container
查看所有容器的统计信息,包括CPU,内存,存储,网络等信息,stats
docker stats
在本地和容器之间复制文件,还是和cp和scp的格式一样,先source后destination,先从后到,cp
docker cp xxx container:xxx
docker cp container:xxx xxx
重命名容器,rename
docker rename container1 container2
修改容器限制,update
docker update container --memory 500MB
容器和镜像的区别
- docker的生命周期:镜像image+容器container+仓库registry,容器是由镜像实例化而来
- 容器即为进程,是镜像的实例,是运行环境包的实例,可以针对这个环境包运行N个实例,即容器是镜像的一种具体表现形式
- 镜像即为文件,想象为一个盖章,可以盖到任意的docker平台中去运行
- 容器是基于镜像所创建的,容器中的进程依赖于镜像中的文件
- docker就是一个mini版本的Linux系统,拥有完全与宿主机隔离的系统文件,进程,用户权限,网络空间等
- 镜像和容器的先后顺序:现有镜像后由实例的容器,虽然创建镜像可以参考某个容器,但是标准的做法是先制作镜像后跑容器
docker入门概念
- 开发和运维工程师的结合,更快的交付
docker和docker hub的关系
docker是官网
docker hub是安装docker镜像的仓库
dockerfile image container repository
通过dockerfile可以生成docker image
自己制作的镜像可以上传到docker hub平台,也可以从平台上拉去我们所需要的镜像
当镜像拉取到本地后,我们可以实例化这个镜像,形成一个container(实例)了
docker run [组织名称]/<镜像名称>:[镜像标签]
dockerfile
概念
- Dockerfile 是 Docker 比较重要的概念。它是 Docker 创建镜像的核心,它的出现给 Docker 提供了两大好处:
- 文本化的镜像生成操作让其方便版本管理和自动化部署
- 每条命令对应镜像的一层,细化操作后保证其可增量更新,复用镜像块,减小镜像体积
dockerfile的编写规则
使用#来注释
from指令告诉docker使用哪个镜像作为基础
run开头的指令会在创建中运行,比如安装一个软件包
copy指令将文件复制到镜像中
workdir指定工作目录
cmd/entrypoint 镜像启动执行命令
最后执行以下命令即可完成docker镜像的创建
docker build lizheming/drone-wechat:latest