简介
做了一个视频检测程序,它是由golang和c++编写的。因为公司要做私有化部署,因此需要打包成镜像然后放到公司的registry镜像仓库里。之前一直没有去熟悉docker,现在刚好机会来了,咱就要好好把握。
安装docker
- 声明:我目前使用的是
Ubuntu 16.04
的版本 - 下载安装:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
。如果下载不了提示库缺失xxx,需要注意的是你的包管理工具,打开/etc/apt/source.list
,替换文件中的源:deb-src http://mirrors.aliyun.com/debian wheezy main contrib non-free deb http://mirrors.aliyun.com/debian wheezy-updates main contrib non-free deb-src http://mirrors.aliyun.com/debian wheezy-updates main contrib non-free deb http://mirrors.aliyun.com/debian-security wheezy/updates main contrib non-free deb-src http://mirrors.aliyun.com/debian-security wheezy/updates main contrib non-free```
然后再使用apt-get update
,接着重新下载安装docker就可以了。
docker
//测试是否安装成功
Dockerfile使用的一条龙
- 准备:我们尽量保证在一个干净的目录下工作,因为docker有个上下文的概念,
mkdir test
创建一个新的工作目录,然后把程序放到该目录。 - 编写Dockerfile,
vim Dockerfile
,内容如下:# 我的程序包名是millipedes,3rdparty和data是程序所需模型和数据,9190是我的程序端口 FROM ubuntu:16.04 COPY ./millipedes /opt/Millipedes/ COPY ./data /opt/Millipedes/data/ COPY ./3rdparty /opt/Millipedes/3rdparty/ ENV LD_LIBRARY_PATH /opt/Millipedes/3rdparty/opencb/lib:/opt/Millipedes/3rdparty/matrix/lib:/opt/Millipedes/ffmpeg/lib EXPOSE 9190 CMD ["/opt/Millipedes/millipedes"]```
- 执行
docker build -t app .
进行构建镜像。其中"."表示上下文目录及该目录,这与相对目录和绝对目录不同。 - 执行
docker images
可以看到已经打包好的镜像。 - 尝试启动我们打包好的镜像
docker run -it -p 9190:9190 app /bin/bash
- 退出镜像
exit
- 登陆
docker login registry.qmemo.com
,之后输入用户名和密码。 - 执行
docker tag app:latest registry.qmemo.com/millipedes/app:v1
修改tag和名称。 - 执行
docker push registry.qmemo.com/millipedes/app:v1
推到公司registry仓库。
docker的命令
首先我们要知道,docker打包出来的镜像有个容器,我们运行这个镜像就会进入这个镜像容器,所以镜像和容器是分开的,那么我们每次要删除一个镜像就要先删除停止里面的容器。
exit
退出容器(镜像也会停止)docker stop xxxx
停止容器xxxxdocker start xxxx
重启容器xxxxdocker rmi app
删除app镜像docker rm -f <容器id>
删除容器docker build -t app .
构建镜像,-t指定要创建的镜像名,.表示Dockerfile文件所在的目录docker images
查看所以的镜像docker ps -a
查看所有的容器docker ps
查看运行中的容器docker run -it app /bin/bash
启动进入容器docker stop <容器id>
停止容器docker restart <容器id>
重启容器docker exec -it <镜像id> /bin/bash
使用exec进入容器,exit退出的时候不会停止容器停止docker attach <容器id>
进入容器
结尾
目前总理了这些关于docker镜像的操作,后续会继续更新