首页 > 其他分享 >Docker概述

Docker概述

时间:2024-08-20 11:19:58浏览次数:7  
标签:容器 image 命令 概述 镜像 Docker docker

Docker

Ⅰ 容器介绍

1. 什么是容器

容器一词的英文是container,其实container还有集装箱的意思,集装箱绝对是商业史上了不起的一项发明,大大降低了 海洋贸易运输成本。让我们来看看集装箱的好处:

· 集装箱之间相互隔离
· 长期反复使用
· 快速装载和卸载
· 规格标准,在港口和船上都可以摆放

Docker是一个用Go语言实现的开源项目,可以让我们方便的创建和使用容器,Docker将程序以及程序所有的依赖都打 包到docker container,这样你的程序可以在任何环境都会有一致的表现;

这里程序运行的依赖也就是容器就好比集装箱,容器所处的操作系统环境就好比货船或港口,程序的表现只和集装箱有关 系(容器),和集装箱放在哪个货船或者哪个港口(操作系统)没有关系。

因此我们可以看到docker可以屏蔽环境差异,也就是说,只要你的程序打包到了docker中,那么无论运行在什么环境下 程序的行为都是一致的,程序员再也无法施展表演才华了,不会再有“在我的环境上可以运行”,真正实现“build once, run everywhere”构建一次,到处运行。

2. 比较虚拟机

1)与虚拟机通过操作系统实现隔离不同,容器技术只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统,
这里的运行时环境指的是程序运行依赖的各种库以及配置。
2)Docker 容器 在概念上与虚拟机非常类似,但是它不会去模拟底层的硬件 ,只会为每一个应用提供完全隔离的运行环
境,这些“环境”就是Docker中的Container(容器)。
3)容器的安全性问题的根源在于容器和宿主机共享内核。如果容器里的应用导致Linux内核崩溃,那么整个系统可能都
会崩溃。与虚拟机是不同的,虚拟机并没有与主机共享内核,虚拟机崩溃一般不会导致宿主机崩溃。
4)目前 Docker 只能支持 64 位系统。

*注意,容器是一种通用技术,docker只是其中的一种实现。

3. 如何使用docker

docker中有这样几个概念:

· dockerfile //理解为源码

· image //理解为可执行程序

· container //理解为运行起来的进程

· Repository //仓库可看成一个代码控制中心,用来保存镜像

那么写程序需要源代码,那么“写”image就需要dockerfile,dockerfile就是image的源代码,docker就是"编译器"。

因此我们只需要在dockerfile中指定需要哪些程序、依赖什么样的配置,之后把dockerfile交给“编译器”docker进行“编 译”,也就是docker build命令,生成的可执行程序就是image,之后就可以运行这个image了,这就是docker run命 令,image运行起来后就是docker container。

4. docker是如何工作的

  • 实际上docker使用了常见的CS架构,也就是client-server模式;

  • docker client负责处理用户输入的各种命令,比如docker build、docker run;

  • 真正工作的其实是server,也就是docker daemon(Docker 守护进程),服务端负责构建、运行和分发Docker容器等 繁重的工作;

  • 值得注意的是,docker client和docker daemon可以运行在同一台机器上,也可以连接到一个远程 Docker 守护进程。 两者通过 UNIX 套接字或网络接口使用 REST API 进行通信。

4.1 docker build

当我们写完dockerfile交给docker“编译”时使用这个命令,那么client在接收到请求后转发给docker daemon,接着 docker daemon根据dockerfile创建出“可执行程序”image。

4.2 docker run

有了“可执行程序”image后就可以运行程序了,接下来使用命令docker run,docker daemon接收到该命令后找到具体 的image,然后加载到内存开始执行,image执行起来就是所谓的container。

4.3 docker pull

其实docker build和docker run是两个最核心的命令,会用这两个命令基本上docker就可以用起来了,剩下的就是一些 补充。

那么docker pull是什么意思呢?

我们之前说过,docker中image的概念就类似于“可执行程序”,我们可以从哪里下载到别人写好的应用程序呢?很简单, 那就是APP Store,即应用商店。与之类似,既然image也是一种“可执行程序”,那么有没有"Docker Image Store"呢? 答案是肯定的,这就是Docker Hub,docker官方的“应用商店”,你可以在这里下载到别人编写好的image,这样你就不 用自己编写dockerfile了。

docker registry可以用来存放各种image,公共的可以供任何人下载image的仓库就是docker Hub。那么该怎么从 Docker Hub中下载image呢,就是这里的docker pull命令了。

因此,这个命令的实现也很简单,那就是用户通过docker client发送命令,docker daemon接收到命令后向docker registry发送image下载请求,下载后存放在本地,这样我们就可以使用image了。

4.4 Repository

集中存放镜像文件的地方

  • 镜像构建完成后,可以在当前宿主上运行,但是如果需要在其它服务器上使用这个镜像,就需要一个类似Git仓库那样的 集中存储、分发镜像的服务,Docker Registry就是这样的服务。

  • 一个Docker Registry中可以包含多个仓库,每个仓库可以包含多个Tag,每个Tag对应一个镜像。镜像仓库是Docker用 来集中存放镜像文件的地方,类似于之前常用的代码仓库。

  • 通常一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。可以通过<仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以latest作为默认标签。

Ⅱ Docker命令介绍

1. Docker删除容器

1.1 方案一:使用docker rm命令删除容器

Docker提供了docker rm命令用于删除容器。该命令需要提供要删除的容器的ID或者名称作为参数。

docker rm <container_id>

例如,要删除ID为abcd1234的容器,可以执行以下命令:

docker rm abcd1234

如果要删除多个容器,可以在命令中依次指定多个容器的ID或者名称。

docker rm container1 container2 container3

注意: 删除容器时,请确保容器已经停止运行。如果容器正在运行,需要先使用docker stop命令停止容器,然后再执行docker rm命令删除容器。

2. 查看容器

docker ps -a

3. 查看容器占用率

docker stats --no-stream xxx

4. Docker进程启动、停止、重启操作

systemctl start docker
systemctl stop docker
systemctl restart docker

5. 启动容器

例如 279e38aa1d6e

docker start 279e38aa1d6e

6. 镜像

6.1 检索镜像

docker search xxxx

6.2 下载镜像

docker pull xxxx

6.3 查看镜像列表

docker images

6.4 查看镜像详细信息

docker inspect 镜像ID号

6.5 删除镜像

docker rmi xxxx

6.6 镜像下载加速

浏览器访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 获取镜像加速器配置

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

7. 容器创建

容器的各种操作主要包括,启动、关闭、重启和日志查询

7.1 容器创建

加载镜像,创建容器run 后面可以跟很多的参数,比如容器暴露端口指定,存储映射,权限等等,由于参数过多,下面 只给出几个不同的例子,来具体的演示参数可以怎么加

当利用 docker run 来创建容器时, Docker 在后台的标准运行过程是:

(1)检查本地是否存在指定的镜像。当镜像不存在时,会从公有仓库下载;

(2)利用镜像创建并启动一个容器;

(3)分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层;

(4)从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中;

(5)分配一个地址池中的 IP 地址给容器;

(6)执行用户指定的应用程序,执行完毕后容器被终止运行

docker run     

•           -i       # 打开 STDIN,用于控制台交互    

•           -t       # 支持终端登录    

•           -d       # 要求容器后台运行,默认前台 前三个标签可连写为itd    

•           -v       # 挂载数据卷     --name=dc_nm # 指定容器名    

•           -p 8080:80   # 暴露容器端口 80,并与宿主机端口 8080 绑定      

•           centos:latest # 镜像名:版本

执行 docker run 命令, 等同于先执行 docker create 命令,再执行 docker start 命令

7.2 基本操作

容器本操作主要包括启动、停止、重启、删除

docker ps -a                       # 查看容器列表, 列出所有的容器
docker exec -it "ct_id" /bin/bash # 进入容器,ct_id是容器id
docker start xxx                   # xxx可以是容器名,也可以是容器id
docker stop xxx                   # 关闭容器
docker restart xxx                 # 重启
docker rm xxx                     # 删除

从宿主机复制文件

docker cp 宿主机文件路径 容器id:/home/your_path

7.3 进入容器

docker start 2592d3fad0fb #进入容器前,确保容器正在运行
docker exec -it 2592d3fad0fb /bin/bash
ls
exit #退出容器后,容器仍在运行
docker ps -a

8. Centos7 卸载 Docekr(方案一)

要在CentOS 7上干净地卸载Docker,可以执行以下步骤

8.1 停止Docker服务

sudo systemctl stop docker

8.2 移除所有Docker容器和镜像。

这将删除所有相关数据,包括容器、镜像以及存储卷等。请注意,这将不可逆转地删除 数据。

 sudo rm -rf /var/lib/docker

8.3 卸载Docker软件包

可以使用以下命令之一,根据Docker的安装方式选择相应的命令

8.3.1 Docker是通过yum进行安装的

sudo yum remove docker-ce docker-ce-cli containerd.io

8.3.2 Docker是通过dnf进行安装的

sudo dnf remove docker-ce docker-ce-cli containerd.io

8.3.3 Docker是通过RPM包进行手动安装的

sudo rpm -e docker-ce docker-ce-cli containerd.io

8.4 删除相关配置文件

sudo rm -rf /etc/docker
sudo rm -rf /etc/systemd/system/docker.service.d

8.5 删除用户组和用户(可选)

sudo groupdel docker
sudo userdel docker

8.6 卸载完成

完成以上步骤后,Docker将被完全卸载。

9. Centos7 卸载 Docekr(方案二)

yum remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

10. Centos7 部署Docker环境

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
service docker start
service docker status
systemctl start docker && systemctl enable docker

标签:容器,image,命令,概述,镜像,Docker,docker
From: https://www.cnblogs.com/itfox/p/18369077

相关文章

  • Docker compose 部署前后端-----采用nginx代理,支持一个端口部署多个前端
    Dockercompose部署前后端-----采用nginx代理,支持一个端口部署多个前端1、Linux服务器安装最新版docker,确保有dockercompose命令2、创建docker工作区目录mkdirdocker-workspace3、进入docker工作区目录,创建前端nginx目录,创建后端xxx目录mkdirnginxxxx4、创建confi......
  • 在K8S中,Kubernetes与Docker有什么关系?
    Kubernetes和Docker都是现代云原生技术栈的重要组成部分,但它们各自解决的问题领域不同。下面详细介绍它们之间的关系以及区别:1.DockerDocker是一个流行的容器化平台,它允许开发者将应用程序及其依赖打包成一个轻量级、可移植的容器。这样做的好处包括:隔离性:每个容器都有自......
  • rsync概述详解
    一、rsync基础概念:rsync是实时数据备份的作用1、rsync数据备份传输的方式本地模式:类似cp命令,与其不同的是,rsync属于增量备份远程方式模式:不区分服务端和客户端,实现两台主机时间到数据拷贝,可以直接进行数据的上传/下载进行备份/脚本打包守护进程模式:这种模式采用虚拟用户的......
  • docker部署gitlab
    gitlab拉取镜像dockerpull创建挂载目录mkdirgitlabcdgitlabmkdir-pdata/logmkdir-pdata/optmkdir-pdata/etc启动容器dockerrun-itd-p8443:443-p8090:80-p8022:22--namegitlab-v$PWD/data/etc:/etc/gitlab-v$PWD/data/log:/var/log/gitlab-v......
  • TCPIP路由技术第一卷第四章-3-链路状态协议概述
    链路状态路由协议ospfis-isospfietf(rfc)is-isositcp/iplsa序列号1.线性序列号2.环形序列号3.棒棒糖序列号ospf版本ospfversion1实验环境ospfversion2ipv4ospfversion3ipv6maxage当lsa的年龄到达maxage时,将被从所有数据库中删除.(默认3600秒,1小时)ls......
  • TCPIP路由技术第一卷第七章第一部分Eigrp整体概述以及邻居
    igrp不支持无类路由eigrp思科私有扩展更新算法dualk值metric=cost[10^7/BWmin+delaysum]*256距离矢量路由协议触发更新ipbandwidth-percenteigrp来改变缺省占用总带宽的百分比.缺省情况下,egirp协议使用的带宽不超过链路总带宽的50%.eigrp无类别的路由协议,更新包含子......
  • Docker部署Java项目
    本文使用Dockerfile的形式进行Java项目的部署第一步:创建Dockerfile文件Dockerfile是用于创建Docker对象的脚本,先创建Dockerfile文件,以下为我的文件模版: FROM:java对应的jdk版本RUN: 在构建过程中执行命令,用于安装软件、配置环境等ENV:设置环境变量WORKDIR:指向构建镜像时使......
  • Docker不同宿主机网络打通
    本方式使用dockerSwarm集群的方式创建overlay网络进行打通背景因java微服务使用nacos做配置中心,为了解决Nacos服务注册使用Docker容器内网ip问题,使用此方案前置条件1、宿主机之间需要开通端口管理端口:2377/tcp:用于管理Swarm模式集群。这是SwarmManager和Worker......
  • Docker 容器中镜像导出/导入
    利用容器中镜像导出/导入创建一个简单的Docker镜像利用dockerps-a命令查看要导出的镜像。导出查看要导出的镜像[root@localhost~]#dockerps-adockerexport命令进行镜像导出。[root@localhost~]#dockerexport418ae>nginx-docker.tar导入[vipsoft@kafka1ho......
  • docker 创建MySQL
    dockerrun\      --restart=always\  #这个参数是mysql在docker启动的时候,也会跟着自动启动--namemysql8.0\   #这个参数是mysql容器的名字-p3306:3306\    #这个参数是端口号映射-eMYSQL_ROOT_PASSWORD=root\  #这个参数是是设......