docker(二)基础命令

2023-11-13

一、docker命令-镜像

1、查看docker版本

docker -v 
docker version 
decker info  #可以查看所有运行容器的镜像数量,运行容器的版本,可以分配的CPU,总的内存等信息.docker的工作目录 /var/lib/decker

[root@ct ~]# docker version
Client: Docker Engine - Community
 Version:           20.10.8     #版本
 API version:       1.41        #api版本
 Go version:        go1.16.6    #go语言版本
 Git commit:        3967b7d
 Built:             Fri Jul 30 19:55:49 2021
 OS/Arch:           linux/amd64
 Context:           default     #映射默认    
 Experimental:      true        #实验功能开启

Server: Docker Engine - Community
 Engine:
  Version:          20.10.8
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.6
  Git commit:       75249d8   #暂存区里的改动给提交到本地的版本库的id
  Built:            Fri Jul 30 19:54:13 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.9
  GitCommit:        e25210fe30a0a703442421b0f60afac609f950a3
 runc:
  Version:          1.0.1
  GitCommit:        v1.0.1-0-g4144b63
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
[root@ct ~]#

2、搜索镜像

docker search nginx 
——》自己制作镜像,然后上传到docker hub 上
优化:有效减少镜像大小,dockerfile 优化方向

也可以直接上官网:

https://hub.docker.com/ 》搜nginx》第一个官方分布》tag》找到目的版本的编号
然后抓取下载docker pull nginx:1.21.0
在这里插入图片描述

3 、下载镜像

默认是从docker hub

docker pull 镜像名称
例如:docker pull nginx  #不交标签则默认latest,最新版本

4、查看镜像列表

docker images   #查看当前docker下的下载镜像信息
[root@ct ~]# docker images
REPOSITORY    TAG              IMAGE ID       CREATED       SIZE
#镜像仓库       #标签             #镜像id       #建立时间      #大小
redis         6.2-alpine3.14   f6f2296798e9   3 days ago     32.3MB
redis         v1               f6f2296798e9   3 days ago     32.3MB
busybox       latest           42b97d3c2ae9   10 days ago    1.24MB
nginx         1.21             dd34e67e3371   13 days ago    133MB    #
nginx         v1               dd34e67e3371   13 days ago    133MB 
#根据image id,发现与上面的其实是同个镜像,只是标签不同  
hello-world   latest           d1165f221234   5 months ago   13.3kB
centos        7                8652b9f0cb4c   9 months ago   204MB
[root@ct ~]# docker images  redis:v1        #单独看一个镜像,REPOSITORY+TAG为一个镜像(唯一性),而tag可以人为指定的
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
redis        v1        f6f2296798e9   3 days ago   32.3MB

5 获取镜像信息

docker inspect  镜像ID (或者镜像:标签)      

docker inspect redis:
[root@ct ~]# docker inspect nginx:1.21
[
    {
        "Id": "sha256:dd34e67e3371dc2d1328790c3157ee42dfcae74afffd86b297459ed87a98c0fb",
        "RepoTags": [
            "nginx:1.21",
            "nginx:v1"
        ],
        "RepoDigests": [
            "nginx@sha256:4d4d96ac750af48c6a551d757c1cbfc071692309b491b70b2b8976e102dd3fef"
        ],
        "Parent": "",
....................
[root@ct ~]# docker inspect dd34e67e3371
[
    {
        "Id": "sha256:dd34e67e3371dc2d1328790c3157ee42dfcae74afffd86b297459ed87a98c0fb",
        "RepoTags": [
            "nginx:1.21",  #镜像的其他名有两个
            "nginx:v1"      #另一个镜像名
        ],
        "RepoDigests": [
            "nginx@sha256:4d4d96ac750af48c6a551d757c1cbfc071692309b491b70b2b8976e102dd3fef"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2021-08-17T11:46:11.370722453Z",
        "Container": "c8f4640bdac21c018ff68bfb015ab66f87de0ed066b73eb6607a832a8abf3581",
        "ContainerConfig": {
            "Hostname": "c8f4640bdac2",


6 、添加镜像标签

docker tag 软件名:旧标签  软件名:新标签 
[root@ct ~]# docker tag nginx:1.21 nginx:lnmp
[root@ct ~]# docker images
REPOSITORY    TAG              IMAGE ID       CREATED        SIZE
redis         6.2-alpine3.14   f6f2296798e9   3 days ago     32.3MB
redis         v1               f6f2296798e9   3 days ago     32.3MB
busybox       latest           42b97d3c2ae9   10 days ago    1.24MB
nginx         1.21             dd34e67e3371   13 days ago    133MB
nginx         lnmp             dd34e67e3371   13 days ago    133MB
#旧的镜像不会消失,新改的镜像名虽然不同,但id不变
nginx         v1               dd34e67e3371   13 days ago    133MB
hello-world   latest           d1165f221234   5 months ago   13.3kB
centos        7                8652b9f0cb4c   9 months ago   204MB

7、 删除镜像

docker rmi    镜像:标签
docker rmi  `docker images -q`  #-q 列出镜像ID,批量删
docker rmi -f 镜像:标签  #强制删除

8、镜像导出和导入

docker save -o  文件名  镜像名   #导出生成文件
docker load < 文件名    #重新导入镜像   

docker save -o centos-7 centos:7  #导出生成文件centos-7
docker load <centos-7      #导出文件centos-7
[root@ct ~]# cd /opt/
[root@ct opt]# ls
containerd  mysql-5.7.20  mysql-boost-5.7.20.tar.gz
[root@ct opt]# docker save -o centos-7 centos:7   #生成镜像文件
[root@ct opt]# ls
centos-7  containerd  mysql-5.7.20  mysql-boost-5.7.20.tar.gz

[root@ct opt]# docker rmi -f centos:7   #删除原有镜像
Untagged: centos:7
Untagged: centos@sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Deleted: sha256:8652b9f0cb4c0599575e5a003f5906876e10c1ceb2ab9fe1786712dac14a50cf

[root@ct opt]# docker images
REPOSITORY    TAG              IMAGE ID       CREATED        SIZE
redis         6.2-alpine3.14   f6f2296798e9   3 days ago     32.3MB
busybox       latest           42b97d3c2ae9   10 days ago    1.24MB
nginx         1.21             dd34e67e3371   13 days ago    133MB
nginx         lnmp             dd34e67e3371   13 days ago    133MB
hello-world   latest           d1165f221234   5 months ago   13.3kB
#没有centos这个镜像了
[root@ct opt]# docker load<centos-7
Loaded image: centos:7
[root@ct opt]# docker images
REPOSITORY    TAG              IMAGE ID       CREATED        SIZE
redis         6.2-alpine3.14   f6f2296798e9   3 days ago     32.3MB
busybox       latest           42b97d3c2ae9   10 days ago    1.24MB
nginx         1.21             dd34e67e3371   13 days ago    133MB
nginx         lnmp             dd34e67e3371   13 days ago    133MB
hello-world   latest           d1165f221234   5 months ago   13.3kB
centos        7                8652b9f0cb4c   9 months ago   204MB
#重新生成


二、docker命令—容器操作

1、 查询容器

docker ps -a   #显示主机上的容器及其状态
docker ps -aq  #显示容器的ip
[root@ct ~]# docker ps -a
CONTAINER ID   IMAGE                  COMMAND                  CREATED        STATUS                      PORTS      NAMES
57f77cf81738   centos:7               "/bin/bash"              30 hours ago   Exited (137) 25 hours ago              mystifying_buck
1ce04b9f9cad   f6f2296798e9           "docker-entrypoint.s…"   2 days ago     Up 2 days                   6379/tcp   nervous_dirac
914b1af0ecb0   redis:6.2-alpine3.14   "docker-entrypoint.s…"   2 days ago     Up 2 days                   6379/tcp   raide1
886cd3d8c81e   nginx:1.21             "/docker-entrypoint.…"   2 days ago     Up 2 days                   80/tcp     socker1


CONTAINER ID:容器ID
IMAGE:镜像版本
CRATED:创建的时间
STATUS:运行的时间
PORTS:暴露的端口
NAMES:名称(可定义)

2、创建容器

docker create -itd nginx:latest /bin/bash
-i 让容器的标准输入保持打开
-t 分配一个伪终端
-d 后台守护进程的方式运行

3、 启动容器

docker start  容器id
docker run centos:7 /usr/bin/bash -c ls /
启动容器(一次性执行)

docker run -itd centos:7 /bin/bash/
#在后台持续进行

4、停止容器

docker stop  容器ID
#状态码0:正常退出,非0值表示非正常退出,137表示主动停止退出
[root@ct ~]# docker stop 57f77cf81738
57f77cf81738

在这里插入图片描述

5 、容器持续后台运行

[root@ct ~]# docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"
418050aa42b7e7c182eb484cb9b80519c708c0638d65c9add6ebfc016ce00633
[root@docker ~]# watch -n 2 docker ps -a    #每两秒执行
[root@docker ~]# docker rm `docker ps -aq`    #不会删除正在运行的

6 、进入容器

使用run
docker run -it nginx:latest /bin/bash         #一次性的,退出则关闭
exec(容器必须为开启状态)
docker exec -it  容器ID /bin/bash

PS:
docker run -it 会创建前台进程,但是会在输入exit后终止进程。
docker attach  会通过连接stdin,连接到容器内输入输出流,会在输入exit后终止进程.
docker exec -it 会连接到容器,可以像SSH一样进入容器内部,进行操作,可以通过exit退出容器,不影响容器运行。

[root@ct ~]# docker ps -a
CONTAINER ID   IMAGE                  COMMAND                  CREATED         STATUS         PORTS      NAMES
e86cc40e5351   centos:7               "/bin/bash"              3 seconds ago   Up 2 seconds              great_golick
1ce04b9f9cad   f6f2296798e9           "docker-entrypoint.s…"   2 days ago      Up 2 days      6379/tcp   nervous_dirac
914b1af0ecb0   redis:6.2-alpine3.14   "docker-entrypoint.s…"   2 days ago      Up 2 days      6379/tcp   raide1
886cd3d8c81e   nginx:1.21             "/docker-entrypoint.…"   2 days ago      Up 2 days      80/tcp     socker1
[root@ct ~]# docker exec -it e86cc40e5351   /bin/bash
[root@e86cc40e5351 /]# ls    #centos的容器中也有虚拟文件
anaconda-post.log  dev  home  lib64  mnt  proc  run   srv  tmp  var
bin                etc  lib   media  opt  root  sbin  sys  usr
[root@e86cc40e5351 /]# exit     #退出
exit


7、 容器导出与导入

docker export    容器ID   >   文件名       #导出
docker import  导出的文件名(容器)  指定镜像名称    #导入容器文件,重新生成镜像
[root@ct ~]# docker ps -a
CONTAINER ID   IMAGE                  COMMAND                  CREATED         STATUS         PORTS      NAMES
e86cc40e5351   centos:7               "/bin/bash"              5 minutes ago   Up 5 minutes              great_golick
1ce04b9f9cad   f6f2296798e9           "docker-entrypoint.s…"   2 days ago      Up 2 days      6379/tcp   nervous_dirac
914b1af0ecb0   redis:6.2-alpine3.14   "docker-entrypoint.s…"   2 days ago      Up 2 days      6379/tcp   raide1
886cd3d8c81e   nginx:1.21             "/docker-entrypoint.…"   2 days ago      Up 2 days      80/tcp     socker1
[root@ct ~]# cd /opt/

[root@ct opt]# docker export 886cd3d8c81e > nginx-1.21    #生成文件
[root@ct opt]# ls
 nginx-1.21

[root@ct opt]# docker stop  886cd3d8c81e   #停止容器并删除容器
886cd3d8c81e
[root@ct opt]# docker rm  886cd3d8c81e
886cd3d8c81e
[root@ct opt]# docker rmi nginx:1.21    #删除镜像
Untagged: nginx:1.21
Deleted: sha256:0b4bf752f838f3b775546fd465d4afa64dd04ccb9e6ebca10ada8a10aeefef42
Deleted: sha256:109b539aca08b0ca21c16a38493491ee223a75e2b9738ac7145150155eec36db

[root@ct opt]# docker import nginx-1.21 nginx:1.21  #重新注入
sha256:0b4bf752f838f3b775546fd465d4afa64dd04ccb9e6ebca10ada8a10aeefef42
[root@ct opt]# docker ps -a
CONTAINER ID   IMAGE                  COMMAND                  CREATED         STATUS         PORTS      NAMES
e86cc40e5351   centos:7               "/bin/bash"              8 minutes ago   Up 8 minutes              great_golick
1ce04b9f9cad   f6f2296798e9           "docker-entrypoint.s…"   2 days ago      Up 2 days      6379/tcp   nervous_dirac
914b1af0ecb0   redis:6.2-alpine3.14   "docker-entrypoint.s…"   2 days ago      Up 2 days      6379/tcp   raide1
[root@ct opt]# docker images    #镜像重新出现
REPOSITORY    TAG              IMAGE ID       CREATED         SIZE
nginx         1.21             8345d48257de   4 seconds ago   132MB
redis         6.2-alpine3.14   f6f2296798e9   4 days ago      32.3MB
busybox       latest           42b97d3c2ae9   11 days ago     1.24MB
nginx         lnmp             dd34e67e3371   2 weeks ago     133MB

8、删除容器

docker rm 容器ID
docker rm -f 容器ID    #强制删除

docker ps -a | awk '{print "docker rm "$1}' | bash
#批量删除容器

docker rm `docker ps -aq`
 #批量删除不在运行的容器,-f则强势删除所有

for i in 'docker ps -a | grep -i exit | awk '{print $1}'`; do docker rm -f $i; done
#批量删除"exit"状态的容器

二、docker的网络模式

在这里插入图片描述

1、 host模式

容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口
如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是docker host上已经使用的端口就不能再用了,网络的隔离性不好。
在这里插入图片描述

2 container:

创建的容器不会创建自己的网卡、设置IP等,而是和一个指定的容器共享IP、端口范围
这个模式指定新创建的容器和已经存在的一个容器共享一个network namespace,而不是和宿主机共享,新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定地容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表还是隔离的。两个容器的进程可以通过loo网卡设备通信

在这里插入图片描述

3、 None模式

该模式关闭了容器的网络功能
这种网络模式下容器只有lo回环网口,没有其他的网卡。none模式可以在容器创建时通过-network=none参数指定
这种类型的网络无法联网,但是封闭的网络能很好的保证容器的安全性

4 、Bridge模式

此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker虚拟网桥,通过docker 0 网桥及iptables的nat,表配置与宿主机通信
当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。
从docker0子网中分配一个IP给容器使用,并设置docker0 的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair 设备,Docker 将 veth pair 设备的一端放在新创建的容器中,并命名为etho(容器的网卡),另一端放在主机中,以vethxxx,这样类似的名字命名,并将这个网络设备加入到docker0 网桥中。可以通过brctl show命令查看。
bridge模式是docker 的默认网络模式,不写-net参数,就是 bridge模式。使用docker run -p时, docker实际是在iptables,做了DNAT规则,实现端口转发功能。可以使用jptables. -t nat -vnL查看。

在这里插入图片描述
先自定义网络模式

docker network create --subnet=172.18.0.0/16 mynetwork		##创建172.18.0.0/16的网段

网络模式内加入指定的ip地址

docker run -itd --name centos-v1 --net mynetwork --ip 172.18.0.10 centos:7 /bin/bash
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker(二)基础命令 的相关文章

随机推荐

  • STM32F103 实验 输入捕获

    目录 本文 在上一章的基础上 将介绍如下内容 输入捕获 上一篇 STM32F103 实验 PWM输出 https blog csdn net qq 40318498 article details 96475438 参考 STM32F103
  • 测试——自动化测试(Selenium工具)

    目录 一 自动化测试的概念以及分类 二 Selenium web自动化测试工具 1 自动化测试的一些前置工作 2 第一个自动化实例 3 总结 编辑 三 Selenium常用方法 定位元素的方法 元素的操作 等待 强制等待 待补充 隐式等待
  • C++学习——函数调用运算符、function类模板

    一 函数调用运算符 1 圆括号 就是函数调用的明显标记 有一个称呼叫做 函数调用运算符 2 如果我在类中重载了函数调用运算符 那么我们就可以像使用函数一样使用该类的对象了 对象 实参 class BiggerThanZero public
  • C++初探 5-1(for循环)

    目录 注 for循环 for循环的组成部分 1 表达式和语句 2 非表达式和语句 3 修改规则 for循环的使用例 阶乘的计算与存储 修改循环更新的步长 使用for循环访问字符串 递增运算符 和 递减运算符 副作用和顺序点 前缀格式和后缀格
  • NoSQL简介和兴起的原因

    NoSQL简介和兴起的原因 NoSQL数据库具有以下几个特点 1 灵活的可扩展性 2 灵活的数据模型 3 与云计算紧密融合 怎么理解横向扩展和纵向扩展 纵向扩展 传统思想 把电脑的CPU配到顶配 内存扩展 硬盘扩大 就可以让单机更高效率地处
  • 用字节数截取字符串

    昨天去参加中科软的笔试 编程题有一道是关于字符串的 用字节数来截取字符串 如果出现中文被截断了 应该丢去中文的那个字节 如 String a 中aaa国ccc 截取6个字节的字符串 即 中aaa 国 的前一部分 设计一个函数 把截到的中文的
  • 电路设计中发光二极管用作指示灯时的限流电阻如何选择

    在设计电路时经常要用到发光二极管作为指示灯 按照网上所查到的限流电阻计算方法一般得到的限流电阻阻止在几十到一百多欧姆 电源为5V或者3 3V 但是在实际使用中我们一般使用的限流电阻不会这么小 下面是限流电阻的计算公式 R VCC VF IF
  • 表格单元格td设置宽度无效的解决办法

    http zzstudy offcn com archives 11366 在做table页面时 有时对td设置的宽度是无效的 td的宽度始终有内部的内容撑开 可以设置padding 但直接设置width却无效 下面我们来具体看下这个示例
  • 如何更好的理解PFC(功率因数校正)

    功率因数补偿 在上世纪五十年代 已经针对具有感性负载的交流用电器具的电压和电流不同相 图1 从而引起的供电效率低下提出了改进方法 由于感性负载的电流滞后所加电压 由于电压和电流的相位不同使供电线路的负担加重导致供电线路效率下降 这就要求在感
  • redis面试题(转)

    转自 https blog csdn net xiaozhegaa article details 80692017 1 什么是Redis Redis本质上是一个Key Value类型的内存数据库 很像memcached 整个数据库统统加载
  • CSerialPort教程4.3.x (5) - CSerialPort在cmake中的使用

    CSerialPort教程4 3 x 5 CSerialPort在cmake中的使用 环境 系统 windows 10 64位 QT 5 12 9 5 9及以上版本支持cmake构建 MFC vs2008 前言 CSerialPort项目是
  • Vsftp安装与配置

    在linux环境下 使用最多的FTP服务端软件就是Vsftpd 系统用户模式虽然可以控制访问 但是如果用户过多 就会影响服务器系统的管理 对服务器安全造成威胁 而且我们需要的仅仅是可以使用搭建在服务器的FTP服务而已 那么就需要我们设置虚拟
  • Elasticsearch实战(六)---高级搜索 boost控制权重实现搜索结果排名

    Elasticsearch实战 Boost 搜索结果排名 文章目录 Elasticsearch实战 Boost 搜索结果排名 1 Boost权重控制 1 1 准备数据 1 2 默认查询 1 3 boost控制修改权重 2 多Shard Bo
  • 十七、定时任务

    一 为什么需要定时任务 相关业务场景多 例如 1 凌晨一点进行相关数据同步 2 定时发送文章 3 半小时全量推送某些数据给用户 二 单机定时任务 Timer java util Timer是 JDK 1 3 开始就已经支持的一种定时任务的实
  • 多线程面试手撕题

    按序打印 我们提供了一个类 public class Foo public void one print one public void two print two public void three print three 三个不同的线程
  • 【雕爷学编程】Arduino动手做(93)--- 有关OLED屏的两个非常重要的知识点:像素点点阵和坐标系

    37款传感器与执行器的提法 在网络上广泛流传 其实Arduino能够兼容的传感器模块肯定是不止这37种的 鉴于本人手头积累了一些传感器和执行器模块 依照实践出真知 一定要动手做 的理念 以学习和交流为目的 这里准备逐一动手尝试系列实验 不管
  • Redis(一)单实例部署配置

    一 下载 安装 安装环境 CentOS 7 下载地址 http download redis io releases redis 4 0 11 tar gz 下载后通过FTP工具上传到服务器 app redis package 或者使用命令
  • 如何在Windows PowerShell中获取当前的用户名?

    本文翻译自 How do I get the current username in Windows PowerShell 如何在Windows PowerShell中获取当前的用户名 1楼 参考 https stackoom com qu
  • 第一章 Centos7.5介绍与安装部署-centos7.5知识

    一 历史发展 Linux 操作系统的鼻祖Unix 肯 汤姆逊和丹尼斯 里 奇于1969年在贝尔实验室建立了Unix操作系统 一款同时支持多人登录的操作系统 为了开发此系统他们发明了C语言 并于1983年俩人获得了图灵奖 GNU社区的建立 1
  • docker(二)基础命令

    一 docker命令 镜像 1 查看docker版本 docker v docker version decker info 可以查看所有运行容器的镜像数量 运行容器的版本 可以分配的CPU 总的内存等信息 docker的工作目录 var