Docker介绍、常用命令与操作

news2024/9/26 5:16:38

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.coloradmin.cn/o/1334466.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 Docker 部署企业培训系统 PlayEdu

1&#xff09;PlayEdu 介绍 官网&#xff1a;https://www.playedu.xyz/ GitHub&#xff1a;https://github.com/PlayEdu/PlayEdu PlayEdu 是一款适用于搭建内部培训平台的开源系统&#xff0c;旨在为企业/机构打造自己品牌的内部培训平台。PlayEdu 基于 Java MySQL 开发&…

C语言--直接插入排序【排序算法|图文详解】

一.直接插入排序介绍&#x1f357; 直接插入排序又叫简单插入排序&#xff0c;是一种简单直观的排序算法&#xff0c;它通过构建有序序列&#xff0c;对于未排序的数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插入。 算法描述&#xff1a; 假设要排序…

Golang实现JAVA虚拟机-运行时数据区

一、运行时数据区概述 JVM学习&#xff1a; JVM-运行时数据区 运行时数据区可以分为两类&#xff1a;一类是多线程共享的&#xff0c;另一类则是线程私有的。 多线程共享的运行时数据区需要在Java虚拟机启动时创建好&#xff0c;在Java虚拟机退出时销毁。对象实例存储在堆区类信…

2023.12.22 关于 Redis 数据类型 String 常用命令

目录 引言 String 类型基本概念 SET & GET SET 命令 GET 命令 MSET & MGET MSET 命令 MGET 命令 SETNX & SETEX & PSETEX SETNX 命令 SETEX 命令 PSETEX 命令 计数命令 INCR 命令 INCRBY 命令 DECR 命令 DECRBY 命令 INCRBYFLOAT 命令 总结…

【GoLang】Go语言几种标准库介绍(一)

你见过哪些令你膛目结舌的代码技巧&#xff1f; 文章目录 你见过哪些令你膛目结舌的代码技巧&#xff1f;前言几种库bufio&#xff08;带缓冲的 I/O 操作&#xff09;特性示例 bytes (实现字节操作)特性示例 总结专栏集锦写在最后 前言 随着计算机科学的迅猛发展&#xff0c;编…

复试情报准备

英语自我介绍&#xff0c;介绍完老师会根据你的回答用英语问你问题&#xff0c;比如介绍一下你的本科学校&#xff0c;或者家乡什么的。计网过一遍&#xff0c;会问两道题。接下来是重点&#xff0c;我当时是根据我成绩单&#xff0c;问了我本科学过的科目&#xff0c;比如pyth…

【Docker容器精解篇 】深入探索Docker技术的概念与容器思想

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《docker容器精解篇》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 前言一、Docker 的介绍1.1 Docker 的由来1.1.1 环境不一致1.1.2 隔离性1.1.3 弹性伸缩1.1.4 学习成本 1.2 Doc…

推荐五个免费的网络安全工具

导读&#xff1a; 在一个完美的世界里&#xff0c;信息安全从业人员有无限的安全预算去做排除故障和修复安全漏洞的工作。但是&#xff0c;正如你将要学到的那样&#xff0c;你不需要无限的预算取得到高质量的产品。这里有SearchSecurity.com网站专家Michael Cobb推荐的五个免费…

网站检测有哪些好用的监测工具

目前网站监测工具良莠不齐&#xff0c;网站监控工具有很多&#xff0c;选择合适功能强大的网站监控工具&#xff0c;对我们的业务安全有非常大的帮助。目前市场上好用的一些网站监测工具如德迅云眼、观测云等&#xff0c;它们都提供了网站性能监测、安全防护、故障预警等功能&a…

天呐,我找到财务报表开发的通关密码了!

要问我们IT最不愿做的报表开发有哪些&#xff0c;首当其冲的一定是财务分析。我对开发财务报表这事就一个态度&#xff1a;只要不谈开发财务报表&#xff0c;我们就还是好朋友&#xff0c;谈了会怎样&#xff1f;不好意思&#xff0c;我会破大防。 1、财务的分析逻辑和需求&am…

Azure Machine Learning - 如何使用 GPT-4 Turbo with Vision

介绍如何在Azure中使用GPT-4 Turbo with Vision 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕&#xff0c;复旦机器人智能实验室成员&#xff0c;阿里云认证的资深架构师&#xff0c;项目管理…

加速计算,为何会成为 AI 时代的计算力“新宠”

随着科技的发展&#xff0c;处理大量数据和进行复杂计算的需求越来越高&#xff0c;人工智能、大数据和物联网等领域更是如此&#xff0c;传统的计算方式已经无法满足这些需求。因此&#xff0c;加速计算作为一种现代计算方式&#xff0c;成了必要的手段。加速计算具有前所未有…

项目应用多级缓存示例

前不久做的一个项目&#xff0c;需要在前端实时展示硬件设备的数据。设备很多&#xff0c;并且每个设备的数据也很多&#xff0c;总之就是数据很多。同时&#xff0c;设备的刷新频率很快&#xff0c;需要每2秒读取一遍数据。 问题来了&#xff0c;我们如何读取数据&#xff0c…

AutoBookmark Adobe Acrobat快速自动批量添加书签/目录

前言 解决问题&#xff1a;Adobe Acrobat快速自动批量添加书签/目录, 彻底告别手动添加书签的烦恼 AutoBookmark 前言1 功能简介2 实现步骤2.1 下载插件2.2 将插件复制到Acrobat文件夹下2.3 自动生成书签 1 功能简介 我们在查看PDF版本的论文或者其他文件的时候, 虽然相比较于…

傻瓜式教学Docker 使用docker compose部署 php nginx mysql

首先你可以准备这个三个服务,也可以在docker compose 文件中 直接拉去指定镜像,这里演示的是镜像服务已经在本地安装好了,提供如下: PHP # 设置基础镜像 FROM php:8.2-fpm# install dependencies RUN apt-get update && apt-get install -y \vim \libzip-dev \libpng…

goland错误:该版本的1%与您运行的windows版本不兼容

创建第一个go语言的hello world后&#xff0c;报错。 需要将 package gotest1 改为 package main main是主程序的入口

【leetcode100-020】【矩阵】旋转图像

【题干】 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 【思路】 怎么还整上小学奥数题了&#xff08;不是对角翻转水平/垂…

第11章 GUI Page436 使用缓冲DC, wxBufferedPaintDC

所谓“缓冲DC”&#xff0c;是指将所有图元都先划到一个人眼看不到的“设备上下文”之上&#xff0c;最后再一次性复制到真正的屏幕DC之上&#xff0c;这样我们就看不到中间画的过程了&#xff0c;也就不会感到闪烁了。 注意&#xff0c;这时不能解除ScrolledWindow1的背景擦除…

代码签名的功能实现原理

代码签名是一种用来确保软件或程序来源和完整性的技术&#xff0c;它通过对程序文件进行数字签名和验证来保证软件未被篡改过。下面我将为您介绍代码签名的功能实现原理。 1. 数字证书颁发机构&#xff08;CA&#xff09;&#xff1a; 代码签名的实现依赖于权威的数字证书颁发…

JS 现代化的深克隆

前端手写深拷贝/深克隆是一道回头率超高的笔试题&#xff0c;但笔试版一般不适用于生产环境&#xff0c;JSON 的奇技淫巧和 Lodash 的工具函数也各有缺点。 您知道吗&#xff0c;JS 现在有一种原生方法可以深层复制对象&#xff1f; structuredClone 函数内置在 JS 运行时中&a…