docker安装使用系列二之容器、镜像、仓库使用实例分析

2023-05-16

       可能大家对docker了解不深,这里再简单赘述一下docker这款利器。

1.什么是docker

Doker是基于GO语言实现的云开源项目,通过对应用组件的封装、分发、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”。这里的应用组件既可以是web应用 也可以是一套数据库服务 甚至是一个操作系统或编译器。 属于对 Linux 容器的一种封装,提供简单易用的容器使用接口。

2.有什么用

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

Docker 的主要用途,目前有三大类。

(1)提供一次性的环境。**比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。

(2)提供弹性的云服务。**因为 Docker 容器可以随开随关,很适合动态扩容和缩容。

(3)组建微服务架构。**通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。

与虚拟机的差异:

特性容器虚拟机
启动秒级分钟级
硬盘使用一般为MB一般为GB
性能接近原生弱于
系统支持量单机支持上千个容器一般是几十个

3.怎么用

     docker的三大核心部分,仓库(repository),镜像(image),容器(container),简单理解为仓库就是存放所有的镜像,如dockerhub和阿里云镜像等,而镜像和容器的关系就像类和实例的关系,三者在使用过程中操作如下:

实际生产过程中,我们可以通过docker来实现对项目和环境的整体打包,一般有两种方式,一是先在服务器上构建好生产环境(先pull好基础镜像,然后逐渐添加自己需要的软件包和库),再运行该镜像,进入该镜像生成的容器内,再将整个项目copy到容器内,再通过commit就可以生成自己包含项目和环境所需的镜像文件了。二是通过dockefile来实现。下面以简单实例进行说明:

case1:在python开发之际,利用Docker搭建Python的开发环境,具体操作如下:

(1)获取所需的镜像

docker pull python:3.5

(2)构建py文件

for i in range(3):
    print("hahahhaha")

直接用 docker run 命令运行 py文件

docker run  -v /file:/usr/src/file  -w /usr/src/file python:3.5 python  test.py

需要注意的是:

  • -v 将主机的py文件目录挂载到容器中的/usr/src/file(挂载点可换,第一个file需要是绝对路径)

  • -w 指定容器的/usr/src/file目录为工作目录(与上面的挂载点相同)

  • python test.py 先指定容器,然后用容器中的python命令来执行工作目录的test.py

实例1:下载镜像:docker pull ubuntu

进入ubuntu容器交互系统:

docker run -i -t ubuntu /bin/bash

-t 是启动终端
-i是允许进行交互
这时候敲python命令会发现没有python

ubuntu下安装python:

apt-get update
apt-get install python3
#安装好python用输入python3试一下
#安装pip
apt-get install python3-pip(这个命令好像会同时安装python2.7)
#安装好pip用输入pip试一下
apt-get install python3-dev
apt-get install openssl
apt-get install libssl-dev
apt-get install libffi-dev

查看是否成功:

docker run  -v /Users/zjl/python3i/py3image:/py3image  -w /py3image ubuntu python3 a.py

Docker允许通过外部访问容器或者容器之间互联的方式来提供网络服务。容器启动之后,容器中可以运行一些网络应用,通过-p或-P参数来指定端口映射。

注意:
宿主机的一个端口只能映射到容器内部的某一个端口上,比如:8080->80之后,就不能8080->81
容器内部的某个端口可以被宿主机的多个端口映射,比如:8080->80,8090->80,8099->80,

-p   小写p表示docker会选择一个具体的宿主机端口映射到容器内部开放的网络端口上。
-P   大写P表示docker会随机选择一个宿主机端口映射到容器内部开放的网络端口上。

(3)编写dockfile文件

具体dockerfile编写指令可以参考docker---Dockerfile编写 - 爱笑的张飞 - 博客园,直接在当前目录下利用vim命令生成该文件,文件内容可以如下:

FROM python:3.5
COPY . /usr/src/file
WORKDIR /usr/src/file
ENTRYPOINT ["python"]
CMD ["./test.py"]

如果是在windows下,也一样编写,详情可参考https://www.cnblogs.com/xianwang/p/12039922.html

(4)利用docker build 创建容器

docker build -t dockerfile:v1.0 .

最后成功结果如下

利用docker images查看所有的镜像,如果出现了dockerfile,然后运行该镜像的id,若运行结果如下,则说明创建成功。

(5)尝试save /load来保存和加载镜像文件

###保存
docker save dockerfile >1.tar  ####将dockerfile保存成1.tar文件

###加载
docker load <1.tar   ####加载镜像文件


###补充:在实验的时候需要先删除dockerfile镜像时,可以利用docker rmi -f dockerfile来实现

       在安装docker之前可以在docker在线实验室里进行练习实验,具体参考链接Play with Docker。

上面说的是在基本容器的外面再基于此重新构建一个新的容器,但是如果你不想写dockerfile,直接在原基础镜像上,添加一些自己的操作来形成新的镜像,则可以参考以下操作,

###
启动容器
docker run -itd --name 新名字 基础镜像 /bin/bash
进入
docker exec -it  容器id /bin/bash  
安装工具
apt-get install xxx
apt-get install xxx

###在容器外面
提交docker容器重新转为镜像
docker commit 容器id new_name:version
导出镜像
docker save new_name:version -o new_name.tar

实例2:

先进入打包好的项目路径,编写dockerfile文件

vim Dockerfile  ###开始编写dockerfile文件

接下来里面内容为,

FROM registry.docker-cn.com/library/tomcat  ####基于哪个镜像

MAINTAINER heihezi heihezi@foxmail.com   ###谁做的

COPY myproject.war /usr/local/tomcat/webapps  ###将项目拷贝到镜像中去打包成新的镜像

dockerfile根据自己的情况进行修改,最后通过下面指令将项目和环境整体打包成为一个镜像。

sudo docker build -f Dockerfile -t myproject:latest .   ###注意不要丢了最后的 .

(6)删除镜像

    当自己pull下来一些images后不再使用,这时候可以对其进行删除,利用下面指令实现

###example
sudo docker pull nginx:latest

sudo docker rmi nginx   ###可以加上-f进行强制删除

如果在删除镜像时出现Docker错误:image has dependent child images,这时候正确的做法就是先停止相关容器、删除相关容器、然后再删除镜像即可。下面这个指令可以查看列出所有在指定 image 之后创建的 image 的父 image,其中 xxxxxx 是报错 image 的 id

docker image inspect --format='{{.RepoTags}} {{.Id}} {{.Parent}}' $(docker image ls -q --filter since=xxxxxx)

补充:

》docker命令前想要免加sudo 

添加docker group:
sudo groupadd docker

将当前用户添加到docker组:
sudo usermod -aG docker your_username

重启docker服务:
sudo service docker restart

》常见的命令

  • 容器列表

docker ps

docker ps –a
  • 启动容器

docker restart 容器id1 [容器id2] [...]  

  • 停止容器

docker stop [container id1] [container id2] [...]  

  • 启动容器

docker start [container id1] [container id2] [...]  

  • 镜像列表

docker images

  • 删除镜像

docker rmi [image id1] [image id2] [...]   ####删除镜像

docker rm [container id1]  ###删除容器

docker rmi $(docker images -q)

  • 启动所有容器

docker start $(docker ps -a -q)  

  • 更新所有容器启动时自动启动

docker update --restart=always $(docker ps -q -a)

  • 监控

docker stats 容器1 [容器2]  

  • 监控所有容器

docker stats $(docker ps -a -q)

docker stats --no-stream=true $(docker ps -a -q)  

  • 进入容器内部

docker exec -it [container id] /bin/bash

docker exec -it [container id] bash    

docker run :根据镜像创建一个容器并运行一个命令,操作的对象是 镜像;

docker exec :在运行的容器中执行命令,操作的对象是 容器。
  • 查看容器日志

docker logs [container id]  

容器卷:实现容器的持久化和同步操作,同时可以满足容器间的数据共享。

###格式一般为:
-v 容器目录(匿名挂载)或 -v 本地目录:容器目录(具名挂载)

docker run  -v /usr/ToolsAPIDir:/ToolsAPIDir1 -d -p 5005:5004 -it toolsapi:v8 python3 tools_api.py


docker run -it --name dc02 --volumes-from dc01 zzyy/centos  ###dc02容器继承自dc01容器

dockerfile

具体的:

docker-compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。如果你还不了解 YML 文件配置,可以先阅读 YAML 入门教程。

Compose 使用的三个步骤:

>使用 Dockerfile 定义应用程序的环境。

>使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。

>最后,执行 docker-compose up 命令来启动并运行整个应用程序。

  • build

构建或重新构建服务。 服务一旦构建后,将会带上一个标记名,例如 web_db。 可以随时在项目目录下运行 docker-compose build 来重新构建服务。

  • up

构建,(重新)创建,启动,链接一个服务相关的容器。 链接的服务都将会启动,除非他们已经运行。 默认情况, docker-compose up 将会整合所有容器的输出,并且退出时,所有容器将会停止。 如果使用 docker-compose up -d ,将会在后台启动并运行所有的容器。 默认情况,如果该服务的容器已经存在, docker-compose up 将会停止并尝试重新创建他们(保持使用 volumes-from 挂载的卷),以保证 docker-compose.yml 的修改生效。如果你不想容器被停止并重新创建,可以使用 docker-compose up --no-recreate。如果需要的话,这样将会启动已经停止的容器。

  • down

docker-compose down 停止并删除容器

docker-compose down --rmi local

  • rm

删除停止的服务容器。

docker-compose rm  

  • logs

查看服务的输出。

docker-compose logs

  • ps

列出所有容器。

docker-compose ps

  • kill

通过发送 SIGKILL 信号来强制停止服务容器。支持通过参数来指定发送的信号,例如

$ docker-compose kill -s SIGINT

参考链接:

docker学习之搭建自己的本地镜像仓库_IT行业学习者的博客-CSDN博客_搭建本地镜像仓库(docker学习之搭建自己的本地镜像仓库)

Docker——入门实战_等一杯咖啡的博客-CSDN博客_docker入门与实战(Docker——入门实战)

快速入门Docker---用Docker搭建Python的开发环境_逐夸父的博客-CSDN博客_docker创建python环境(快速入门Docker---用Docker搭建Python的开发环境)

一个Python项目(带前端),部署到Docker的完整过程_学编程的司马光的博客-CSDN博客_docker部署python项目(一个Python项目(带前端),部署到Docker的完整过程)

docker搭建python环境并打包镜像然后使用镜像启动python程序和flask程序_ZJL-阿友的博客-CSDN博客_docker python环境镜像(docker搭建python环境并打包镜像然后使用镜像启动python程序和flask程序)

Docker 删除镜像_不知道取啥昵称的博客-CSDN博客_docker 删除镜像(Docker 删除镜像)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker安装使用系列二之容器、镜像、仓库使用实例分析 的相关文章

  • VINS Fusion GPS融合部分

    概述 VINS Fusion在VINS Mono的基础上 xff0c 添加了GPS等可以获取全局观测信息的传感器 xff0c 使得VINS可以利用全局信息消除累计误差 xff0c 进而减小闭环依赖 局部传感器 如相机 xff0c IMU x
  • STM32烧录一次后无法再次烧录

    STM32烧录一次后无法再次烧录 本人是使用cubemx配置stm32 xff0c 在配置sys时没有配置Debug xff0c 所以会导致程序只可以烧录一次的情况 xff0c 再次烧录会发生无法找到芯片的情况 解决方法是将单片机reset
  • Vins-fusion gps融合 KITTY数据集测试

    下载kitti数据集 下载kitti数据集和真值poses的00 txt以及sequences文件00序列的times txt xff0c xff08 全网找了好久 xff0c 最后不得已翻墙从官网down下来的 xff09 代码修改 xf
  • Vins-fusion GPS融合部分测试(自己的数据ZED+RTK)

    经过前一段时间的积累 xff0c 目前暂时成功实现了用自己的数据测试实现Vins fusion 43 GPS融合 xff0c 其实放在数据采集处理上的时间比较多 xff0c 踩了很多坑 xff0c 效果在一些部分还不是很好 xff0c 后期
  • Ceres Solver实例分析

    ceres简介 Ceres solver 是谷歌开发的一款用于非线性优化的库 xff0c 在谷歌的开源激光雷达slam项目cartographer中被大量使用 本篇博客结合相关实例介绍一下 Ceres库 的基本使用方法 xff1a 使用Ce
  • MSCKF算法简介

    感谢 xff1a 紫薯萝卜 https zhuanlan zhihu com p 76341809 论文 xff1a https arxiv org abs 1712 00036 代码 xff1a https github com Kuma
  • API函数详解:CreateSemaphore函数

    Windows API函数 Visual Basic 语法格式声明Declare Function CreateSemaphore Lib 34 kernel32 34 Alias 34 CreateSemaphoreA 34 lpSema
  • java 专业英语词汇

    abstract 关键字 抽象 39 bstr kt access vt 访问 存取 39 kses n 入口 使用权 algorithm n 算法 39 lg riem annotation java 代码注释 n u 39 tei n
  • 自动控制原理(1)-典型环节的传递函数

    构成线性定常控制系统的七个环节 xff1a 比例环节 xff0c 微分环节 xff0c 一阶微分环节 xff0c 二阶微分环节 xff0c 积分环节 xff0c 惯性环节 xff0c 振荡环节 1 比例环节 K为比例系数比例环节又称无惯性环
  • ESP8266从入门到入门系列(一) 你好,ESP8266

    0 前言 转载自我的古月居频道 距离我签约古月居已经过去了一个月了 xff0c 博主因为在这一个月的时间里琐碎的事情非常的多 xff0c 所以也推迟了我发博客的时间 古月居这个平台是以ROS起家的 xff0c 但是我们不能局限于软件 xff
  • BearPi-HM_Nano 鸿蒙os学习笔记(一)-在Windows下搭建开发环境

    BearPi HM Nano 鸿蒙os学习笔记 一 在Windows下搭建开发环境 0 前言 最近HarmonyOS2 0发布了 xff0c 就想着跟上时代的脚步 xff0c 后来在度娘上搜索相关信息 xff0c 发现了一款比较便宜的鸿蒙开
  • 普通数组如何转换成json数据格式

    我们都知道json有很多种格式 xff0c 而开发过程中经常遇到格式转换的问题 xff0c 特别是接口调用的时候 xff0c 如何将普通数组转成我们需要的json格式呢 xff0c 下面我提供了一种方法 xff0c 也是一种思路 xff0c
  • github常用命令(收藏版)

    目录 创建仓库 x1f30f 初始化仓库 x1f30f 查看仓库状态 x1f30f 设置用户信息 x1f30f 创建钥匙 x1f30f 验证钥匙 x1f30f 与远程仓库建立连接 x1f30f 重新设置仓库url地址 x1f30f 初次拉取
  • Android中Parcelable接口用法

    1 Parcelable接口 Interface for classes whose instances can be written to and restored from a Parcel Classes implementing t
  • STM32开发笔记(四)——FreeRTOS

    STM32开发笔记 xff08 四 xff09 FreeRTOS 小狼 64 http blog csdn net xiaolangyangyang 一 FreeRTOS调度原理 FreeRTOS调度分为时间片调度和抢占调度两种 时间片调度
  • 硬件学习之为什么三相电机不需要电容?

    1 单项电机 一个单相电机里一共有两个线圈 xff0c 主线圈和副线圈 当单相正弦电流通过主线圈时 xff0c 主线圈就会产生一个交变脉动磁场 xff0c 这个磁场的强弱随时间作正弦电流变化而变化 xff0c 但在它的方向一直是1 3这个方
  • Orb-slam2+win7+VS2015+USB双目摄像头

    Orb slam2 43 win7 43 VS2015 43 USB双目摄像头 本文将介绍如何在win7上使用USB双目摄像头实现Orb slam2 主要硬件 我们以USB双目摄像头 43 VS2015 43 win7来实现功能 xff1a
  • win7+opencv-2.4.13安装教程

    win7 43 opencv 2 4 13安装教程 本文将介绍如何在win7上安装opencv 2 4 13 一 安装过程 1 下载OpenCV 安装包 xff0c 以opencv 2 4 13 为例 2 双击 opencv 2 4 13
  • WIN7+Visual Studio 2013安装配置教程

    WIN7 43 Visual Studio 2013安装配置 本文将介绍如何在win7上安装Visual Studio 2013 一 xff1a 安装过程 1 下载Visual Studio 2013 安装包 下载之后的文件是 iso 格式
  • Ubuntu18.04 + Orb-Slam3 + USB双目摄像头

    Ubuntu18 04 43 Orb slam3 43 USB双目摄像头 本文将介绍如何在Ubuntu18 04上使用USB双目摄像头实现Orb slam3 主要硬件 我们以USB双目摄像头在Ubuntu18 04上来实现功能 xff1a

随机推荐

  • 树莓派结合Pixhawk飞控实现四轴双目视觉避障

    无人机双目视觉避障的实现 本文将介绍如何使用树莓派结合PIX飞控实现无人机双目视觉避障的功能 主要硬件 我们以双目摄像头 43 树莓派 43 Pixhawk飞控来实现功能 xff1a 双目摄像头与树莓派通过USB接口来连接 xff0c 树莓
  • TypeScript 终极初学者指南

    大家好 xff0c 我是 ConardLi xff0c 在过去的几年里 TypeScript 变得越来越流行 xff0c 现在许多工作都要求开发人员了解 TypeScript xff0c 各大厂的大型项目基本都要求使用 TypeScript
  • STM32——STM32库结构详解

    STM32库是由ST公司针对STM32提供的函数接口 xff0c 即API xff08 application program interface xff09 xff0c 开发者可以调用这些函数接口来配置STM32的寄存器 xff0c 脱离
  • 监控树莓派Raspberry Pi的CPU/GPU的温度

    监控树莓派Raspberry Pi的CPU GPU的温度 树莓派Raspberry Pi的CPU GPU的温度对于Pi的温度 高效运行非常重要 xff0c 所以我们要实时监控树莓派Raspberry Pi的CPU GPU的温度 1 运行环境
  • 【嵌入式系统】二、初识 Tiva TM4C123G系列开发板

    大二电赛小白 思考 主要偏向于嵌入式的应用 xff0c 请大家多多指教 xff01 TM4C123x系列是TI公司推出的一款32位基于ARM Cortex M4的处理器 1 TM4C123GH6PM的M4内核 超低功耗 耗电量370 A M
  • fdisk用法

    NAME fdisk Partition table manipulator for Linux SYNOPSIS fdisk u b sectorsize C cyls H heads S sects device fdisk l u d
  • 用策略模式优化代码的实例

    实例一 xff1a 利用利用策略模式实际开发中 if else 条件判断过多的问题 xff0c 条件少还好 xff0c 一旦 else if 过多这里的逻辑将会比较混乱 xff0c 并很容易出错 比如 xff1a 刚开始条件较少 xff0c
  • 灰度处理与二值化的关系

    当开始接触图像处理的童鞋可能跟我一样对这两个概念迷惑过 xff0c 在图像处理中 xff0c 用RGB三个分量 xff08 R xff1a Red xff0c G xff1a Green xff0c B xff1a Blue xff09 x
  • ucos2历程——信号量集

    信号量集 信号量集由两部分组成 xff1a 标识组和等待任务列表 xff1b 标识组由三部分组成 xff1a 1 OSFlagType 识别是否为信号量集的标志 2 OSFlagWaitList 指向等待任务列表的指针 3 OSFlagFl
  • 人体姿态估计资源大列表(Human Pose Estimation)

    基础 xff1a Human Pose Estimation人体姿态估计综述调研人体姿态估计数据集整理 xff08 Pose Estimation Keypoint xff09 姿态估计的两个数据集COCO和MPII的认识 Human Po
  • DIY小四轴之电路设计(一)

    DIY小四轴之电路设计 xff08 一 xff09 写在前面 前一阵时间一直在做四轴飞行器 xff0c 略有一点收获吧 xff0c 在这里分享出来 xff0c 一方面算是对自己的总结 xff0c 另一方面希望能给想做小四轴的读者一些思路 本
  • DIY小四轴之电路设计(二)

    DIY小四轴之电路设计 xff08 二 xff09 上次我分析了四轴电源的电路 xff0c 这次我们来看电机驱动与传感器电路 三 空心杯电机驱动电路 一般的小型四轴都选用空心杯电机来驱动旋翼 xff0c 空心杯电机不仅节能而且灵敏 xff0
  • ubuntu 18.04 vnc server开机自启动

    转自 xff1a https blog csdn net lixiaotao 1 article details 90140979 1 首先确定vncserver 以正确安装到linux系统 xff1b 2 设置vncserver随系统自启
  • vnc viewer灰屏的解决方法

    vnc能够连接上 xff0c 但是进入界面灰屏 先关闭当前打开的vnc xff1a vncserver kill 88 然后修改权限 xff1a chmod 43 x vnc xstartup 然后重新打开vnc vncserver geo
  • samba 常用命令

    没怎么修改配置 xff0c 但有时需要修改时 xff0c 又是搜索一番 xff0c 故将常用的在此备份一下 修改samba配置 xff1a span class token function sudo span span class tok
  • .rst 语法+简明教程

    reStructuredText 是扩展名为 rst的纯文本文件 xff0c 含义为 34 重新构建的文本 34 xff0c 也被简称为 xff1a RST或reST xff1b 是Python编程语言的Docutils项目的一部分 xff
  • TG_7100b准备开发环境

    请在 64 位 Ubuntu 下搭建开发环境 Win10 系统可以在应用商店下载安装 Ubuntu18 04 LTS 其他用户可以安装虚拟机软件 以下为基于 Ubuntu 环境开发和编译 SDK 时需要用到的库和依赖包 xff0c 请您按顺
  • C++ STL中各容器内存、优劣的分析

    STL有三大核心部分 xff1a 容器 xff08 Container xff09 算法 xff08 Algorithms xff09 迭代器 xff08 Iterator xff09 以下介绍容器相关内容 xff1a 各种容器的元素在内存
  • 给自己时间沉淀下来

    像很多学长学姐当初一样 xff0c 我也到了繁忙的大四 这个尴尬的时间 xff0c 要选择 xff0c 要放弃 开始实习 xff0c 去窥探一下外面的世界 经过一个月的测试工作 xff0c 开始发现自己与别人的差距还是很大 再继续试水 xf
  • docker安装使用系列二之容器、镜像、仓库使用实例分析

    可能大家对docker了解不深 xff0c 这里再简单赘述一下docker这款利器 1 什么是docker Doker是基于GO语言实现的云开源项目 xff0c 通过对应用组件的封装 分发 部署 运行等生命周期的管理 xff0c 达到应用组