Docker 入门+实战

本文介绍了作者从使用虚拟机到接触Docker的心路历程,阐述了Docker如何简化环境配置,提高开发效率。通过实例展示了如何使用Docker命令快速启动带有特定环境的容器,并挂载本地文件进行操作。还分享了常用的Docker指令和数据管理,帮助读者快速掌握Docker的基础应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、缘起

导师让我跑一个忆阻器网络的GitHub项目,需要C++编译,还要用pytorch训练。自己的电脑是win10,C++编译需要用虚拟机里的linux系统;pytorch还没装,而且虚拟机肯定跑不了这种强度的训练。

因此申请使用课题组的服务器,顺利登陆后,发现g++都没有!IT反问我一句:“为什么不用Docker?”,于是便开启了我docker速成之路

二、简单明了说Docker

我也是花了挺久在弄明白Docker(容器)的概念。不得不说,它真是很有用,正是需求促进了Docker的产生。为了弄清docker,还是从需求端说起吧。

1、虚拟机

假设最开始我们用win系统,现在有个项目想用GCC编译器在linux环境下跑,我们可以怎么办?

  • 最直接的办法:找一台Linux电脑,在上面跑就是了。
  • 再方便一点:不用买电脑,装个双系统。
  • 更方便一点:装个虚拟机。

为了跑一个小项目,我们一步一步缩短时间和成本,最后压缩到装虚拟机的时间,如果已经装好,那么只需要配置python或其他环境。

虚拟机虚拟了实体的电脑,让一台机子上可以运行多台电脑。但免不了装系统的过程。

2、Docker

现在随着业务的增多,有些项目要用tensorflow,而且版本不一样,有些要用pytorch,总之林子大了,什么运行环境都有。而且有些就是小代码,用完之后可能就不用了,花大力气配置环境,几秒钟运行到结果,之后就不用了,真是“食之无味,弃之可惜!”。

是否能够做到测试环境可以即想即用?用完又可以随时回收?Docker孕育而生!

有了docker,你可以查看服务器有哪些镜像,比如ubuntu+python+gcc,centos+PHP+MySQL,MongoDB,Node.js等等,你也可以写个Dockerfile,随机组合需要的环境镜像。第二步,利用这个镜像生成容器,它就是你真正运行的环境,容器就是这个镜像上再加一层可写层,占用很少的空间,而且即用即删。

更加细致的说明可以参考Docker菜鸟教程

三、Docker最好用的命令

了解了Docker的基本概念,现在如果我需要Linux+GCC+Python的环境,而且服务器刚好有这个镜像“centos_gcc”,我的文件在/home/user/test目录,该如何挂载这个目录,然后在这个环境中随心所欲操作?

docker run -it -v /home/user/test:/home/workspace centos_gcc /bin/bash 
  • run: 启动一个镜像为centos_gcc的容器,运行/bin/bash程序
  • -it: i 表示允许对容器的标准输入(STDIN)进行交互,t表示在新容器内指定一个终端terminal
  • -v表示将本地的目录挂载到容器的目录。本地目录必须是绝对路径,容器目录随意,会自动产生。

这样我们就实现了“文件”与“环境”分离,如果服务器已经有这个镜像,那么配置只需要几秒钟,这样我们可以专注于代码,而不是忙于环境配置,大大提高效率。

四、Docker的流水账

1、Docker虚拟机练习笔记
2、指令备忘

常用指令

docker images # 查看所有本地镜像
docker ps  # 查看所有运行的容器
docker ps -a # 查看所有存在的容器,包括停止的
docker container ls #查看所有容器
docker stop d7f6022c5477 #停止这个标签的容器
docker start d7f6022c5477#启动这个标签的容器
docker rm d7f6022c5477 # 删除这个容器,只有stop之后才能删除
docker rmi ubuntu # 删除本地ubuntu镜像,没有ubuntu创建的容器时才能删除
docker top d7f6022c5477# 查看这个容器内的进程
docker search ubuntu # 查找网络的仓库中ubuntu的镜像
docker pull train/webapp # 仓库中下载名为train/webapp的镜像
docker run -it ubuntu /bin/sh # 创建一个ubuntu镜像的容器,在终端(t)交互模式(i) 运行指令/bin/sh
docker exec -it  d7f6022c5477 /bin/bash # 进入到这个标签的容器里
 
sudo service docker restart #重启docker服务
docker service docker stop #关闭docker服务
docker service docker start #开启docker服务
docker build -t my_ubuntu:v1 . #最后的 “.” 不能漏,表示在当前目录寻找Dockerfile
docker cp /root/pcl-pcl-1.8.1.tar.gz 7ff95b333e12:/ #本地文件传输

docker cp mawall_ppcl:/data/dist  /home/data/test/ #容器文件传本地

#启动一个centos容器,宿主机的/test目录挂载到容器的/soft目录。要用绝对路径;
docker run -it -v /test:/soft centos /bin/bash 
 
docker image prune #删除悬虚镜像
docker system df #查看镜像、容器、数据卷所占用的空间

sudo rm -rf ~/.local/share/Trash/*# 清空回收站

数据卷:“其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载的”。感觉像是由一个容器定义的一个数据挂载信息。其他的容器启动可以直接挂载数据卷容器中定义的挂载信息。

docker run -v /home/dock/Downloads:/usr/Downloads  --name dataVol ubuntu64 /bin/bash

docker run -it --volumes-from dataVol ubuntu64 /bin/bash

又见Docker入门+实战

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值