Docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。



docker的基本概念

docker最重要的三个概念是:镜像(image),容器(container),仓库(repository),在这三个概念中,镜像是最重要的概念。

镜像

我们可以把镜像理解为一个文件系统,并且是一个只读的文件系统。镜像是由一层层的只读层构造起来的,但是从使用者的角度来看我们只有一个镜像而已。那么问题就来了,镜像是只读的,那么我们在使用它的过程中,如果需要对它进行修改,该怎么办呢,别着急,这个就得看我们的容器了。

容器

容器是镜像的一个运行实例,可以不准确的把镜像当作类,容器当作对象。容器其实他的结构是与镜像相类似的,底部也是一层层的只读层,只不过在最上层会存在一个存储层,我们可以在这一层定制化我们的这个容器,还可以通过build命令,把容器打包成我们自己需要的镜像。另外镜像启动后会形成一个容器,容器在计算机中是一个进程,但这个进程对其他进程并不可见。

容器的启动过程:

检查镜像是否在本地存在,如果不存在去远程仓库下载

==>利用镜像创建一个容器

==>启动刚刚创建的容器

==>分配一个文件系统给容器,并且在镜像层外挂载一个可读可写层

==>从宿主主机的网桥接口中桥接一个给容器

==>从网桥中分一个ip地址给容器

==>执行用户指定的应用程序

==>执行完毕后容器自动终止

仓库

这个理解起来就很简单了,大家应该有使用过git,他是有一个远程的仓库,这个仓库记录着我们的代码,和每一次我们提交的记录。但是在这里,把docker的仓库比做maven仓库更加恰当,就相当于我们可以去maven远程仓库取我们需要的依赖,多个依赖构成了我们的整个项目,这个思想同样适用于docker。默认情况下,我们都是从docker hub中取得的镜像(http://registry.hub.docker.com/)

Docker cheatsheet

Docker 命令

1. docker create:基于镜像创建容器。

docker create --name newnginx nginx:latest,这句命令的意思是使用nginx的镜像来创建一个名叫newnginx的容器

- 本地有就使用本地镜像,没有则从远程镜像库拉取。

- 创建成功后会返回一个容器的ID

2.docker pull :拉取一个或多个镜像

docker pull registry.cn-qingdao.aliyuncs.com/openvino/workshop:[image_tag]

下载完成后显示

Status: Downloaded newer image for ****

3.docker images :查看主机上的镜像

4.docker run 使用镜像名启动一个容器

例: docker run -it --name=openvino_serve openvino:latest /bin/bash

-i:打开容器的标准输入。

-t:告诉docker为容器建立一个命令行终端

-d: 参数默认不会进入容器

openvino:latest openvino镜像名

/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

--name 别名

例:docker run -d -P training/webapp python app.py

-P:将容器内部使用的网络端口映射到我们使用的主机上。

使用 docker ps 来查看我们正在运行的容器:

runoob@runoob:~# docker ps

CONTAINER ID IMAGE COMMAND ... PORTS

d3d5e39ed9d3 training/webapp "python app.py" ... 0.0.0.0:32769->5000/tcp

以下为端口信息

PORTS

0.0.0.0:32769->5000/tcp

Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上。

这时我们可以通过浏览器访问WEB应用

也可通过 docker port 容器ID 来查看容器端口的映射情况。

5.docker exec:在运行的容器中执行命令

例如:docker exec-i -t newnginx /bin/bash意思为在容器 newnginx 中开启一个交互模式的终端

-d :分离模式: 在后台运行

-i:打开容器的标准输入。

-t:告诉docker为容器建立一个命令行终端

要退出终端,直接输入 exit,退出容器终端,不会导致容器的停止

name:指定容器名称,可以不填(随机),建议根据具体使用功能命名,便于管理

6. docker ps -a :查看所有容器,包括停止的

docker ps: 查看当前运行的容器

CONTAINER ID:容器的唯一表示ID。

IMAGE:创建容器时使用的镜像。

COMMAND:容器最后运行的命令。

CREATED:创建容器的时间。

STATUS:容器状态。

PORTS:对外开放的端口。

NAMES:容器名。可以和容器ID一样唯一标识容器,同一台宿主机上不允许有同名容器存在,否则会冲突。

7. 再次启动容器需要的操作

docker start -i 容器名 #直接进入容器里面

sudo docker start 容器名 #仅仅是打开,需要和下面这句两句一起才等于第一种方法

sudo docker attach 容器名 #将容器和创建时的终端关联,需要再按多一下回车才会显示终端

docker attach 容器ID #注意: 如果从这个容器退出,会导致容器的停止。

8. 修改容器

docker commit 命令来提交更新后的副本。

docker run -t -i docker—image /bin/bash

在容器中添加应用

docker commit -m "" -a "" 0b2616b0e5a8 ouruser/sinatra:v2

-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;

-a 可以指定更新的用户信息;之后是用来创建镜像的容器的

ID;最后指定目标镜像的仓库名和 tag 信息。

创建成功后会返回这个镜像的 ID 信息。

9. docker export 导出容器

docker export 1e560fca3906 > ubuntu.tar 导出容器 1e560fca3906 快照到本地文件 ubuntu.tar。

10. docker import导入容器快照

cat docker/ubuntu.tar | docker import - test/ubuntu:v1

使用 docker import 从容器快照文件ubuntu.tar导入为镜像test/ubuntu:v1

11. docker pause

docker pause <容器 ID>:暂停容器中所有的进程。

可通过docker unpause恢复容器中所有的进程。

例如:docker pause nginx意思为暂停nginx服务;docker unpause nginx意思为启动刚刚暂停的nginx服务。

这两条命令比较简单,与以往命令不同的是docker使用了pause和unpause两个命令。

在linux中一般会使用start、stop、restart、pause来实现一个服务的启动停止和重启,没有unpause的概念。

docker stop <容器 ID> :停止停容器中所有的进程,将容器退出

停止的容器可以通过 docker restart 重启:

docker kill [NAME]/[CONTAINER ID]:强制停止一个容器。

12. docker inspect :查看该容器的详细信息

docker inspect :looks at all the info on a container (including IP address)

查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。

13. docker rm :删除容器

docker rm [NAME]/[CONTAINER ID]:不能够删除一个正在运行的容器,会报错。需要先停止容器。

Docker 安装openvino

Docker 挂载摄像头

https://blog.csdn.net/weixin_40922744/article/details/103245166

docker run -it --device=/dev/video0 <image_name>

--device参数详细明确Docker容器能够使用哪些设备

Docker 显示图像

linux系统目前的主流图像界面服务X11支持 客户端/服务端(C/S)的工作模式,只要在容器启动的时候,将 『unix:端口』或『主机名:端口』共享给Docker,Docker 就可以通过端口找到显示输出的地方,和linux系统共用显示接口。

sudo apt install x11-xserver-utils

  • 允许所有用户访问显示接口

    xhost +

  • 只允许Docker用户访问显示接口 (两者选其一即可)

    xhost +local:docker

  • docker run -it --rm --device=/dev/video0 -e DISPLAY=unix$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix whynot0/opencamrea:v1

-v /tmp/.X11-unix:/tmp/.X11-unix 共享本地unix端口

-e DISPLAY=unix$DISPLAY 修改环境变量DISPLAY

在容器内操作

  • 在容器内安装包

    docker exec coursera-aml-nlp pip3 install PACKAGE_NAME

    注意理想情况下,所有软件包都应该是Dockerfile的一部分。 如果某些东西丢失,请打开一个问题或者提交一个PR来更新 Dockerfile。

  • 查看容器内部的标准输出

    docker logs [ID或者名字] 可以查看容器内部的标准输出,看到在这个容器做了什么操作

    docker logs -f [ID或者名字] 查看容器内部的标准输出最后10行,然后追踪文件

  • 查看容器内部运行的进程

    docker top 来查看容器内部运行的进程

    runoob@runoob:~$ docker top wizardly_chandrasekhar

    UID PID PPID ... TIME CMD

    root 23245 23228 ... 00:00:00 python app.py

docker 使用容器的jupyter

  1. 运行容器并开启映射 docker run -i -t -p 7777:8888 [other options]

而-p 7777:8888 本地服务器本身的7777端口会映射到container里面的8888端口

前面的7777可以更改为别的数字,只要别和服务器自身已经使用的端口产生冲突就好,8888是jupyter notebook的默认端口。

2 、在container里安装jupyter notebook

(1) pip3 install PACKAGE_NAME

(2)运行python或ipython 设置密码,生成密钥

from notebook.auth import passwd

passwd()

会生成一个sha1的秘钥

(3)quit() 退出python

(4)生成jupyter notebook的配置文件

jupyter notebook --generate-config

这时候会生成配置文件,在 ~/.jupyter/jupyter_notebook_config.py

(5)修改配置文件 ~/.jupyter/jupyter_notebook_config.py

c.NotebookApp.ip=''

c.NotebookApp.password = u'sha1:密钥号'

c.NotebookApp.open_browser = False

c.NotebookApp.port =8888

8888表明要使用container的8888端口访问jupyter,然后保存退出。

(6)启动jupyter

jupyter notebook --allow-root

(7)在本地浏览器输入

127.0.0.1:7777

或直接拷贝带token的URL在本地浏览器打开

http://[all ip addresses on your system]:8888/?token=
*********

持久数据管理

docker run -it -p 8888:8888 -v/Users/yourname/data:/home/docker/data deeprig/fastai-course-1

*将docker中的jupyter的8888接口与本机的8888接口关联

  • -v/Users/yourname/data 本地目录,windows系统文件夹映射需要绝对路径,windows目前只支持C盘
  • /home/docker/data 冒号后为镜像内挂载的路径
  • deeprig/fastai-course-1 用户名/仓库名,指定使用的镜像
  • 本地数据目录现在将在 /home/docker/data的容器中可见

Docker 课程

https://edu.51cto.com/center/course/lesson/index?id=347210

基于 TensorFlow 、OpenCV 和 Docker 的实时视频目标检测

https://www.sohu.com/a/242832191_114877

Docker 安装

https://docs.docker.com/docker-for-windows/install/

Docker镜像上传到阿里云

Info

docker ps shows running containers.

docker logs gets logs from container. (You can use a custom log driver, but logs is only available for json-file and journald in 1.10).

docker inspect looks at all the info on a container (including IP address).

docker events gets events from container.

docker port shows public facing port of container.

docker top shows running processes in container.

docker stats shows containers' resource usage statistics.

docker diff shows changed files in the container's FS.

Import / Export

docker cp copies files or folders between a container and the local filesystem.

docker export turns container filesystem into tarball archive stream to STDOUT.

Info

docker history shows history of image.

docker tag tags an image to a name (local or registry).

Load/Save image

  • Load an image from file:

    docker load < my_image.tar.gz
  • Save an existing image:

    docker save my_image:my_tag | gzip > my_image.tar.gz

Import/Export container

  • Import a container as an image from file:

    cat my_container.tar.gz | docker import - my_image:my_tag
  • Export an existing container:

    docker export my_container | gzip > my_container.tar.gz

Registry & Repository

A repository is a hosted collection of tagged images that together create the file system for a container.

A registry is a host -- a server that stores repositories and provides an HTTP API for managing the uploading and downloading of repositories.

Docker.com hosts its own index to a central registry which contains a large number of repositories. Having said that, the central docker registry does not do a good job of verifying images and should be avoided if you're worried about security.

  • docker login to login to a registry.
  • docker logout to logout from a registry.
  • docker search searches registry for image.
  • docker pull pulls an image from registry to local machine.
  • docker push pushes an image to the registry from local machine.

windows 上docker 配置

https://docs.microsoft.com/zh-cn/virtualization/windowscontainers/manage-docker/configure-docker-daemon

阿里天池 docker 入门赛

https://tianchi.aliyun.com/competition/entrance/231759/information

https://yq.aliyun.com/articles/60601?spm=a2c6h.12873639.0.0.50265056TxrPXW

docker 概览 (1)的更多相关文章

  1. Docker 概览

    什么是Docker Docker是开发,运行和部署应用程序的开放管理平台. 开发人员能利用docker 开发和运行应用程序 运维人员能利用docker 部署和管理应用程序 Docker 平台介绍 Do ...

  2. Docker概览

    Docker.xmind下载

  3. Kubernetes & Docker

    Docker核心技术原理及其应用 Docker 概览 Docker版本与安装介绍 Docker 核心技术之镜像 Docker 核心技术之容器 Docker 核心技术之容器与镜像 Docker 核心技术 ...

  4. Docker 生态概览

    Docker 和容器技术的发展可谓是日新月异,本文试图以全局的视角来梳理一下 docker 目前的生态圈.既然是概览,所以不会涉及具体的技术细节. Docker 自从发布以来发生了很多的变化,并且有些 ...

  5. docker底层技术概览

    docker解决了云计算环境难于分发并且管理复杂,而用KVM.Xen等虚拟化又浪费系统资源的问题.Docker最初是基于lxc构建了容器引擎,为了提供跨平台支持,后又专门开发了libcontainer ...

  6. Docker生态概览

    百花齐放的容器技术 虽然 docker 把容器技术推向了巅峰,但容器技术却不是从 docker 诞生的.实际上,容器技术连新技术都算不上,因为它的诞生和使用确实有些年头了.下面的一串名称肯能有的你都没 ...

  7. Docker容器编排器概览

    就像Apple推出iPhone让智能手机变成主流,Docker让容器变成了主流.自从项目发布以来,Docker着重于提升开发者的体验.基本理念是可以在整个行业中,在一个标准的框架上,构建.交付并且运行 ...

  8. 初识Docker和Windows Server容器

    概览 伴随着Windows Server 2016 Technical Preview 3 (TP3)版本的发布,微软首次提供了Windows平台下地原生容器.它集成了Docker对Windows S ...

  9. docker好文收藏

    深入浅出Docker(一):Docker核心技术预览 2. 核心技术预览 Docker核心是一个操作系统级虚拟化方法, 理解起来可能并不像VM那样直观.我们从虚拟化方法的四个方面:隔离性.可配额/可度 ...

随机推荐

  1. 配置ssh免密登录遇到的问题——使用VMware多虚拟机搭建Hadoop集群

    搭建环境: 虚拟机 VMware12Pro      操作系统  centos6.8        hadoop 1.2.1 1.导入镜像文件,添加java环境 1.查看当前系统中安装的java,ls ...

  2. 浅析二分搜索树的数据结构的实现(Java 实现)

    目录 树结构简介 二分搜索树的基础知识 二叉树的基本概念 二分搜索树的基本概念 二分搜索树的基本结构代码实现 二分搜索树的常见基本操作实现 添加操作 添加操作初步实现 添加操作改进 查询操作 遍历操作 ...

  3. FormDataMultiPart获取表单文件的大小

    在完成springboard某个功能时遇到个问题,前端表单上传了个文件,服务端接收的是FormDataMultiPart,希望通过FormDataMultiPart拿到上传文件的size. 一开始获取 ...

  4. 微服务交付至kubernetes流程

    目录 1.微服务简介 2.K8s部署微服务考虑的问题 3.项目迁移到k8s流程 1.微服务简介 微服务优点 服务组件化 每个服务独立开发.部署,有效避免一个服务的修改引起整个系统重新部署 技术栈灵活 ...

  5. JAVA——桌球游戏(动画)

    跟着视频敲得 ,虽然不是自己的思路 ,不过对代码多了一点了解:涉及到继承类 主函数:创建一个BallGame对象,调用一个launchFrame函数 : launchFrame函数:严格来说是方法 , ...

  6. 带权并查集 HDU - 3047

    题意: 一圈座位有n个,给出m组序号之间的关系,比如,1 2 150 代表2号坐在1号位置序号+150,看m组数据有多少组冲突的. 思路: 带权并查集模板. #include<stdio.h&g ...

  7. 本机安装oracle12C

    1.先安装的oracle12C,创建了oracle主目录用户admin,其中主目录用户为admin,口令为123456. 2.其次创建监听,再创建数据库实例. 3.全局数据库名称为orcl.lan,管 ...

  8. link与@import区别整理,一个表格带你了解

    网上有许多link和@import的文章,不过大多比较零散,个人觉得一个表格的话看起来能够直观的表达. 于是制作了如下表格: 关于权重这个存在着一些争议,这次碰巧看到了一篇的博客很好的解释了这个问题, ...

  9. 如何找回QQ聊天记录、语音、图片?

    多图长图预警,本教程适用于 安卓手机 认真仔细看完答案的成功几率翻倍哟! 请各位认真看答案!求您了~ 2020年/4/4日 更新 人民不会忘记,祖国不会忘记,我们不会忘记,先烈不朽. 调整答案顺序,使 ...

  10. Selenium系列(二十) - PageObject模式的详细介绍

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...