docker基础知识

发布时间 2023-12-10 09:19:43作者: 德琪

1.docker简介

dockeri就是一个【软件】,支持在win、mac、linux系统上进行安装。
可以在一台电脑上根据模版创建出多个隔离的环境,相比其他方式而言极大的节省资源Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。启动容器相当于启动本机的一个进程,而不是启动一个操作系统,速度就快很多

1.为什么要创建隔离的环境?

​ 假设你先在有一个centos7.6系统运行程序,而这个程序需要依赖[ubuntu系统的服务A]+[centos7.9的服务B]

  • 传统的方式:买新服务器
  • 虚拟化方式:在原来的NB服务器上利用虚拟化技术创建虚拟机(vmware、kvm等),用虚拟机做隔离去跑新的业务。
  • docker的方式:利用docker软件创建一个新的容器,用容器去做隔离区跑新的业务。
2.为什么dockeri可以比虚拟机极大的节省资源?
  • 虚拟机的方式,是在电脑完整的创建一个操作系统(程序需要的系统)。
  • docker的方式,创建的容器不是完整的操作系统,而是充分利用宿主机内核+进程,只是创建了一些必备的资源(程序需要的系统环境)。
image-20231207101534338
3.docker基础概念
  • dockerfile(脚本源码
  • 镜像(Image):Docker 镜像(Image),用于创建 Docker 容器的模板,比如 Ubuntu 系统。(可执行程序)
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是独立运行的一个或一组应用,是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。(运行进程
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

(1)镜像(Image)

Docker 镜像Image),就相当于是一个 root 文件系统,比如官方镜像 ubuntu:18.04 就包含了完整的一套 Ubuntu 18.04 最小系统的 root 文件系统

  • Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器。
  • image 文件可以看作是容器的模板,Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。
  • [root@localhost new]# docker pull python:3.10 ,命令执行后,镜像文件都会存放在 Docker 引擎的默认目录中,通常是 /var/lib/docker 目录。

实际开发中,一个 image 文件往往通过继承另一个 image 文件,加上一些个性化设置而生成。举例来说,你可以在 Ubuntu 的 image 基础上形成你的 image。

$ docker search   #搜索镜像

# 将 image 文件从仓库抓取到本地
$ docker image pull library/hello-world   #由于 Docker 官方提供的 image 文件,都放在library组里面,默认省略
$ docker image pull hello-world

# 本机看到这个 image 文件
$ docker images  #自动检索系统根目录

# 运行这个 image 文件
$ docker container run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.

#安装运行 Ubuntu 的 image,就可以在命令行体验 Ubuntu 系统
#$ docker container run -it ubuntu bash  
(2)容器(Container)
  • image 文件生成的容器实例,本身也是一个文件,称为容器文件。
  • 关闭容器并不会删除容器文件,只是容器停止运行而已。
# 列出本机正在运行的容器
$ docker ps  #检索系统的进程,没有具体位置

# 启动/停止容器
$ docker run -it -d  nginx:latest 
$ docker run -it -d -p 8888:8000 nginx:latest  /bin/bash
  • -p参数:容器的 3000 端口映射到本机的 8000 端口。
  • -d参数: 默认服务在后台运行
  • -it参数:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器。
  • nginx:latest:image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)。
  • /bin/bash:容器启动以后,内部第一个执行的命令。这里是启动 Bash,保证用户可以使用 Shell。

2.docker 使用

不懂就:

docker search python(其他仓库镜像centos、Ubuntu等)
docker build(或者其他命令run\pull ) --help
1.docker 安装
#CentOS系统
#配置repo源
[root@localhost ~]# curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost ~]# curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@localhost ~]# yum clean all & yum makecache

#查看docker可下载版本
[root@localhost ~]# yum list docker-ce --showduplicates | sort -r

#最新版
[root@localhost ~]# yum install -y docker-ce
#指定版本
[root@localhost ~]# yum install -y docker-ce-23.0.6


# Ubuntu系统
root@iZ8vbdn64nyz3h1qvey2rbZ:~# apt update
root@iZ8vbdn64nyz3h1qvey2rbZ:~# apt install docker.io  #执行此命令需要使用sudo或以root身份运行,即进入~

[root@localhost ~]# systemctl status docker
[root@localhost ~]# systemctl start docker

配置docker镜像加速:

#先创建文件夹
mkdir -p /etc/docker
#镜像加速
vi /etc/docker/daemon.json
{ "registry-mirrors": [
    "https://registry.docker-cn.com",
    "https://xqybwad5.mirror.aliyuncs.com",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
     ]
}

#重新加载配置文件
systemctl daemon-reload
#重新启动docker
systemctl restart docker
#检查加速器是否生效
docker info
2.docker 命令

Docker 命令大全 | 菜鸟教程 (runoob.com)

docker search 查询镜像
runoob@runoob:~$ docker search 
docker pull 拉取镜像

​ 之前说过,docker中image的概念就类似于“可执行程序”,我们可以从哪里下载到别人写好的应用程序呢?很简单,那就是APP Store,即应用商店。与之类似,既然image也是一种“可执行程序”,那么有没有"Docker Image Store"呢?答案是肯定的,这就是Docker Hub,当然也可以存到本地,使用文件传递

# 获取镜像(这里使用的是ubantu15.10版本,不加后面数字默认拉取最新版本)   
runoob@runoob:~$ docker pull ubuntu:15.10  

docker images 查看镜像

List images:用于列出本地主机上已经下载的 Docker 镜像。它可以显示镜像的名称、标签、大小和创建时间等信息。该命令常用于查看本地主机上可用的镜像列表,以及占用的磁盘空间大小

root@iZ8vbdn64nyz3h1qvey2rbZ:/project# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
pysrv        latest    b8fdd4955e69   14 hours ago   1.36GB
python       3.10      748d669298ac   6 weeks ago    1e+03MB

image-20231208122830043

输出详情介绍:

  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签
  • IMAGE ID:镜像ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小
docker build 构建镜像

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

image-20231208163719406
docker start 启动容器
root@iZ8vbdn64nyz3h1qvey2rbZ:/project# docker start <容器 ID>
docker stop 停止容器
root@iZ8vbdn64nyz3h1qvey2rbZ:/project# docker stop <容器 ID>
docker exec 进入容器
# 进入容器
root@iZ8vbdn64nyz3h1qvey2rbZ:/project# docker exec -it <容器 ID> /bin/bash
root@iZ8vbdn64nyz3h1qvey2rbZ:/project# docker exec -it <容器 ID> bash
docker run 运行容器

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

root@iZ8vbdn64nyz3h1qvey2rbZ:/project# docker run -it -d --name ubuntu-test ubuntu /bin/bash
image-20231208163824784
docker ps 查看容器

List containers:用于列出正在运行的 Docker 容器。它可以显示容器的 ID、名称、状态、所使用的镜像等信息。该命令常用于查看正在运行的容器,以及查看容器的状态和端口映射等详细信息

root@iZ8vbdn64nyz3h1qvey2rbZ:/project# docker ps

image-20231208122810059

输出详情介绍:

CONTAINER ID: 容器 ID。

IMAGE: 使用的镜像。

COMMAND: 启动容器时运行的命令。

CREATED: 容器的创建时间。

STATUS: 容器状态。

状态有7种:

  • created(已创建)
  • restarting(重启中)
  • running 或 Up(运行中)
  • removing(迁移中)
  • paused(暂停)
  • exited(停止)
  • dead(死亡)

PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。

NAMES: 自动分配的容器名称。