1、该系列为ACWing中Linux基础课,已购买正版,课程作者为yxc
2、y总培训真的是业界良心,大家有时间可以报一下
3、为啥写在这儿,问就是oneNote的内存不够了QAQ
4、该章节为最后一节课,完结撒花
docker教程
docker中包含镜像和容器;镜像可以生成容器,容器修改之后也可以再创造一个镜像。以后迁移即为迁移容器。 镜像和容器类似于印章和图案的关系;
docker在存储镜像和容器时采用压缩存储,即镜像1和镜像2/3都不是完全存储的,相同部分只会存一份(类似于git),存在空间优化。
1、将当前用户添加到docker用户组
为了避免每次使用docker
命令都需要加上sudo
权限,可以将当前用户加入安装中自动创建的docker
用户组(可以参考官方文档):
sudo usermod -aG docker $USER
2、镜像(images)
[container]
表示命令可省略
docker pull ubuntu:20.04
:拉取一个镜像(镜像由两部分构成,名称:版本号)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
中加载出来
3、容器(container)
docker [container] create -it ubuntu:20.04
:利用镜像模板ubuntu:20.04
创建一个容器。docker ps -a
:查看本地的所有容器docker ps
:查看所有正在运行的容器docker [container] start CONTAINER
:启动容器docker [container] stop CONTAINER
:停止容器docker [container] restart CONTAINER
:重启容器docker [contaienr] run -itd ubuntu:20.04
:创建并启动一个容器docker [contaienr] run -it ubuntu:20.04
:创建并启动并进入一个容器docker [container] attach CONTAINER
:进入容器
先按Ctrl-p
,再按Ctrl-q
可以挂起容器(容器可以不关)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
:查看某个容器内的所有进程(PID和容器内的PID不同)docker stats
:查看所有容器的统计信息,包括CPU、内存、存储、网络等信息docker cp xxx CONTAINER:xxx
或docker cp CONTAINER:xxx xxx
:在本地和容器间复制文件(不论是文件夹还是文件都可以直接复制,不用加-r)docker rename CONTAINER1 CONTAINER2
:重命名容器将文件夹复制进docker容器的根目录 docker cp tmp.rar peaceful_kepler:/root 复制根目录 docker cp peaceful_kepler:/root .
docker update CONTAINER --memory 500MB
:修改容器限制
4、实战
进入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镜像
# -p修改端口号映射,容器内22端口映射到本地20000端口(本地22已占用)
# 需要设置云服务器安全组,从20000端口登陆,来源0.0.0.0/0
docker attach my_docker_server # 进入创建的docker容器
passwd # 设置root密码
-
遇到问题1:
- 命令:xxx@VM-20-12-ubuntu:~$ ssh root@localhost -p 20000
- 报错:kex_exchange_identification: read: Connection reset by peer
- 解决:docker容器中没有安装ssh,运行以下代码,即可以像视频中一样连接
apt-get install ssh apt-get update sudo /etc/init.d/ssh start
-
遇到问题2:不同账户免密登陆同一个IP平台的方法:
- 解决:只需要在
.ssh/config
文件中,用不同的Host
名称即可;
9 Host zxyServer_docker1 10 HostName xx.xxx.xx.xxx 11 User zxy 12 Port 20000 13 14 Host zxyServer_docker2 15 HostName xx.xxx.xx.xxx 16 User acs 17 Port 20000
- 解决:只需要在
去云平台控制台中修改安全组配置,放行端口20000
。
返回AC Terminal,即可通过ssh
登录自己的docker容器:
ssh root@xxx.xxx.xxx.xxx -p 20000 # 将xxx.xxx.xxx.xxx替换成自己租的服务器的IP地址
ssh Host别名
然后,可以仿照上节课内容,创建工作账户acs
。
最后,可以参考ssh登录配置docker容器的别名和免密登录。
如果
apt-get
下载软件速度较慢,可以参考清华大学开源软件镜像站中的内容,修改软件源。