今天接着上次的文章展开,通过paopaorobot/dvo这个例子介绍一下docker的基本操作以及dockerfile文件。
直接切入主题吧!
基本操作
首先分析一下常见的使用:
- 初始化base image,将dockerhub已有的image拉到本地做二次开发;
- 启动与管理container,将image实例化为container进行二次开发;
- 制作和提交image,将环境配置好集成到container实例,将其制作成image,发布到dockerhub;
接下来一一看一下:
- 拉取镜像
$ docker pull $USER_ID/$IMAGE_NAME:$TAG
$ docker pull paopaorobot/dvo
$USER_NAME
是发布项目的用户名(可选项),$IMAGE_NAME
是项目名称(必选项),$TAG
是版本名称,默认为latest;
- 启动与管理container
$ docker run -it --name=base_name $IMAGE_NAME:$TAG /bin/bash
$ docker run -it -p 5900:5900 -v /rgbd:/data paopaorobot/dvo
![](https://i-blog.csdnimg.cn/blog_migrate/651d4db5c4439d963de61a69b64f1344.png)
-it
和--name
都是启动container的可选参数,-it
是指进入交互模式;--name
是制定container的名字,不指定的情况下是系统随机指定;
/bin/bash
是进入container后启动默认命令行交互;
-p
是建立本机与容器的端口连接;在这里开了5900端口,可以通过VNC服务开启界面控制;
-v
是挂载本机目录到容器。
![](https://i-blog.csdnimg.cn/blog_migrate/b89ae4012206c61e7c70b9b532884c4c.png)
当然,我们也可以直接在刚刚的命令行中操作,默认进入系统根目录,拥有root权限,可以对container内容进行任意修改。
如果想要退出container到本机,有两种方式:ctrl+p+q
退出后container仍在后台运行,修改内容被保存;ctrl+d
退出后container会被停止且修改内容全部撤销。
有时候,我们不想要某个container了,可以通过以下语句进行删除:
$ docker stop $CONTAINER_ID
$ docker rm $CONTAINER_ID
- 制作与提交image
$ docker commit -m="$MESSAGE" -a="AUTHOR" $CONTAINER_ID $USER_ID/$IMAGE_NAME:$TAG
-m
与-a
是可选项,类似于github,加入更新日志和作者信息。
注册dockerhub个人账号,新建respository,本地登录账号进行上传,
$ sudo docker login
$ docker push $USER_ID/$IMAGE_NAME:$TAG
这些基本操作已经可以满足日常使用,下面贴几张paopaorobot/dvo测试的图,然后再继续介绍dockerfile文件。
![](https://i-blog.csdnimg.cn/blog_migrate/6c754ce4509886cb9aefaec45afa5073.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d0dd50d8b0caa2cb2dc7013dc1bf6a31.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2fb8d20930856a7eda891ffb5a6fa31c.png)
初次体验之后,感觉硬件开销真的不大。
Dockerfile
Dockerfile是Docker提供的构建image的方式,可以实现构建image所需的一切操作,包括基础镜像、安装库等。
这里以paopaorobot/dvo为例,Dockerfile文件见https://hub.docker.com/r/paopaorobot/dvo/dockerfile。
- FROM
FROM指令指定构建的image所需的base image; - RUN
RUN指令代替了container中执行的终端命令; - COPY
COPY命令的基本作用是将外部文件复制到image中,我们可以先在宿主机中写好RUN语句的脚本,然后直接COPY进去; - ENV
ENV指令设置环境变量; - ENTRYPOINT
ENTRYPOINT指令用来指定image实例化时调用的程序; - CMD
CMD指令用来设置image实例化时调用的默认命令;
到这里就介绍完了,做个总结吧,这次主要以paopaorobot/dvo为例,介绍了一下docker的基本操作,包括拉取镜像、管理容器、发布镜像,然后简单介绍了Dockerfile的常用指令。
参考:
[1]. Dockerfile reference
[2]. 泡泡Docker基础镜像集发布