acwing的docker镜像存放在 /var/lib/acwing/images
在服务器安装不上一个命令,像tmux
装不上tmux可以先sudo apt-get update然后再安装sudo apt-get install tmux
原理
1.将当前用户添加到docker用户组
为了避免每次使用docker命令都需要加上sudo权限,可以将当前用户加入安装中自动创建的docker用户组(可以参考官方文档):
①登录到自己的云服务器中输入以下命令
sudo usermod -aG docker $USER
②然后输入密码
③执行完此操作后,需要退出服务器,再重新登录回来,才可以省去sudo权限。
2.镜像(images)
1.docker pull ubuntu:20.04
:拉取一个ubutu的镜像
2.docker images
:列出本地所有镜像名称,
3.docker image rm ubuntu:20.04
或 docker rmi ubuntu:20.04
:删除镜像ubuntu:20.04
[ ]内的内容是可选项,不是一定项,我们在使用过程中都可以不加
4.docker [container] commit CONTAINER IMAGE_NAME:TAG
:创建某个container的镜像,就是将一个容器刻成一个镜像,并给进镜像起一个名称,以:TAG收尾
5.docker save -o ubuntu_20_04.tar ubuntu:20.04
:将镜像ubuntu:20.04导出到本地文件ubuntu_20_04.tar中,如果不能读,可以加上一个可读权限,chmod +r ubuntu_20_04.tar
6.docker load -i ubuntu_20_04.tar
:将镜像ubuntu:20.04从本地文件ubuntu_20_04.tar中加载出来
3.容器(container)
1.docker [container] create -it ubuntu:20.04
:利用镜像ubuntu:20.04创建一个容器。
docker容器的id一般为通过以上命令生成的字符串的前12位
docker容器的名称:你可以先启动容器,然后,
docker ps -a
查看正在运行的容器,通过容器id查看名称
2.docker ps -a
:查看本地的所有容器
以下系列的CONTAINER都是容器的id,或者容器的名称
当你没有容器的名称,就要使用容器的id
3.docker [container] start CONTAINER
:启动容器
4.docker [container] stop CONTAINER
:停止容器
5.docker [container] restart CONTAINER
:重启容器
6.docker [contaienr] run -itd ubuntu:20.04
:创建并启动一个容器
7.docker [container] attach CONTAINER
:进入容器
进入容器后,会在root目录下,完全可以当作新的服务器进行使用
8.先按Ctrl + p
,再按Ctrl + q
可以挂起容器,并退出
但是直接ctrl + d
可以直接退出,但是会把容器直接关掉
以下在docker容器中执行命令必须先启动该容器才行,command就行如:ls、pwd、tree、等
9.docker [container] exec CONTAINER COMMAND
:在容器中执行命令
10.docker [container] rm CONTAINER
:删除容器,但是不能删除运行中的容器,要想删除一个容器,必须得保证这个容器是被关掉的
11.docker container prune
:删除所有已停止的容器,注意这个地方的container是不能省略的,上面的命令的container是可以省略的
将容器导成一个文件,导成文件的,不光只有镜像
将容器导成一个文件,然后scp导到本地,然后将本地文件在scp导到服务器上,
然后将次文件导成镜像,同时容器也会出现
综上:我们通过export和import导入导出得是容器的镜像,而不是容器本身,容器本身是不会被导入和导出得
12.docker export -o xxx.tar CONTAINER
:将容器CONTAINER导出到本地文件xxx.tar中
13.docker import xxx.tar [image_name:tag]
:将本地文件xxx.tar导入成镜像,并将镜像命名为image_name:tag,这个镜像得名称为可选项,因为系统会自动给你生成,最好写上
docker import tmp.tar myutuntu:1.0
镜像名称:版本号(自定义)
docker export/import
与docker save/load
的区别:
export/import
会丢弃历史记录和元数据信息,仅保存容器当时的快照状态
save/load
会保存完整记录,体积更大
14.docker top CONTAINER
:查看某个容器内的所有进程
15.docker stats
:查看所有容器的统计信息,包括CPU、内存、存储、网络等信息
16.docker cp xxx CONTAINER:xxx
或 docker cp CONTAINER:xxx xxx
:在本地和容器间复制文件
// 理解就是:在服务器中文件与容器中的文件进行得复制
docker cp file.txt CONTAINER:/root # 就是将服务器本地得file.txt文件 复制到容器名称中对应的root目录下,CONTAINER是容器的名字,自定义
docker cp CONTAINER:/root/file.txt . #就是将容器名称中root目录下得file.txt文件复制到服务器得家目录下
# 只有把内容传到服务器本地,才可能通过scp进行本地终端和服务器之间的文件互传
17.docker rename CONTAINER1 CONTAINER2
:重命名容器1为2
18.docker update CONTAINER --memory 500MB
:修改容器限制,将容器得内存设置为500M,如果容器的内存过大的话
4.实战
在奇奇怪怪的云服务器上安装统一的docker镜像呢?
进入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镜像
# 解释:本地得容器端口22映射成一个我们不用的端口20000
docker attach my_docker_server # 进入创建的docker容器
passwd # 设置root密码
ctrl + p, ctrl + q,挂起就可以了
去云平台控制台中修改安全组配置,放行端口20000。方法如下图
控制台-> ecs->实例->在对应的服务器中找到更多
返回AC Terminal,即可通过ssh登录自己的docker容器:
ssh root@xxx.xxx.xxx.xxx -p 20000
# 将xxx.xxx.xxx.xxx替换成自己租的服务器的IP地址,这个是在Ac terminal中登录服务器中镜像里得容器
ssh root@localhost -p 20000
这个在租的服务器里面登录到镜像里的容器
前提是你服务器上得有ssh,否则会报错 -->下面得所有命令是在服务器上输入的
$ ssh root@localhost -p 20000 #通过此命令在服务器上登录到docker
报错:
kex_exchange_identification: read: Connection reset by peer
解决:docker容器中没有安装ssh,运行以下代码:
apt-get install ssh
apt-get update
sudo /etc/init.d/ssh start
ssh root@xxx.xxx.xxx.xxx -p 20000
# 将xxx.xxx.xxx.xxx替换成自己租的服务器的IP
这样即可不用通过服务器区进入docker容器,而是直接通过终端进入容器,前提是你服务器的端口得放开
特别提醒,如果想登录到自己的docker,必须保证自己的docker是开启状态,如果你在退出的时候只能使用ctrl+p,ctrl+q挂起,不能使用ctrl+d杀死容器
然后,可以仿照上节课内容,创建工作账户acs。
最后,可以参考4. ssh——ssh登录配置docker容器的别名和免密登录。
$ vim .ssh/config
Host server1_docker
HostName ip你服务器得ip地址
User acs 你给docker创建的用户名称
Port 20000 你docker得端口号
:wq
$ ssh-copy-id server1_docker
在docker容器下形成的服务器很毛坯,很多东西都需要进行安装
apt-get install sudo,装完后,要退出在重新进入
sudo apt-get install tmux
退出这个docker容器
scp .bashrc .vimrc .tmux.conf server1_docker:
在进入这个容器里
ssh serveer1_docker
小Tips
如果apt-get下载软件速度较慢,可以参考清华大学开源软件镜像网站中的内容,修改软件源。