解锁Docker技能,再也不用担心环境和小伙伴冲突了

2017-12-27  本文已影响202人  文幕

以基于ubuntu镜像创建自己的镜像并打包带走为例解读docker的使用方法。

ps:docker命令和git命令极其相似

step1 查找ubuntu镜像

在安装好docker之后,我们需要使用如下命令来查找需要的镜像

docker search 镜像关键字
查找docker镜像

step2 下载ubuntu镜像

查找完成之后,使用如下命令来下载需要的镜像

docker pull 镜像仓库全称
下载镜像

step3 启动ubuntu镜像

下载完成之后,使用如下命令来下载启动的镜像

nvidia-docker run --name zj-ubuntu -i -t ubuntu /bin/bash

其中,--name表示使用基于ubuntu镜像创建一个名称为zj-ubuntu的临时镜像,-i 以交互模式运行容器,-t 为容器重新分配一个伪输入终端,加上-i -t之后,当前终端会被镜像里的终端代替

运行镜像

此时通过下面的命令可以查询当前运行的镜像信息

docker ps -a
image.png

启动时,挂载本地文件夹

nvidia-docker run --name zj-ubuntu -i -t -v /data:/data ubuntu /bin/bash

-v表示挂载本地文件夹,后面的/data:/data,前一个/data表示宿主机文件夹,后一个/data表示镜像里显示的文件夹。

至此,已经完成了镜像的下载和运行,但是在运行镜像之后搭好的环境怎么保存呢?

step4 退出容器

通过run命令开始的镜像,会形成一个容器,这是可以理解为,我们的机器开机了,想关机,直接输入exit就能够完成关机,此时使用下面命令可以获得容器id

docker ps -a

获得容器id之后,可以使用下面的命令开机并再次进入。

docker start 容器id或容器名  #开机
docker attach 容器id或容器名 #登录

step5 保存ubuntu镜像

在对镜像做完更改之后,使用如下命令来保存更改

docker commit -a "zj" -m "456" 93934b35e497 zj-ubuntu1:1.0

-a表示作者信息,-m表示此次更改的提交信息,93934b35e497为镜像id,zj-ubuntu1是镜像保存的仓库名,1.0是镜像的tag信息,可以理解为版本号。

step6 提交zj-ubuntu镜像

之前我们已经保存了我们对于ubuntu镜像的更改,并以此创建了一个新的镜像zj-ubuntu1(docker不会再原有的镜像上做更,每次commit都会创建一个新的)。

接下来,我们将创建好的镜像提交到https://hub.docker.com上,已完成打包带走的初衷。

使用如下命令可以提交指定的docker镜像到https://hub.docker.com

docker push 镜像仓库地址

在提交之前,我们需要使用如下命令登录

docker login

随后使用如下命令提交镜像

docker push zj-ubuntu1:1.0

就这么提交会报错

提交报错
可以看到,提交被拒绝了,为什么呢?其实是因为,docker在提交时找不到zj-ubuntu这个用户,我们需要使用下面的命令来对镜像仓库进行修改
 docker tag zj-ubuntu1:1.0 wenmu/zj-ubuntu:1.0

wenmu是我的docker用户名。
修改完成之后,使用下面的命令就可以愉快的提交了。

 docker push wenmu/zj-ubuntu
提交完成

去官网检查一下


打包带走

可以看到,提交成功,至此,打包带走完成。

step7 打包镜像到本地

nvidia-docker save -o ubuntu.tar 53489185ba5a

加载打包的镜像

nvidia-docker load -i ubuntu.tar

重命名镜像

docker tag 53489185ba5a pp:latest
上一篇下一篇

猜你喜欢

热点阅读