docker小白使用笔记

文章目录

  • 1. Docker安装
  • 2. Docker简介
  • 3. Docker创建镜像
  • 4. Docker容器的启动和使用
  • 4. Docker镜像打包和删除

1. Docker安装

docker安装教程
docker官网下载地址
docker小白使用笔记_第1张图片

2. Docker简介

趁着等待安装成功的时间,我们了解一下Docker的三个基本的概念:

  • Image(镜像) :镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像(Image)就是一堆只读层(read-only layer)的统一视角
  • Container(容器) :容器 (container) 的定义和镜像 (image) 几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。由于容器的定义并没有提及是否要运行容器,所以实际上,容器 = 镜像 + 读写层
  • Repository(仓库)Docker 仓库是集中存放镜像文件的场所。镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry (仓库注册服务器)就是这样的服务。一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签.。

Docker架构

Docker 使用的是 C/S 结构,即客户端/服务器体系结构。Docker 客户端与 Docker 服务器进行交互时, Docker 服务端负责构建、运行和分发 Docker 镜像。 也知道了Docker 客户端和服务端可以运行在一台机器上,可以通过 RESTful 、 stock 或网络接口与远程 Docker 服务端进行通信。

Docker 的核心组件包括:

  • Docker Client : Docker 客户端。它其实就是 Docker 提供命令行界面 (CLI) 工具,是许多 Docker 用户与 Docker 进行交互的主要方式。最常用的 Docker 客户端就是 docker 命令,我们可以通过 docker 命令很方便地在 host 上构建和运行 docker 容器。
  • Docker daemon :Docker daemon 是服务器组件,以 Linux 后台服务的方式运行,是 Docker 最核心的后台进程,我们也把它称为守护进程。它负责响应来自 Docker Client 的请求,然后将这些请求翻译成系统调用完成容器管理操作。
    Docker Daemon 可以认为是通过 Docker Server 模块接受 Docker Client 的请求,并在 Engine 中处理请求,然后根据请求类型,创建出指定的 Job 并运行。
  • Docker Image
  • Docker Registry
  • Docker Container

3. Docker创建镜像

首先,编写一个Dockerfile文件。

FROM python:3.8-slim-buster
MAINTAINER haozheng <[email protected]>
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
RUN apt-get update
RUN apt-get install ffmpeg libsm6 libxext6  -y
CMD [ "python", "main.py" ]

语法说明

  • FROM是用于指定基础的 images ,一般格式为 FROM or FORM : ,所有的
    Dockerfile 都用该以 FROM 开头,FROM 命令指明 Dockerfile 所创建的镜像文件以什么镜像为基础,FROM
    以后的所有指令都会在 FROM 的基础上进行创建镜像。这里,从 Docker Hub 上 pull 下python 3.8-slim-buster,指定为基础镜像
  • MAINTAINER
  • WORKDIR指定docker服务器上的工作路径为/app
  • COPY当前目录到容器中的 /app 目录下 复制本地主机的 ( Dockerfile 所在目录的相对路径)到容器里
  • RUN 运行环境安装指令
  • CMD 在命令行运行main.py文件

使用下列指令创建一个命为my-cvxtest的镜像:

docker build -t my-cvxtest:v1 .

我们解释一下, -t 是为新镜像设置仓库和名称,即my-cvxtest,v1表示标签。若不设置标签,默认为latest。.表示本地主机Dockerfile的位置,因此不能省略。

4. Docker容器的启动和使用

创建镜像后,我们使用如下命令启动容器。

docker run -v /src:/app -dit --name cvx my-cvxtest /bin/bash

-v表示目录挂载,将本地主机目录/src挂载到docker服务器/app,这样在主机或docker容器中修改文件时就可以同步到另一端
-dit表示挂载程序,不中断。
--name cvx表示容器名为cvx
/bin/bash表示执行docker默认bash程序创建容器

然后,我们可以使用exec命令,执行(进入)容器环境。

docker exec -it cvx /bin/bash

-it 表示交互式启动docker容器,本地主机可以直接读写容器中的文件。

进入容器后,我们就可以按照linux终端的操作方式来运行和调试程序了。

P.S.在docker容器中使用cv2会遇到报错:

Traceback (most recent call last):
  File "main.py", line 5, in <module>
    import cv2
  File "/usr/local/lib/python3.8/site-packages/cv2/__init__.py", line 181, in <module>
    bootstrap()
  File "/usr/local/lib/python3.8/site-packages/cv2/__init__.py", line 153, in bootstrap
    native_module = importlib.import_module("cv2")
  File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
ImportError: libGL.so.1: cannot open shared object file: No such file or directory

这个问题的解决方法可以参考这篇文章docker中cv2报错解决办法
docker小白使用笔记_第2张图片

4. Docker镜像打包和删除

为了方便复用环境,我们可以将生成的docker镜像打一个tar包。

docker save -o mycvx.tar my-cvxtest:v1

save是镜像保存指令
-o XXX.tar表示的生成的tar包名称
my-cvxtest:v1cvx-test表示镜像名,v1表示tag

复用同一个镜像时,我们只需要运用如下命令构建新容器。

docker load -i mycvx.tar     ---- 从 tar 包导入镜像
 
导入镜像后,通过 docker images 便可看到导入的镜像。
 
docker run -itd -p <本地端口>:<容器端口> <镜像名>:<tag>    ---- 通过镜像起容器

使用以后,我们要及时清理不需要的镜像和容器。

docker stop cvx ----停止运行中的容器

docker rm cvx ----删除容器

你可能感兴趣的:(docker,运维,容器)