简介
做了一个视频检测程序,它是由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
停止容器xxxx -
docker start xxxx
重启容器xxxx -
docker 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镜像的操作,后续会继续更新