Docker介绍、常用命令与操作

Docker介绍、常用命令与操作

  • 学习前言
  • 为什么要学习Docker
  • Docker里的必要基础概念
  • 常用命令与操作
    • 1、基础操作
      • a、查看docker相关信息
      • b、启动或者关闭docker
    • 2、容器操作
      • a、启动一个镜像
        • i、后台运行
        • ii、前台运行
      • b、容器运行情况查看
      • c、日志查看
      • d、容器删除
    • 3、镜像操作
      • a、镜像拉取
      • b、查看已有镜像
      • c、镜像删除
      • d、将正在运行的容器保存为镜像
      • e、编译自己的镜像
        • i、Dockerfile.ds编写原则
        • ii、Dockerfile.ds组成
        • iii、Dockerfile.ds示例与编译镜像示例

学习前言

工作了一段时间,感觉Docker真的是一个很方便的工具,无论复现代码还是部署服务器,不用特别担心环境的错误。
在这里插入图片描述

为什么要学习Docker

从这么长时间使用Docker的情况来看,我认为学习Docker的主要原因便是它的方便。生产过程中有各种环境,如果每到一个服务器都进行环境的部署的话,不仅调试麻烦,实际上线的时候也会因为各种环境问题导致服务崩溃。

当前市面上复刻环境的方法一般有两种:
1、虚拟机技术,可以在操作系统中模拟硬件设备,然后运行另一个操作系统,比如在 Windows 系统里面运行Linux系统,这样就可以运行任意的Linux应用。因此,我们保留了某个环境的镜像,就可以复刻环境了;
2、容器技术,与虚拟机通过操作系统实现隔离不同,容器技术只隔离应用程序的运行时环境,但容器之间可以共享同一个操作系统。因此,假设我们都在Linux环境上,使用容器技术,无需模拟硬件设备,直接就使用另一个Linux环境的镜像即可;

相比于虚拟机技术,容器技术无需模拟硬件设备,底层操作系统是共享的,因此容器技术更加轻量级。

Docker基于容器技术,只需保留镜像,就可以在另外一个Linux操作系统中运行。

而Docker的使用方式也很简单,一般在Linux环境下使用,拉取一个镜像,然后运行起来即可,而后的操作就和在正常的系统中操作一样。

Docker里的必要基础概念

Docker里的必要基础概念是镜像和容器:
镜像(Image):利用Docker将运行的程序及其依赖库、函数库、配置等文件打包在一起,简单理解就是打包后的程序环境,开箱即用。称为镜像。
容器(Container):镜像运行后形成的进程就是容器,一个系统可以运行多个容器,Docker会给容器进程做隔离,不同进程之间不可见。

常用命令与操作

1、基础操作

a、查看docker相关信息

查看docker版本信息。

docker version

显示docker系统的信息

docker info

b、启动或者关闭docker

启动docker

sudo service docker start

关闭docker

sudo service docker stop

2、容器操作

a、启动一个镜像

开始运行docker镜像一般使用docker run。
该命令有很多的参数,这里我们介绍一下最常用的部分参数

-i,以交互模式运行容器,通常与 -t 同时使用
-t,启动容器后,为容器分配一个命令行,通常与-i同时使用
-v,目录映射,容器目录挂载到宿主机目录,格式: <host目录>:<容器目录>
-d,守护进程,后台运行该容器
-p,指定端口映射,格式:主机(宿主)端口:容器端口
--name "nginx-lb",容器名字
-e --env username="ritchie",设置环境变量

在这里我给几个例子,看情况进行复制使用即可:

i、后台运行

以后台模式运行一个容器,容器名字为test1,主机的8099端口对应容器环境的80端口,主机的444端口对应容器环境的443端口,默认包含两个环境变量TEST_ENV和TEST_ENV2,分别是1234和12345。

docker run -d --name=test1 8099:80 -p 444:443 -e TEST_ENV=1234 -e TEST_ENV2=12345

这样运行后,会返回一个容器id,此时我们可以通过下述指令进入容器。

docker exec -it 容器id /bin/bash
ii、前台运行

以交互模式运行容器,容器名字为test2,主机的8099端口对应容器环境的80端口,主机的444端口对应容器环境的443端口,默认包含两个环境变量TEST_ENV和TEST_ENV2,分别是1234和12345。本地的/test目录,会挂载到容器的/soft目录中。

docker run -i -t --name=test2 8099:80 -p 444:443 -e TEST_ENV=1234 -e TEST_ENV2=12345 -v /test:/soft

需要注意的是,在离开该容器后,该容器会自动停止。注意,这里的容器只是停止不是销毁。

如果想要容器在运行退出后自动销毁,不再次启动,则可以加上-rm指令,如下所示:

docker run -i -t -rm --name=test2 8099:80 -p 444:443 -e TEST_ENV=1234 -e TEST_ENV2=12345 -v /test:/soft

b、容器运行情况查看

查看当前运行的容器

docker ps

查看全部容器

docker ps -a

查看全部容器及其占用的空间

docker ps -as

c、日志查看

查看日志信息,-f代表Follow log output。

docker logs -f 容器ID

d、容器删除

容器删除一般要先停止容器。
docker stop命令会向运行中的容器发送一个SIGTERM的信号,然后停止所有的进程。

docker stop 容器ID

有些时候SIGTERM不太稳定,会被一些程序给捕捉掉,那么就需要使用docker kill。
docker kill 命令向所有运行在容器中的进程发送了一个不友好的SIGKILL信号。(类似于kill -9)

docker kill 容器ID

容器停止后可以使用下述指令删除容器,这个命令只能对非运行态容器执行。

docker rm 容器ID

3、镜像操作

a、镜像拉取

没什么特别的,直接docker pull即可,下述指令会自动拉取docker中,ubuntu的最新镜像。

其中ubuntu可理解为镜像地址名称,latest可理解为版本号。

docker image pull ubuntu:latest

b、查看已有镜像

使用ls指令即可查看,和正常linux操作类似。

docker image ls

c、镜像删除

使用docker rmi即可删除本地镜像。

docker rmi

d、将正在运行的容器保存为镜像

有些同学可能在容器中做了一些修改,相对其进行保存,那么可以使用docker commit。

docker commit 容器id 镜像名称

e、编译自己的镜像

编译自己的镜像需要基于Dockerfile:

i、Dockerfile.ds编写原则
  • Dockerfile中使用的所有文件必须与Dockerfile文件在同一个父目录下;
  • Dockerfile中默认的相对路径是Dockerfile所在的目录;
  • Dockerfile中,如果一条指令可以写入一行,那么它必须写入一行,因为每条指令被视为一个层,层数越多执行效率就会变慢;
  • Dockerfile中,指令不区分大小写,但它们都大写(按照惯例);
  • Dockerfile非注释行的第一行必须是FROM;
ii、Dockerfile.ds组成

Dockerfile.ds一般是一个环境的编译文件,由多个部分组成。常用的指令有:

  • FROM 基础镜像
  • COPY 拷贝文件
  • ADD 拷贝文件
  • WORKDIR 设置工作目录
  • ENV 设置环境变量
  • RUN 运行指令

最开始一般是FROM一个基础镜像,比如ubuntu:lastest这这样

FROM <image>:<tag>

然后是拷贝本地的文件或者目录到镜像中。这个一般是使用COPY或者ADD命令。

# 拷贝一个文件
COPY testFile /opt/# 拷贝一个目录
COPY testDir /opt/testDir# 拷贝一个文件
ADD testFile /opt/

然后是设置WORKDIR,这个WORKDIR指的是运行该镜像的基础目录,也就是一进来镜像所在的目录。
比如运行下列指令,那么此时在Dockers中,"./"指的就是/opt,进入docker时也会位于/opt。

WORKDIR /opt

然后是设置镜像中的环境变量,使用ENV指令

ENV <key> <value>

有些时候我们需要在镜像构建时安装软件或者删除镜像中的文件,此时可以使用RUN指令

RUN command1 && command2
iii、Dockerfile.ds示例与编译镜像示例

将下述内容保存为一个Dockerfile.ds。在编译目录下,创建test.py和test2.py两个文件。

# 基于的基础镜像
FROM centos# 维护者信息
MAINTAINER bubbliiiing# ADD和COPY test.py和test2.py文件放在当前目录下
ADD test.py /usr/local/  
COPY test2.py /usr/local/  # 可以理解为cd,此时/usr/local/为工作目录
WORKDIR /usr/local/# 设置环境变量
ENV AAA BBB# 执行以下命令,安装wget,下载redis,并解包。
RUN yum install wget \&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \&& tar -xvf redis.tar.gz

使用下述指令即可开始编译,-t指的是编译后镜像的名称,-f用于指定Dockerfile。

docker build -t build_test:0.0.1 -f Dockerfile.ds .

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/224530.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“一篇长文教你进行全方位的使用appium“

随着移动应用的日益普及&#xff0c;移动应用的测试成为了软件开发的重要组成部分。Python&#xff0c;作为一种易于学习&#xff0c;功能强大的编程语言&#xff0c;特别适合进行这种测试。本文将详细介绍如何使用Python进行APP测试&#xff0c;并附带一个实例。 Python 和 A…

超分辨数据集:Set5 Set14 BSD100 Urban100 Manga109

DIV2K数据集官网上很好找到&#xff0c;但是网上流传的Set5 14 BSD100,Urban100 Manga109都是私人进行处理过的版本&#xff0c;各个处理方式都不同&#xff0c;为了统一方式写了这篇文章。 官方的DIV2K x2、x3、x4的LR图片使用下面matlab代码生成&#xff08;已经经过测试最后…

Linux构建NFS远程共享存储和ftp配置

NFS架构 NFS介绍 文件系统级别共享&#xff08;是NAS存储&#xff09; --------- 已经做好了格式化&#xff0c;可以直接用。 速度慢比如&#xff1a;nfs&#xff0c;samba NFS&#xff1a;Network File System 网络文件系统&#xff0c;NFS 和其他文件系统一样,是在 Linux …

智能优化算法应用:基于卷积优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于卷积优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于卷积优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.卷积优化算法4.实验参数设定5.算法结果6.…

2022第十二届PostgreSQL中国技术大会-核心PPT资料下载

一、峰会简介 本次大会以“突破•进化•共赢 —— 安全可靠&#xff0c;共建与机遇”为主题&#xff0c;助力中国数据库基础软件可掌控、可研究、可发展、可生产&#xff0c;并推动数据库生态的繁荣与发展。大会为数据库从业者、数据库相关企业、数据库行业及整个IT产业带来崭…

OpenAI科学家Hyung Won Chung演讲精华版

文章目录 第一个观点&#xff1a;涌现第二个观点&#xff1a;如何扩大规模1、标记化2、嵌入3、计算4、评估&#xff08;损失函数&#xff09;5、反向传播 最近从Google跳槽到OpenAI的AI科学家 Hyung Won Chung 比较拗口&#xff0c;我就简称尚哥了 他最近做了一个技术演讲 …

STM32MP157D-DK1开发板Qt镜像构建

上篇介绍了STM32MP57-DK1开发板官方系统的烧录。那个系统包含Linux系统的基础功能&#xff0c;如果要进行Qt开发&#xff0c;还需要重新构建带有Qt功能的镜像 本篇就来介绍如何构建带有Qt功能的系统镜像&#xff0c;并在开发板中烧录构建的镜像。 1 Distribution包的构建 ST…

mySQL事务与存储引擎

目录 mySQL事务 1.事务的概念 2.事务的ACID特点 3.多客户端同时访问一个表时&#xff0c;出现的一致性问题 4.事务的隔离级别 5.事务的隔离级别作用范围 查询全局事务隔离级别 设置全局事务隔离级别 ​编辑查询会话事务隔离级别 设置会话事务隔离级别 6.事务控制语句…

python 解决手机拍的书籍图片发灰的问题

老师给发的作业经常是手机拍的&#xff0c;而不是扫描&#xff0c;背景发灰&#xff0c;如果二次打印就没有看了&#xff0c;象这样&#xff1a; 如果使用photoshop 处理&#xff0c;有些地方还是扣不干净&#xff0c;不如python 做的好&#xff0c;处理后如下&#xff1a; 具体…

java数据结构与算法刷题-----LeetCode167:两数之和 II - 输入有序数组

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 思路 题目要求我们找到两个数相加的和&#xff0c;等于target指定的值。而…

每日一题——LeetCode914

方法一 个人解法&#xff1a; 因为分组后每组里的数字要是相同的&#xff0c;所以先把有几种数字&#xff0c;每种数字有几张都统计出来用group数组保存&#xff0c;并同时记录最少的张数min。按照要求每组至少要有2张牌&#xff0c;所以可以直接排除最少张数为1的。如果整副…

Python深度学习029:pytorch中常用的模块或方法

PyTorch是一个广泛使用的深度学习库,提供了许多用于构建和训练神经网络的模块和方法。下面是一些PyTorch中常用的模块和方法的简要介绍: PyTorch常用模块和方法 torch 用途:PyTorch的基础模块,提供了多种数学运算功能。常用方法: torch.tensor():创建张量torch.randn():…

Grafana高可用-LDAP

一. grafana高可用 1. 迁移之前的 grafana sqlitedump.sh #!/bin/bash DB$1 TABLES$(sqlite3 $DB .tables | sed -r s/(\S)\s(\S)/\1\n\2/g | grep -v migration_log) for t in $TABLES; doecho "TRUNCATE TABLE $t;" done for t in $TABLES; doecho -e ".mode…

Spring Boot学习随笔- 第一个Thymeleaf应用(基础语法th:,request、session作用域取值)

学习视频&#xff1a;【编程不良人】2021年SpringBoot最新最全教程 第十五章、Thymeleaf Thymeleaf是一种现代化的服务器端Java模板引擎&#xff0c;专门用于Web和独立环境。Thymeleaf在有网络和无网络的环境下皆可运行&#xff0c;即可以让美工在浏览器查看页面的静态效果&am…

less 查看文本时,提示may be a binary file.See it anyway?

解决办法 首先使用echo $LESSCHARSET查看less的编码 看情况设置less的编码格式(我的服务器上使用utf-8查看中文) 还要特别注意一下&#xff0c;Linux中存在的文本文件的编码一定要是utf - 8;&#xff08;这一步很关键&#xff09; 例如&#xff1a;要保证windows上传到Linux的…

【机器学习】模式识别

1 概述 模式识别&#xff0c;简单来讲&#xff0c;就是分类问题。 模式识别应用&#xff1a;医学影像分析、人脸识别、车牌识别、遥感图像 2 模式分类器 分类器的分类&#xff1a;线性分类器、非线性分类器、最近邻分类器 2.1 分类器的训练&#xff08;学习&#xff09;过…

【DevOps 工具链】软件版本号命名规范 - 3种规则(读这一篇就够了)

文章目录 1、简述2、常见软件的版本号命名规则3、版本号命名规范整理3.1、XYZ/MMP3.1.1、规则3.1.2、确定3.1.3、举例3.1.4、详细规则 3.2、XYZD/MMPD3.3、VRC3.3.1、规则3.3.2、对"Vxxx"的说明3.3.3、对"Rxxx"的说明3.3.4、对"LLL"的说明3.3.5、…

MyBatis:Generator

MyBatis Generator附批量操作分页查询存储过程 Generator 介绍网址&#xff1a;Introduction to MyBatis Generator Generator &#xff0c;一个用于 MyBatis 的代码生成工具&#xff0c;可以根据数据库表结构自动生成对应的实体类、DAO 接口和 SQL 映射文件&#xff0c;提高…

使用Visual Studio调试VisionPro脚本

使用Visual Studio调试VisionPro脚本 方法一 &#xff1a; 修改项目文件 csproj步骤&#xff1a; 方法二 &#xff1a; Visual Studio附加功能步骤&#xff1a; 方法一 &#xff1a; 修改项目文件 csproj 步骤&#xff1a; 开启VisionPro脚本调试功能 创建一个VisionPro程序…

【MySQL学习笔记009】事务

一、事务简介 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 二、事务操作 1、操作1 查看/设置事务提交方式 select a…