“保姆式”级别的Docker入门学习

1. 前言

容器化部署在现代服务器部署中的地位越来越重要了,而docker作为容器化的管理工具,无疑是相当受欢迎的。今天在这里,就从0到1 来讲述下常用docker命令,以及方法

2. 合适人员

  • 马上毕业的大学生
  • 初入职场的后端开发人员
  • 以及需要适当接触服务的前端开发人员

3. 开始

3.1 安装

3.1.1 配置镜像

为了能在安装过程中提高速度,我们一般会选择一些别的镜像源,比如:阿里云。其实可以理解为npm的淘宝源,以及maven 等阿里源

  • 查看源文件
ls -lh /etc/yum.repos.d/

在这里插入图片描述

  • 设置源
wget -O /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

在这里插入图片描述

3.1.2 开始安装

最简单的办法可以参照官网 来一步一步执行。但是这里我也会写出来。 按照我的步骤跟官网是保持一致的。

  • 先尝试删除 之前安装的docker。如果之前没有安装过,此步骤可以跳过
sudo yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin
  • 直接安装需要的插件
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
  • 启动服务
sudo systemctl start docker
  • 查看版本
sudo docker version
  • 看到下面的图片 表示安装成功

在这里插入图片描述

3.1.3 其余的命令
  • 停止服务
sudo systemctl start docker
  • 重启服务
sudo systemctl restart docker
  • 设置开机启动服务
sudo systemctl enable docker

3.2 镜像管理

3.2.1 定义

什么是镜像呢???
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

  • 在容器化的世界中,镜像是一切不可变的基础设施资源。 镜像可以理解为模板,如果要打包新的镜像,是需要在原来镜像之上进行打包的
  • 既然镜像类似一种模板,那么就会有存储模板的地方。一般就是我们的docker官方源
  • 当然既然可以存在官方源,我们也可以搭建自己的私有源。 那么一切的镜像都是从源中获取的
3.2.2 命令
  • 镜像的帮助查询
docker images -h

在这里插入图片描述

  • 本地镜像列表
docker images

在这里插入图片描述

  • 镜像搜索
docker search nginx

在这里插入图片描述

  • 镜像下载
docker images [name][:tag]

在这里插入图片描述

  • 删除镜像
docker rmi [id]

# docker rmi d410f4167eea or docker rmi mysql:5.7
  • 批量删除镜像
docker rmi $(docker images -aq)
  • 镜像commit

以一个运行的容器为模板基础,打包成为另一个镜像

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
# docker commit --message='package image' 2cfc204817b5 nginx:v1

在这里插入图片描述

  • 镜像保存
docker save [OPTIONS] IMAGE [IMAGE...]
# docker save -o /tmp/docker/nginx-v1.tar nginx:v1

在这里插入图片描述

  • 镜像加载load
docker load [OPTIONS]
# docker load -i nginx-v1.tar

在这里插入图片描述

3.3 容器管理

3.3.1 基本参数
options说明
--name“容器新名字”: 为容器指定一个名称
-d后台运行容器,并返回容器 ID,也即启动守护式容器
-i以交互模式运行容器,通常与 -t 同时使用
-t为容器重新分配一个伪输入终端,通常与 -i 同时使用
-P:随机端口映射
-p指定端口映射,有以下四种格式 ip:hostPort:containerPortip::containerPorthostPort:containerPortcontainerPort
3.3.2 命令场景

下列如果使用到id的时候,不一定要全的,保证唯一就行

  • 查看启动的容器列表
docker ps

在这里插入图片描述

  • 关闭容器
docker stop [ID]
# docker stop 2cf
  • 删除容器
docker rm [ID]
# docker rm 2cf
  • 启动容器
docker start [ID]
# docker start 2cf
  • 批量删除容器
docker rm $(docker ps -aq)
  • -d形式运行一个镜像(后台模式运行)
docker run -d --name nginx nginx:latest

在这里插入图片描述

  • 查询运行容器的详情
docker inspect [ID]
# docker inspect 91

在这里插入图片描述

  • exec 进入容器
docker exec -it [ID] bash
# docker exec -it 91 bash

在这里插入图片描述

  • 退出容器

    • 方式1:$ exit 退出容器,并且关闭容器(不是每次都会关闭容器)。
      • 如果是创建容器,并且直接-it 进入容器后,执行exit后,会关闭容器。
      • 如果是以-d 的形式创建容器,然后再次进入容器后,执行exit后,不会关闭容器
    • 方式2:Ctrl + P + Q 直接退出容器
  • 以外部的形式 执行容器命令

docker exec -it [ID] [command]
# docker exec -it 9d ls

在这里插入图片描述

3.4 持久化管理

为什么docker需要持久化技术。 因为容器化技术是一种虚拟技术,我们可以创建容器,同样可以销毁容器,当我们修改容器中的内容,销毁容器后,之前修改的内容是无法保存的。会随着容器的销毁而消失。所以我们需要持久化技术来对数据进行管理,下面会列举出三种持久化实现方式:

3.4.1 -v 配置
docker run -d --name nginx_server_v -v /opt/nginx_server_v:/usr/share/nginx/html -p 8080:80 nginx
  • -v 表示数据卷的挂载。 A:B 标识A 表示宿主机的地址。 标识B 表示容器的地址。指定文件地址后,无论是宿主机还是容器将共享一个地址
  • 当设置共享后,无论是宿主机还是容器修改文件,两边都是同步的

在这里插入图片描述

3.4.2 --mount配置
3.4.2.1 volume
  • 数据卷帮助文档
docker volume -h

在这里插入图片描述

  • volume 列表
docker volume ls

在这里插入图片描述

  • 查看数据卷 详情
docker inspect [ID]/[name]
# docker inspect nginx-v1

在这里插入图片描述

  • 生成数据卷
docker volume create [name]
# docker volume create v1
  • 删除数据卷
docker volume rm [name]
# docker volume rm v1
3.4.2.2 --mount
docker run -d --name web1 --mount src=v1,dst=/usr/share/nginx/html nginx:latest

通过上述代码执行后,容器中共享内容会同步到宿主环境中。 但是其余的持久化方式不会同步。(其余的持久化技术共享后 宿主环境中文件夹仍然是空的)

在这里插入图片描述

3.4.3 bind 配置
docker run -d --name web5 --mount type=bind,src=/opt/web5root,dst=/usr/share/nginx/html nginx:latest

其实参数大致跟3.4.2保持一致,只不过可以更加灵活的指定目录

3.5 网络管理

3.5.1 网络基本模型

在这里插入图片描述

模式使用方法说明
bridge [桥接式网络(Bridge container A)]–network bridge桥接容器,除了有一块本地回环接口(Loopback interface)外,还有一块私有接口(Private interface)通过容器虚拟接口(Container virtual interface)连接到桥接虚拟接口(Docker bridge virtual interface),之后通过逻辑主机接口(Logical host interface)连接到主机物理网络(Physical network interface)。
桥接网卡默认会分配到172.17.0.0/16的IP地址段。
如果我们在创建容器时没有指定网络模型,默认就是(Nat)桥接网络,这也就是为什么我们在登录到一个容器后,发现IP地址段都在172.17.0.0/16网段的原因。
host [开放式容器(Open container)]–network host比联盟式网络更开放,我们知道联盟式网络是多个容器共享网络(Net),而开放式容器(Open contaner)就直接共享了宿主机的名称空间。因此物理网卡有多少个,那么该容器就能看到多少网卡信息。我们可以说Open container是联盟式容器的衍生。
none [封闭式网络(Closed container)]–network none封闭式容器,只有本地回环接口(Loopback interface,和咱们服务器看到的lo接口类似),无法与外界进行通信。
container [联盟式网络(Joined container A | Joined container B ]–network container:c1(容器名称或容器ID)每个容器都各有一部分名称空间(Mount,PID,User),另外一部分名称空间是共享的(UTS,Net,IPC)。
由于它们的网络是共享的,因此各个容器可以通过本地回环接口(Loopback interface)进行通信。
除了共享同一组本地回环接口(Loopback interface)外,还有一块一块私有接口(Private interface)通过联合容器虚拟接口(Joined container virtual interface)连接到桥接虚拟接口(Docker bridge virtual interface),之后通过逻辑主机接口(Logical host interface)连接到主机物理网络(Physical network interface)。
3.5.2 网络基本命令
  • 网络帮助文档
docker network -h

在这里插入图片描述

  • 网络列表
docker network ls

在这里插入图片描述

  • 网络详情
docker inspect bridge
  • 其实还是可以通过上述的命令来查询有哪些容器使用了网络。
  • 还可以创建容器的时候 指定网络

3.6 DockerFile

DockerFile 是用来构建 Docker 镜像的构建文件,是由一系列命令参数构成的脚本

在这里插入图片描述

3.6.1 基本流程
  1. docker 从基础镜像运行一个容器
  2. 执行一条指令并对容器作出修改
  3. 执行类似 docker commit 的操作提交一个新的镜像层
  4. docker 再基于刚提交的镜像运行一个新的容器
  5. 执行 dockerfile 中的下一条指令直到所有指令都执行完成
3.6.2 编写Dockerfile 参数
指令说明
FROM基础镜像,当前新镜像是基于哪个镜像的,有继承的意味
MAINTAINER镜像维护者的姓名和邮箱地址
RUN容器构建时需要运行的命令
EXPOSE当前容器对外暴露的端口
WORKDIR指定在创建容器后,终端默认登录的进来工作目录,一个落脚点
ENV用来在构建镜像过程中设置环境变量
ADD将宿主机目录下的文件拷贝进镜像且 ADD 命令会自动处理 URL 和解压 tar 压缩包
COPY类似 ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置 COPY src dest COPY [“src”,“dest”]
VOLUME容器数据卷,用于数据保存和持久化工作
CMD指定一个容器启动时要运行的命令 Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
ENTRYPOINT指定一个容器启动时要运行的命令 ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数
ONBUILD当构建一个被继承的 Dockerfile 时运行命令,父镜像在被子继承后父镜像的 onbuild 被触发
3.6.3 根据Dockerfile 构建镜像
docker build -f dockerfile名称 -t 新建的镜像名:TAG .

4. 结束

  1. 上述内容就是针对docker大致总结。 后续想到新的docker知识还是会不停的补充.。
  2. 如果您觉得这边文章对您有作用,麻烦点击收藏。后续会不断的更新,填充。
  3. 如果您觉得有遗留 或是 有想知道的,欢迎在评论区留言,秒回哦
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值