【Docker】入门到精通(常用命令解读)

一、准备工作

1.配置Docker的yum库

首先要安装一个yum工具

yum install -y yum-utils

安装成功后,执行命令,配置Docker的yum源:

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

2.安装Docker

执行命令,安装Docker

yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

3.启动和校验

# 启动Docker
systemctl start docker# 停止Docker
systemctl stop docker# 重启
systemctl restart docker# 设置开机自启
systemctl enable docker# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps

4.配置镜像加速

4.1注册阿里云账号

首先访问阿里云网站: https://www.aliyun.com/ 注册一个账号。

4.2开通镜像服务

在首页的产品中,找到阿里云的容器镜像服务

在这里插入图片描述

点击后进入控制台:

在这里插入图片描述

首次可能需要选择立刻开通,然后进入控制台。

4.3.配置镜像加速

找到镜像工具下的镜像加速器

在这里插入图片描述
页面向下滚动,即可找到配置的文档说明:
在这里插入图片描述
具体命令如下:

# 创建目录
mkdir -p /etc/docker# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF# 重新加载配置
systemctl daemon-reload# 重启Docker
systemctl restart docker

二、准备工作

1.常见的命令介绍

命令说明文档地址
docker pull拉取镜像docker pull
docker push推送镜像到DockerRegistrydocker push
docker images查看本地镜像docker images
docker rmi删除本地镜像docker rmi
docker run创建并运行容器(不能重复创建)docker run
docker stop停止指定容器docker stop
docker start启动指定容器docker start
docker restart重新启动容器docker restart
docker rm删除指定容器docs.docker.com
docker ps查看容器docker ps
docker logs查看容器运行日志docker logs
docker exec进入容器docker exec
docker save保存镜像到本地压缩文件docker save
docker load加载本地压缩文件到镜像docker load
docker inspect查看容器详细信息docker inspect

用一副图来表示这些命令的关系:
在这里插入图片描述
补充:

默认情况下,每次重启虚拟机我们都需要手动启动Docker和Docker中的容器。通过命令可以实现开机自启:

# Docker开机自启
systemctl enable docker# Docker容器开机自启
docker update --restart=always [容器名/容器id]

2.演示

以Nginx为例给大家演示上述命令:DockerHub网址:https://hub-stage.docker.com/search

第1步,去DockerHub查看nginx镜像仓库及相关信息

在这里插入图片描述

第2步,拉取Nginx镜像
docker pull nginx

在这里插入图片描述

第3步,查看镜像
docker images

在这里插入图片描述

# 第4步,创建并允许Nginx容器
docker run -d --name nginx -p 80:80 nginx

在这里插入图片描述

命令说明:

  • d : 表示容器后台运行
  • --name :容器名,可以任意,不可重复
  • -p :端口映射,前面80表示宿主机的端口,后面80表示容器的端口,容器是隔离环境,即容器内不做端口映射是无法访问到的,上述映射关系即所有请求到宿主机80端口的请求会转发到容器的80端口
    nginx : 前面加载的镜像名
第5步,查看运行中容器
docker ps

在这里插入图片描述

# 也可以加格式化方式访问,格式会更加清爽
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"
第6步,停止容器
docker stop nginx
第7步,再次启动nginx容器
docker start nginx
第8步,查看容器详细信息
docker inspect nginx
第9步,进入容器,查看容器内目录
docker exec -it nginx bash

在这里插入图片描述

第10步,删除容器
docker rm nginx
发现无法删除,因为容器运行中,强制删除容器
docker rm -f nginx

3.命令别名

给常用Docker命令起别名,方便我们访问:

# 修改/root/.bashrc文件
vi /root/.bashrc
内容如下:
# .bashrc# User specific aliases and functionsalias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'# Source global definitions
if [ -f /etc/bashrc ]; then. /etc/bashrc
fi

然后,执行命令使别名生效

source /root/.bashrc

现在,就可以使用快捷命令查看镜像和容器了:
在这里插入图片描述

三、数据卷

数据卷(volume)是一个虚拟目录,是容器内目录宿主机****目录之间映射的桥梁。类似与宿主机与容器端口映射

以Nginx为例,我们知道Nginx中有两个关键的目录:

  • html:放置一些静态资源
  • conf:放置配置文件

如果我们要让Nginx代理我们的静态资源,最好是放到html目录;如果我们要修改Nginx的配置,最好是找到conf下的nginx.conf文件。

但遗憾的是,容器运行的Nginx所有的文件都在容器内部。所以我们必须利用数据卷将两个目录与宿主机目录关联,方便我们操作。如图:

在这里插入图片描述

在上图中:

  • 我们创建了两个数据卷:confhtml
  • Nginx容器内部的conf目录和html目录分别与两个数据卷关联。
  • 而数据卷conf和html分别指向了宿主机的/var/lib/docker/volumes/conf/_data目录和/var/lib/docker/volumes/html/_data目录

这样以来,容器内的confhtml目录就 与宿主机的confhtml目录关联起来,我们称为挂载。此时,我们操作宿主机的/var/lib/docker/volumes/html/_data就是在操作容器内的/usr/share/nginx/html/_data目录。只要我们将静态资源放入宿主机对应目录,就可以被Nginx代理了。

3.1.数据卷命令

命令说明文档地址
docker volume create创建数据卷docker volume create
docker volume ls查看所有数据卷docs.docker.com
docker volume rm删除指定数据卷docs.docker.com
docker volume inspect查看某个数据卷的详情docs.docker.com
docker volume prune清除数据卷docker volume prune

注意:容器与数据卷的挂载要在创建容器时配置,对于创建好的容器,是不能设置数据卷的。而且创建容器的过程中,数据卷会自动创建

演示环节:演示一下nginx的html目录挂载:

1.首先查看以下已有的数据集
docker volume ls

容器默认创建的数据卷:

在这里插入图片描述

2.然后创建一个自己的数据卷
docker volume create html
# 查看数据卷
docker volume ls

在这里插入图片描述

3.创建容器并指定数据卷,注意通过 -v 参数来指定数据卷
docker run -d --name qknginx -p 80:80 -v html:/usr/share/nginx/html nginx

在这里插入图片描述
命令说明:

  • -v : 表示数据卷挂载
  • html :之前创建的数据卷
  • /usr/share/nginx/html :qknginx这个容器内的映射路径,容器的所有数据卷映射路径都在宿主机的/var/lib/docker/volumes目录下
 cd /var/lib/docker/volumes/html/_data/

在这里插入图片描述

3.查看数据卷详情
docker volume inspect html

在这里插入图片描述

查看容器详情:

 docker inspect qknginx

可以看到数据卷挂载情况:

在这里插入图片描述

也可以进入到容器里相应的目录下查看:
在这里插入图片描述
可以看到宿主机目录下文件和容器内文件一模一样,可以宿主机内修改文件,查看页面情况。

3.2.挂载本地目录或文件

上述情况演示的是数据卷挂载的一种方式,我们也可以在创建运行容器的时候直接把本地路径与容器路径做映射:

演示,删除并重新创建mysql容器,并完成本地目录挂载:

  • 挂载/root/mysql/data到容器内的/var/lib/mysql目录

  • 挂载/root/mysql/init到容器内的/docker-entrypoint-initdb.d目录(初始化的SQL脚本目录)

  • 挂载/root/mysql/conf到容器内的/etc/mysql/conf.d目录(这个是MySQL配置文件目录)

    3.2.1 本地先创建3个目录
    mkdir -p /mysql/data
    mkdir -p /mysql/init
    mkdir -p /mysql/conf
    
    3.2.2 创建容器并挂载数据卷
    1.删除原来的MySQL容器
    docker rm -f mysql
    
    2.进入root目录
    cd ~
    
    3.创建并运行新mysql容器,挂载本地目录
    docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=1234 \-v ./mysql/data:/var/lib/mysql \-v ./mysql/conf:/etc/mysql/conf.d \-v ./mysql/init:/docker-entrypoint-initdb.d \mysql
    
    4.查看root目录,可以发现~/mysql/data目录已经自动创建好了
    ll mysql
    
    结果:
    总用量 4
    drwxr-xr-x. 2 root    root   20 5月  19 15:11 conf
    drwxr-xr-x. 7 polkitd root 4096 5月  19 15:11 data
    drwxr-xr-x. 2 root    root   23 5月  19 15:11 init
    

    使用navicat连接工具查看:数据库初始化完成(备注:我在mysql/init和/mysql/config目录下放了自己的一些初始化数据,你也可以放一些自己初始化数据到相应的目录下)

在这里插入图片描述

四、镜像

前面我们一直在使用别人准备好的镜像,那如果我要部署一个Java项目,把它打包为一个镜像该怎么做呢?

举个例子,我们要从0部署一个Java应用,大概流程是这样:

  • 准备一个linux服务(CentOS或者Ubuntu均可)

  • 安装并配置JDK

  • 上传Jar包

  • 运行jar包
    那因此,我们打包镜像也是分成这么几步:

    • 准备Linux运行环境(java项目并不需要完整的操作系统,仅仅是基础运行环境即可)

    • 安装并配置JDK

    • 拷贝jar包

    • 配置启动脚本

4.1.提前准备好一个基础镜像

在这里插入图片描述

4.2.加载镜像文件

docker load -i jdk.tar

在这里插入图片描述

4.3.制作DockerFile

在这里插入图片描述

# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

4.4.构建镜像

docker build -t qkjdk:202424 .

命令说明:

  • docker build : 就是构建一个docker镜像
  • -t qkjdk:202424-t参数是指定镜像的名称(repositorytag
  • . : 最后的点是指构建时Dockerfile所在路径,由于我们进入了demo目录,所以指定的是.代表当前目录,也可以直接指定Dockerfile目录:
    • # 直接指定Dockerfile目录
      docker build -t qkjdk:202424 /home/qk
      

在这里插入图片描述

4.4.查看构建的镜像

docker images

在这里插入图片描述

4.5.然后尝试运行该镜像

docker run -d --name kk -p 8080:8080 qkjdk:202424

在这里插入图片描述

4.6.最后,导出镜像文件

docker export -o testjdk.tar kk

命令说明:

  • docker export: 就是导出docker镜像
  • -o testjdk.tar-o参数tar文件的名称
  • kk : 最后的kk就是容器名称

在这里插入图片描述

可以看出镜像文件已经被导出为testjdk.tar

4.7.重新加载运行导出的镜像

docker import testjdk.tar bsp-as-is:2024jdk

命令说明:

  • docker import: 就是导入docker镜像文件
  • testjdk.tar :镜像文件压缩包文件的名称
  • bsp-as-is:2024jdk : repositorytag
# 1.使用下面的命令创建并运行容器
docker run -itd --name qkjdk bsp-as-is:2024jdk /bin/bash
# 2.查看运行的容器
docker ps
# 结果
CONTAINER ID   IMAGE               COMMAND                  CREATED             STATUS             PORTS                                                  NAMES
ab55427e7d1e   bsp-as-is:2024jdk   "/bin/bash"              8 seconds ago       Up 7 seconds                                                              qkjdk
c60db535f84d   mysql               "docker-entrypoint.s…"   About an hour ago   Up About an hour   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   qkmysql
b2b17b941c44   nginx               "/docker-entrypoint.…"   3 hours ago         Up 3 hours         0.0.0.0:80->80/tcp, :::80->80/tcp                      qknginx
# 3.进入容器
docker exec -it qkjdk bash

在这里插入图片描述

注意:Docker容器运行错误分析

当您在运行Docker容器时出现"docker: Error response from daemon: No command specified"错误时,这意味着您没有在命令中指定容器要运行的命令。每个容器都需要一个命令来执行,否则Docker将无法启动容器。

在这里插入图片描述

解决方法
要解决这个问题,您需要在运行容器时指定要在其中执行的命令。

以下是几个示例:1.运行一个交互式的容器
如果您希望在容器中运行交互式命令行会话,可以使用it选项来启动容器,并在命令中指定要运行的Shell:

docker run -itd --name qkjdk bsp-as-is:2024jdk /bin/bash

这将在容器中启动一个交互式的Bash会话。

五、网路

容器是隔离环境,在创建容器的时候,容器会创建一个默认的网桥:

 docker inspect qkjdk

在这里插入图片描述

同一网段的容器之间可以相互访问,但是不同网段的容器就无法访问,此时就需要自定义一个网桥,同一网桥下的容器之间可以相互访问

网络常见命令有:

命令说明文档地址
docker network create创建一个网络docker network create
docker network ls查看所有网络docs.docker.com
docker network rm删除指定网络docs.docker.com
docker network prune清除未使用的网络docs.docker.com
docker network connect使指定容器连接加入某网络docs.docker.com
docker network disconnect使指定容器连接离开某网络docker network disconnect
docker network inspect查看网络详细信息docker network inspect
5.1.当前宿主机下的所有网桥:

在这里插入图片描述

5.2.创建一个网桥
docker network create qqnet
5.3.为容器分配一个网桥
docker network connect qknet qkjdk

命令说明:

总结

  • 在自定义网络中,可以给容器起多个别名,默认的别名是容器名本身
  • 在同一个自定义网络中的容器,可以通过别名互相访问

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/453000.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之MenuItem组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之MenuItem组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、MenuItem组件 TextClock组件通过文本将当前系统时间显示在设备上。支持不同时…

Docker Dockerfile

1、概念介绍 Dockerfile是用来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本。 每条保留字指令都必须为大写字母且后面要跟随至少一个参数 指令按照从上到下&#xff0c;顺序执行 #表示注释 每条指令都会创建一个新的镜像层并对镜像进…

2024数学建模美赛F题Reducing Illegal Wildlife Trade原创论文讲解(含完整python代码)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了数学建模美赛本次F题目非法野生动物贸易完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 F题论文共42页&…

EtherCAT转ModbusTCP网关

一、功能概述 1.1设备简介 本产品是EtherCAT和Modbus TCP网关&#xff0c;使用数据映射方式工作。 本产品在EtherCAT侧作为EtherCAT从站&#xff0c;接TwinCAT、CodeSYS、PLC等&#xff1b;在ModbusTCP侧做为ModbusTCP主站&#xff08;Client&#xff09;或从站&#xff08;…

项目02《游戏-04-开发》Unity3D

基于 项目02《游戏-03-开发》Unity3D &#xff0c; 因前三集资源以及代码冗余问题&#xff0c;本次项目对前三集进行了重做&#xff0c;资源及代码如下&#xff0c; 首先导入场景及人物资源&#xff0c; 为人物添加动画控制器Animator组件&#xff0c; 创建动画控…

【算法与数据结构】583、72、LeetCode两个字符串的删除操作+编辑距离

文章目录 一、583、两个字符串的删除操作二、72、编辑距离三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、583、两个字符串的删除操作 思路分析&#xff1a;本题的思路和115、不同的子序列差不多&#xff0c;只是变成…

C#获取当前CPU,内存使用详情及常用WMI查询语句

1&#xff0c;获取当前CPU使用率&#xff08;需添加System.Management.dll&#xff09;&#xff1a; string queryStr "select * from win32_processor";System.Management.ManagementObjectSearcher searcher new System.Management.ManagementObjectSearcher(qu…

【MATLAB源码-第132期】基于matlab的淘金优化算法(GRO)无人机三维路径规划,输出做短路径图和适应度曲线

操作环境&#xff1a; MATLAB 2022a 1、算法描述 淘金优化算法&#xff08;GoldRush Optimizer&#xff0c;简称GRO&#xff09;是一种启发式优化算法&#xff0c;它受到淘金过程的启发。在淘金过程中&#xff0c;淘金者在河流或矿区中寻找金矿&#xff0c;通过筛选沙砾来寻…

数据库学习笔记2024/2/4

随笔 1. 为什么学? 认识数据,熟悉数据,掌握数据。 进企业必备技能。 2. 怎么学? 1、MySQL数据库就是存储和管理数据的一个大型软件,这个软件有一个专门的语言叫SQL,主要学的是SQL语言,但想要达到企业用人标准,就还得学会熟练使用MySQL这个软件。 2、学习分三阶段: 一. …

mysql:事务的特性ACID、并发事务(脏读、不可重复读、幻读、如何解决、隔离级别)、undo log和redo log的区别、相关面试题和答案

事务是一组操作的集合&#xff0c;它会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 事务的特性&#xff08;ACID&#xff09; 原子性&#xff08;Atomicity&#xff09;&#xff1a;事务是不可分割的…

Angular BaseView抽离页面公用属性

前言 如果有一系列的页面布局很类似&#xff0c;为了节省时间&#xff0c;我们可以把这些类似的页面所通用的属性和方法抽离成一个BaseView&#xff0c;让其它页面继承该基础页面&#xff0c;同时将一些经常改变的属性和差异的属性写到配置文件里。例如树容器初始时是否展开、…

问题:下列哪些属于历史文化资源的特征( ). #学习方法#学习方法

问题&#xff1a;下列哪些属于历史文化资源的特征( ). A、稀缺性 B、脆弱性 C、可再生性 D、多样性 参考答案如图所示