Docker命令

本文介绍了Docker的基本概念,包括其作为轻量级虚拟机的原理、设计宗旨、为何受欢迎,以及其核心组件(镜像和容器)、与虚拟机的区别、安装步骤、常用命令和文件操作。涵盖了Docker的资源隔离机制和镜像管理,以及容器的创建、操作和生命周期管理。
摘要由CSDN通过智能技术生成

Docker基本管理和概念

Docker是什么

开源的应用容器引擎,基于go语言开发的,运行在linux系统当中的开源的,轻量级的”虚拟机”

Docker的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的,可移植的,自给自足的容器
Docker的宿主机是linux系统,集装箱可以理解为相互隔离的容器(组件,不同的应用程序app),每个容器都是一个独立的应用程序

Docker的设计宗旨

build                  ship and run any app                anywhere
build一次封装,封装好的程序,现成的程序,只需要部署即可使用
ship and run any app一次封装完成之后的程序,可以在任何环境运行
anywhere任意宿主机

整个流程为

一次封装到处运行

封装,发布,部署,运行,维护,运行,销毁

可以以一整套的方式管理应用程序的生命周期

Docker为什么受欢迎

灵活随时随地的使用,再复杂的应用也可以实现容器化
轻量级小型的,不完整的,最小化封装的程序,与宿主机共享内核
可互换性可以随时的升级,更新
便携式本地可以构建,在云平台上也可以实现部署,在任何地方运行
可扩展可以自动分发容器副本
可以堆叠在一个宿主机上可以创建不同版本的同一容器,也可以是多个相同版本的同一容器

Linux的命名空间 namespace

通过命名空间实现了不同进程之间,不同程序之间,包括不同容器之间可以形成隔离

它是一种内核的特性,允许将一组系统资源隔离,在一个命名空间中的进程在系统当中可以拥有独立的资源

面试题

为什么docker可以实现隔离

                    因为namespace的六项隔离措施

UTS

命名空间

系统调用参数:CLONE_NEWUTS

隔离内容

主机与域名,在UTS这个名命名空间创建进程,进程可以看到自己的主机名与域名,与其他进程分隔开,每一个创建的进程都有自己独立的主机名和域名,每一个创建进程的主机名和域名都和其他程序相互独立

IPC

系统调用的参数:CLONE_NEWIPC

隔离内容

信号量,消息队列,共享内存,在IPC这个命名空间之中,进行可以拥有独立的进程间通信资源

PID

系统调用:CLONE_NEWPID

隔离内容

每个进程有自己独立的进程号空间

NETWORK

系统调用参数:CLONE_NEWNET

隔离内容

网络设备,网络栈,以及端口,每个进程都有一个自己独立的网络资源,端口号。

        MOUNT

系统调用参数:CLONE_NEWNS

隔离内容

挂载点,在mount这个命名空间之中,每个进程或者设备都有自己的文件系统挂载点,相互之间互不干扰

USER

系统调用参数:CLONE_NEWUSER

隔离内容

隔离不同的用户和用户组

基于这六个隔离项,实现了容器与容器之间,已经容器与宿主机之间的资源隔离

Docker的核心组件

镜像是docker的基础,最小单位,类似虚拟机的ISO文件,一个镜像,就是一个可以执行的包,包里面包含了运行这个程序的所有内容(代码,配置文件,环境变量),可以理解为docker镜像是一个压缩包,但不是解压的文件,是一个环境部署的脚本,甚至包含了完整的操作系统,比如有一个nginx镜像,它会拉起nginx服务之外还会装一个类centos的完整操作系统
容器docker的容器就是基于镜像运行起来的实例,可以启动,停止,删除,每一个容器都是相互隔离的,互不可见
仓库

保存镜像,所有的镜像都是从仓库当中拉取的,可以是公有仓库,还可以是私有仓库,镜像都是从仓库中拉取,镜像也保存在仓库之中

如果下载到了本地(linux系统),所有的镜像,容器,容器运行相关的日志,都默认保存在 /var/lib/docker   本地是指宿主机

Docker与虚拟机之间的区别

特性docker虚拟机
启动速度秒级分钟级
cpu计算能力损耗几乎无损耗50%
性能接近于原生系统弱于原生系统
系统支持量上千个

看硬件系统

最多几十个

隔离性资源隔离完全隔离
安全性安全性差安全性高

Docker的安装

[root@docker1 ~]# systemctl stop firewalld
[root@docker1 ~]# setenforce 0
[root@docker1 ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
#yum-utils提供了yum-config-manager工具,可以远程自定义获取yum源
#device-mapper-persistent-data lvm2 存储驱动程序,device-mapper提供了两种机制,
#1.进行逻辑卷管理的通用设备的映射机制
#2.lvm2 虚拟化逻辑设备映射机制
[root@docker1 ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#设置阿里源镜像
[root@docker1 ~]# yum install -y docker-ce docker-ce-cli containerd.io
#docker-ce(Docker Community Edition):这是 Docker 的社区版,Docker 社区版是免费的,面向开发者、#小型团队和个人使用。它包含了 Docker Engine
#docker-ce-cli(Docker Command Line Interface):这是 Docker 的命令行工具,它允许用户与 Docker #Engine 交互,执行容器相关的操作。
#通过 Docker CLI,用户可以构建、运行、管理和发布容器。
#containerd.io:它负责管理容器的生命周期,包括容器的创建、运行、暂停、继续和销毁等
[root@docker1 ~]# systemctl start docker.service
[root@docker1 ~]# systemctl enable docker.service
[root@docker1 ~]# systemctl status docker

 Docker的命令

#查看版本信息
[root@docker1 ~]# docker version
Client: Docker Engine - Community
#用的社区版
Version:           24.0.7
#docker的版本号 是24.0.7
Go version:        go1.20.10
#go语言版本

#特殊说明,docker只能支持64为系统
#docker安装完毕之后,客户端和服务端都在一起,都运行在一台机器上
overlay2:docker使用的文件系统驱动
OverlayFS;overlay file sysytem:联合文件系统,用于适配宿主机的文件系统,可以自动适配

LowerDir

底层目录

docker的底层文件系统,是一个或者多个镜像文件的根文件系统

UpperDir

可写层

可以在容器运行时,在容器内进行写操作,实现容器的可写性

MergeDir

合并目录

lowerdir和upperDir合并起来,就是容器的文件系统,用户看到的也就是这个合并的视图

WorkDir

工作目录

处理文件系统的变更,当在容器内进行写操作时,overlayfs使用workdir来追踪文件系统的变更

如何对docker的镜像进行操作

docker search nginx
格式:docker search +镜像名称
搜索镜像

docker pull nginx
获取镜像 如果后面什么都不加就是获取nginx的最新版本

[root@docker1 /]# docker pull centos:7
指定拉取centos:7版本

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
镜像加速下载

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://hugt71dc.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
如何查看下载的镜像
[root@docker1 /]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
centos       latest    5d0da3dc9764   2 years ago   231MB
#REPOSITORY指的是镜像所属的仓库,
#TAG指的是标签,也可以理解为版本,标记一个仓库中的不同镜像
#IMAGE ID 镜像的唯一标识,标识不会重复
#CREATED 镜像的创建时间
#SIZE 镜像的大小
#已经下载的不会再次下载
如何查看镜像的详细信息

[root@docker1 /]# docker inspect eeb6ee3f44bd
根据imag id 查询
打上不同的标签,改标签名

[root@docker1 /]# docker tag centos:latest centos:new

如何删除镜像

[root@docker1 /]# docker rmi centos:latest
删除标签

[root@docker1 /]# docker rmi 5d0da3dc9764
完整删除镜像

[root@docker1 /]# docker rmi -f eeb6ee3f44bd
强制删除

如果一个镜像有多个标签时,删除时指定了标签就只是删除标签,如果只剩最后一个标签时删除的就是镜像本身,如果要删除镜像最好指定image id进行删除,如果镜像已经被容器使用,要先停容器,再删除容器,最后再删除镜像。

如何将镜像保存为本地文件

[root@docker1 /]# docker save -o /opt/centos.tar centos:7
导出
如果不指定保存路径将会默认保存在当前目录,然后为镜像起个名字可自定义但结尾一般以.tar结尾,centos:7如要导出指定版本要指定名称与版本

[root@docker1 /]# docker rmi -f eeb6ee3f44bd
[root@docker1 /]# cd /opt
[root@docker1 opt]# docker load -i centos.tar
导入
删除后可以重新导入
如何上传到仓库

[root@docker1 ~]# docker tag eeb6ee3f44bd chenwh180/centos:guoqi
[root@docker1 ~]# docker login
Username: chenwh180
Password:
[root@docker1 ~]# docker push chenwh180/centos:guoqi
如何基于镜像创建容器
[root@docker1 ~]# docker create -it centos:7 /bin/bash

如何查看已经运行的容器
[root@docker1 ~]# docker ps

查看所有容器,包括已运行和未运行的容器
[root@docker1 ~]# docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS    PORTS     NAMES
29323d5ec555   centos:7   "/bin/bash"   5 minutes ago   Created              
hungry_chatterjee

启动容器
[root@docker1 ~]# docker start 29323d5ec555
29323d5ec555

如何进入正在运行的容器
[root@docker1 ~]# docker exec -it 29323d5ec555 /bin/bash
可以根据name启动也可以根据唯一id启动 最后跟上/bin/bash 或者直接bash也行
-i:表示让容器开启标准输入,接受用户的输入命令
-t:给这个容器分配一个终端,这是一个虚拟的伪终端
-it就是给用户一个交互界面,形成一个宿主机和容器之间形成一个可以交互的shell的命令行

exit就可以退出
创建了一个容器就有一个网络 ifconfig可以查看


[root@docker1 ~]# docker run -itd --name test1 nginx:1.22.0 /bin/bash
1.没有镜像可以自动拉取
2.-d结合,给容器持续运行的命令,后台没有指令,容器没有可运行的程序,将会直接退出
3.-it形成交互式会话
4.d后台运行 /bin/bash
5.--name 给容器命名
6.nginx:1.22.0 镜像名称和标签,如果本地没有可以自动下载

 停止容器运行

docker stop 2592d3fad0fb
格式:docker stop 容器的ID/名称
#终止容器运行

docker的文件导入与导出

导出文件
[root@docker1 ~]# docker cp test1:/etc/nginx/nginx.conf /opt/
Successfully copied 2.56kB to /opt/

导入文件
[root@docker1 ~]# docker cp /opt/nginx.conf 8ba1263c5487:/etc/nginx/
Successfully copied 2.56kB to 8ba1263c5487:/etc/nginx/

进入容器查看
root@8ba1263c5487:/etc/nginx# cat /etc/nginx/nginx.conf

 容器的导出与导入

容器的导出与导入
用户可以将任何一个 Docker 容器从一台机器迁移到另一台机器。在迁移过程中,可以使用docker export 命令将已经创建好的容器导出为容器快照文件,无论这个容器是处于运行状态还是停止状态均可导出。可将导出文件传输到其他机器,通过相应的导入命令实现容器的迁移。
 
docker export 3f883fcf4803 > nginx1.22.o.tar
#导出格式:docker export 容器ID/名称 > 文件名
 
docker export -o nginx.tar 2592d3fad0fb
 
cat centos7.tar | docker import - nginx:test
导入格式:cat 文件名 | docker import – 镜像名称:标签
#导入后会生成镜像,但不会创建容器
 
docker import nginx.tar -- nginx:test

  删除与批量删除容器

docker stop 2592d3fad0fb
格式:docker rm [-f] 容器ID/名称
#删除容器
 
docker rm 2592d3fad0fb
#删除已经终止状态的容器
 
docker rm -f 2592d3fad0fb
#强制删除正在运行的容器
 
docker ps -a | awk 'NR>=2{print "docker stop "$1}' | bash
#批量停止容器
docker ps -a | awk 'NR>=2{print $1}'| xargs docker stop
 
docker ps -a | awk 'NR>=2{print "docker rm "$1}' | bash
#批量删除所有容器
docker ps -a | awk 'NR>=2{print $1}'| xargs docker rm

 批量删除镜像

docker images | awk 'NR>=2{print "docker rmi "$3}' | bash
#批量删除镜像
docker images | grep none | awk '{print $3}' | xargs docker rmi
#删除none镜像
 
docker rm $(docker ps -a -q)
#批量清理后台停止的容器

Docker的特性:即使在创建过程中报错,容器还是会被创建,但是这个容器不可用

导入镜像,或者导入容器镜像,如果和已有标签重复,导入的镜像或者容器镜像,tag这一项就会变成none

总结

docker基本命令:
docker search
#搜索
docker pull nginx:1.22.0
#获取镜像
docker images
#查看镜像
docker rmi -f
#强制删除镜像
docker tag nginx:1.22.0(在镜像中已有标签) nginx:zyg(给他新的标签)相当于硬连接(复制了源镜像)
#给不同的镜像打上不同的标签
 
导入和导出镜像:
docker save -0 /opt/nginx.tar(一般用xxx.tar) nginx:1.22.0(这个镜像要已经存在)
#导处镜像
docker load -i xxx.tar
#导入镜像
 
上传镜像:
docker push jqmnzyg/nginx:zyg
#jqmzyg:dockerup的用户名
#nginx:zyg是镜像名称和标签
 
容器:
有镜像才有容器
容器都是基于镜像创建的
-i
-t
-d
其中-i和-t和-d一般一起使用
-itd:表示后台运行指定程序,而且创建一个交互式的shell.用户输入操作命令
docker run -itd 镜像名称 --name 容器名称 /bin/bash
#如果容器中没有可执行的命令,容器创建完成之后将会立刻退出
docker exec -it 容器名/容器ID
 
查看正在运行的容器:
docker ps
#只显示正在运行的容器
docker ps-a
#显示所有容器,包括没有在运行的容器
 
导出容器:
docker export -o 导出名称.tar 容器名/容器id
导入容器:
docker import 导入名称.tar --容器名:标签名(标签名尽量不要重复)
 
复制文件出入容器:
复制文件到本地:
docker cp 容器名/容器id:/etc/nginx/nginx.conf /opt/
复制本地文件到容器:
docker cp /opt/123.txt 容器名/容器id:/etc/nginx/nginx.conf
 
删除容器:
docker rm -f
#强制删除容器
docker rm
#删除容器
 
停止容器:
docker stop
#停止容器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值