Docker零基础入门

原文连接:Docker笔记
内置更多技术文章

Docker

1.认识与安装Docker

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的
Linux 机器上。

官网:https://www.docker.com

Docker安装:Docker安装

Docker架构

image-20230831235942984

  • Daemon:Docker守护进程,daemon主要功能包括镜像管理、镜像构建、REST API、身份验证、安全、核心网络以及编排。
  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • **容器(Container):**镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

2.配置阿里镜像加速器

  1. 搜索阿里云并登录(网易云、腾讯云都类似)

  2. 在控制台找到“容器镜像服务>镜像加速器”

    image-20230831235329663

  3. 根据操作文档修改daemon配置文件

    image-20230831235436102

  4. 查看/etc/docker/daemon.json文件是否修改成功

image-20230831235534136

3.Docker命令

Docker 进程相关命令

启动Docker服务:

systemctl start docker

停止Docker服务:

systemctl stop docker

重启Docker服务:

systemctl restart docker

查看Docker服务状态:

systemctl status docker

设置开机启动Docker服务:

systemctl enable docker

取消在CentOS 7上的Docker服务开机启动

systemctl disable docker

Docker 镜像相关命令

查看镜像

列出本地系统上已下载的Docker镜像。

docker images
docker images -q # 列出本地系统一下载的镜像ID
docker inspect mysql:5.7 # 查看镜像的更详细信息

这将显示镜像的名称、标签、镜像ID、大小和创建时间等信息。

搜索镜像

可以使用以下命令在Docker Hub上搜索镜像。

docker search <镜像名称>

例如,要搜索名为"ubuntu"的镜像:

docker search ubuntu
拉取镜像

使用以下命令从Docker Hub或其他镜像仓库拉取镜像。标签可以指定镜像的版本或变种。如果不指定标签,默认情况下会拉取 “latest” 标签的镜像。

docker pull <镜像名称>:<标签>

例如,要拉取官方的Ubuntu 20.04镜像:

docker pull ubuntu:20.04

一般我们要下载指定版本的镜像,但是我们并不知道版本是否存在,我们需要到Docker的官方网站去搜索

Docker官网:https://hub.docker.com/

删除镜像

删除本地系统上的Docker镜像。

docker rmi <镜像ID或名称>
docker rmi `docker images -q` #删除所有镜像

例如,要删除镜像ID为 abcdef123456 的镜像:

docker rmi abcdef123456

在删除镜像的时候可能会爆出一下的错误:

Error response from daemon: conflict: unable to delete 7614ae9453d1 (must be forced) - image is referenced in multiple repositories

问题复现:

我们先安装最新版的redis

docker pull redis

在安装6.2版本的redis

docker pull redis:6.2

此时我们来查看镜像列表

docker images

image-20230905135056155

我们发现两个版本的ID居然一样,说明在当前时间6.2版本就是最新的版本,只能通过名字和版本进行删除。

docker rmi redis:latest

6.删除所有的镜像

docker rmi `docker images -q`

Docker 容器相关命令

当您在CentOS 7操作系统上使用Docker时,以下是一些常用的容器相关命令,包括查看、创建、进入、启动、停止、删除容器以及查看容器信息的命令:

查看容器

列出当前系统中运行的Docker容器。

docker ps

若要查看包括已停止容器在内的所有容器,可以使用 -a 选项:

docker ps -a
创建并启动容器
docker run 参数

参数说明:

  • -i:保持容器运行。通常与 -t 同时使用。加入it这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭。当你使用这个选项时,可以像在命令行终端中一样与容器进行交互。
  • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用。
  • -d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec 进入容器。退出后,容器不会关闭。
  • -it:创建的容器一般称为交互式容器,-id 创建的容器一般称为守护式容器
  • –name:为创建的容器命名。

创建一个Centos 7的容器,命名为ct01,

docker run -it --name ct01 centos:7 /bin/bash

创建并启动容器之后会进入容器的内部,此时的终端为容器分配的伪终端

image-20230905141807549

启动创建守护式容器
docker run -id --name <容器名称>

使用-d创建的容器不会进入容器,只是将容器创建并运行。

例如创建并运行一个名称为ct02的容器

docker run -id --name ct02 centos:7

image-20230905143134311

创建好之后会将容器的ID打印出来,但是不会进入容器的伪终端,此时界面还是停留在宿主机里面。我们查看正在运行的容器,发现及时没有进入终端,但是终端依旧是在运行的。

image-20230905143315036

此时可以通过exec命令进入容器

docker exec -it ct02 /bin/bash

使用exit退出容器之后容器仍然在运行

image-20230905144703389

退出容器

退出容器使用exit命令

通过-it参数创建的容器一旦使用exit退出之后容器会自动关闭,但是-id不会

进入容器

进入正在运行的容器的交互式Shell会话。

docker exec -it <容器名称或ID> /bin/bash

其中/bin/bash为要在容器中执行的命令,"Docker exec"命令需要至少两个参数来执行

例如,要进入名为 “ct02” 的容器:

docker exec -it ct02 /bin/bash
启动容器

启动停止状态的容器。

docker start <容器名称或ID>

例如启动容器名称为ct01的容器

docker start ct01

此时的ct01运行成功

image-20230905144932648

停止容器

停止正在运行的容器。

docker stop <容器名称或ID>

例如停止ct02的容器

docker stop st02

image-20230905145205361

删除容器

删除不再需要的容器。

docker rm <容器名称或ID>

注意开启的容器不能删除

例如删除ct02

docker rm ct02

image-20230905145406508

查看容器信息

获取关于特定容器的详细信息,包括IP地址、端口映射等。

docker inspect <容器名称或ID>

例如查看ct01容器的详细信息:

docker inspect ct01

image-20230905145503326

4.容器的数据卷

什么是数据卷

​ 数据卷(Data Volumes)是一种用于在容器和宿主机之间共享和持久化数据的重要概念。数据卷允许你在容器中存储数据,并且这些数据可以在容器之间共享,甚至在容器被删除后仍然保留在宿主机上。

  • 数据卷是宿主机中的一个目录或文件
  • 当容器目录和数据卷目录绑定后,对方的修改会立即同步
  • 一个数据卷可以被多个容器同时挂载
  • 一个容器也可以被挂载多个数据卷

image-20230905150048916

数据卷的作用:

  • 容器数据持久化
  • 外部机器和容器间接通信
  • 容器之间数据交换

个人理解相当于Vue应用中的pinia或者Vuex,两个组件的数据并不互通,但是可以将数据保存在pinia里面,一个组件修改pinia的状态之后另一个组件的数据也跟着改变。一个组件的删除不影响pinia里面保存的state,实现了数据持久化。

配置数据卷

配置Docker数据卷通常涉及使用 -v--volume 选项来在容器和主机之间创建卷的绑定。

docker run ... –v 宿主机目录(文件):容器内目录(文件) ... 

注意:

  • 目录必须是绝对路径
  • 如果目录不存在,会自动创建
  • 可以挂载多个数据卷

例如:

下面的命令创建了一个名称为c3,镜像为contos7的容器,且将宿主机的目录和容器内的/root/data_container绑定成数据卷,实际上宿主机的/root/data一开始并不存在,挂在后会自动创建

docker run -it --name c3 -v /root/data:/root/data_container centos:7 /bin/bash

下面再容器的/root/data_container文件夹下创建jvyou.txt

image-20230912150358314

创建信息的会话,使用宿主机登录,检查宿主机的/root/data目录

image-20230912150621140

上面说明我们在容器里面创建的文件会同步到宿主机挂在的数据卷里面。

挂载多个数据卷

可以通过多次使用 -v--volume 选项来挂载多个数据卷到Docker容器中。每个 -v 选项后面指定一个宿主机路径和一个容器路径,以实现多个数据卷的挂载。

# 挂载3个数据卷,其中`\`是命令换行的意思
docker run -it --name c4 \
-v /root/data/:/root/data_container \
-v /root/data1:/root/data1_container \
-v /root/data2:/root/data2_container \
centos:7

在上面当中c3和c4都挂载了root/data作为数据卷,其中一个容器或者宿主机修改里面的文件,其他的容器对应的文件也会同步修改,实现了不同的容器之间的数据通信。容器删除之后数据卷里面的数据仍然会保存,实现了数据的持久化。

数据卷容器

数据卷容器是一种用于管理和共享数据卷的特殊类型的Docker容器。它的主要目的是将数据从主要容器(应用程序容器)中分离出来,以实现数据的持久化和共享,从而提高容器化应用的可维护性和可扩展性。

image-20230912160131674

首先,创建一个数据卷容器:

docker run -v /容器内路径 --name 数据卷容器名称 镜像名称 /bin/bash
# 创建一个容器,该容器的数据卷为容器内的`vdata`目录,docker会自动为c1容器在宿主机分配一个目录作为数据卷
docker run -it -v /vdata --name c1 centos:7

然后,创建一个主要应用程序容器,并挂载数据卷容器中的数据卷:

docker run -it --volumes-from 数据卷容器名称 --name 主要容器名称 镜像名称
docker run -it --volumes-from c1 --name c2 centos:7
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值