目录
1.docker简介
dockeri就是一个【软件】,支持在win、mac、linux系统上进行安装。
可以在一台电脑上根据模版创建出多个隔离的环境,相比其他方式而言极大的节省资源。Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。启动容器相当于启动本机的一个进程,而不是启动一个操作系统,速度就快很多
1.为什么要创建隔离的环境?
假设你先在有一个centos7.6系统运行程序,而这个程序需要依赖[ubuntu系统的服务A]+[centos7.9的服务B]
- 传统的方式:买新服务器
- 虚拟化方式:在原来的NB服务器上利用虚拟化技术创建虚拟机(vmware、kvm等),用虚拟机做隔离去跑新的业务。
- docker的方式:利用docker软件创建一个新的容器,用容器去做隔离区跑新的业务。
2.为什么dockeri可以比虚拟机极大的节省资源?
- 虚拟机的方式,是在电脑完整的创建一个操作系统(程序需要的系统)。
- docker的方式,创建的容器不是完整的操作系统,而是充分利用宿主机内核+进程,只是创建了一些必备的资源(程序需要的系统环境)。
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
输出详情介绍:
- REPOSITORY:表示镜像的仓库源
- TAG:镜像的标签
- IMAGE ID:镜像ID
- CREATED:镜像创建时间
- SIZE:镜像大小
docker build 构建镜像
Build an image from a Dockerfile:当我们写完dockerfile交给docker“编译”时使用这个命令,那么client在接收到请求后转发给docker daemon,接着docker daemon根据dockerfile创建出“可执行程序”image。
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
docker ps 查看容器
List containers:用于列出正在运行的 Docker 容器。它可以显示容器的 ID、名称、状态、所使用的镜像等信息。该命令常用于查看正在运行的容器,以及查看容器的状态和端口映射等详细信息
root@iZ8vbdn64nyz3h1qvey2rbZ:/project# docker ps
输出详情介绍:
标签:容器,image,基础知识,镜像,docker,root,Docker From: https://www.cnblogs.com/DQ-MINE/p/17892183.htmlCONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
状态有7种:
- created(已创建)
- restarting(重启中)
- running 或 Up(运行中)
- removing(迁移中)
- paused(暂停)
- exited(停止)
- dead(死亡)
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称。