Docker学习(带图详细)

一、安装docker

参考官方文档:https://docs.docker.com/engine/install/centos/

查看系统版本

[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@localhost ~]# 
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# 

1.卸载docker旧版本

yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine

image.png

2.配置Docker的yum库

首先要安装一个yum工具

yum install -y yum-utils

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

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

image.png

3.安装Docker

最后,执行命令,安装Docker

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

image.png
查看安装的版本

docker -v

image.png

4.启动和校验

# 启动Docker
systemctl start docker# 查看Docker的状态
systemctl status docker# 停止Docker
systemctl stop docker# 重启
systemctl restart docker# 设置开机自启
systemctl enable docker# 关闭开机自启动
systemctl disable docker# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps

5.配置镜像加速

这里以阿里云镜像加速为例。

5.1 注册阿里云账号

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

5.2 开通镜像服务

在首页的产品中,找到阿里云的容器镜像服务
image.png
点击后进入控制台:
image.png
首次可能需要选择立刻开通,然后进入控制台。

5.3 配置镜像加速

找到镜像工具下的镜像加速器
image.png
具体命令

# 创建目录
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# 查看配置是否生效
docker info|grep Mirrors -A 1

image.png

二、了解镜像和容器

1.镜像和容器

DockerHub:https://hub-stage.docker.com/

官方(需要翻墙):https://hub.docker.com/
image.png

2.命令解读

以mysql为例:

docker run -d \--name mysql \-p 3306:3306 \ -e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \mysql

image.png

3.镜像命名规范

image.png
image.png

三、快速入门

1.常见命令

官方文档:https://docs.docker.com/

image.png

2.实践案例一

2.1 案例需求

image.png

2.2 搜索镜像

https://hub-stage.docker.com/
image.png
image.png
进入官方的
image.png
或者

https://hub.docker.com/u/library

image.png

或者命令搜索

#搜索镜像:从网络中查找需要的镜像
docker search 镜像名称例如:
docker search dvwa

image.png

2.3 拉取镜像

docker输入这个命令进行拉取镜像

docker pull nginx

image.png

2.4 查看镜像

docker images

image.png

2.5 保存镜像到本地

保存镜像到本地

查看帮助
docker save -o --help保存镜像
docker save -o nginx.tar nginx:latest

image.png

2.6 删除镜像

docker rmi 镜像名:版本例如:
docker rmi nginx:latest

image.png

2.7 本地拉取镜像

查看帮助
docker load --help本地拉取镜像
docker load -i nginx.tar
或者
docker load -i nginx.tar -q

image.png

2.8 创建容器

docker run -d --name nginx -p 80:80 nginx-i,以交互模式运行容器,通常与 -t 同时使用
-t,启动容器后,为容器分配一个命令行,通常与-i同时使用
-v,目录映射,容器目录挂载到宿主机目录,格式: <host目录>:<容器目录>
-d,守护进程,后台运行该容器
-p,指定端口映射,格式:主机(宿主)端口:容器端口
-P,随机端口映射,容器内部端口随机映射到主机的端口
-u,以什么用户身份创建容器
--name "nginx-lb",容器名字
-m, --memory bytes,设置容器使用内存最大值
-h, --hostname string,指定容器的 host name
--dns 8.8.8.8,指定容器 dns 服务器
-e username="ritchie",设置环境变量
--restart,Docker 重启后,容器是否自动重启
--privileged,容器内是否使用真正的 root 权限

image.png

2.9 查看容器

docker ps :会列出出正在运行的容器信息。
docker ps -a :会列出当前服务器中所有的容器,无论是否在运行。CONTAINER ID:每个容器的唯一标识符号,自动生成。类似于数据库中的主键。
IMAGE :创建容器使用的镜像名称。
COMMAND:运行容器时的命令。
CREATED:容器创建的时间。
STATUS:容器的运行状态,Up 17 hours 指容器已运行17小时。
docker ps -s:会列出容器的文件大小(容器增加的大小/容器的虚拟大小)docker ps -q:仅列出CONTAINER ID 字段
如批量停止所有容器:docker stop docker ps -a -qdocker ps -l: 显示最后一个运行的容器(无论该容器目前处于什么状态)
docker ps -n 数量x:显示最后 x 个运行容器,当x为1时和 -l 含义相同。(无论该容器目前处于什么状态)docker ps --no-trunc:不对输出进行截断操作,此时可以看到完整的COMMAND,CONTAINER IDdocker -f :使用过滤器来过滤输出
目前支持过滤器:
id (容器的id)
label
name(容器名称)
exited (整数-容器退出状态码,只有在使用-all才有用)
status 容器状态(created,restarting,running,paused,exited,dead)
ancestor 过滤从指定镜像创建的容器
before (容器的名称或id),过滤在给定id或名称之后创建的容器
isolation (default process hyperv) (windows daemon only)
volume (数据卷名称或挂载点),–过滤挂载有指定数据卷的容器
network(网络id或名称),过滤连接到指定网络的容器示例:
docker ps -f status=exited
docker ps -f ancestor=597ce1600cf4 -f status=exited -adocker ps --formart {{.Names}}:以go的形式格式化输出列表
go模板
.ID 容器的ID
.Image 镜像的ID
.Command 容器启动的命令
.CreatedAt 创建容器的时间点
.RunngingFor 从容器创建到现在过去的时间
.Ports 暴露的端口
.Status 容器的状态
.Size 容器硬盘的大小
.Names 容器的名称
.Label 指定label的值
.Mounts 挂载到这个容器的数据卷名称示例:
docker ps --formart {{.Names}}---{{.Image}}
docker ps
或者查看所有的容器
docker ps -a自定义查看容器信息
docker ps --format "table {{.ID}}\t{{.Image}}\{{.Ports}}\t{{.Status}}\t{{.Names}}"

image.png
image.png

2.10 停止容器

# 停止一个容器
docker stop 容器i或者容器名# 停止所有容器
docker stop $(docker ps -q)
  • docker ps -q:列出所有运行中容器的ID。
  • docker stop:停止一个或多个运行中的容器。

示例一:

docker stop nginx

image.png

示例二:

2.11 启动容器

docker start nginx

image.png

2.12 查看日志

docker logs nginx或者一直查看
docker logs -f nginx

image.png

2.13 进入容器

说明:-it参数是可交互的模式    bash是命令行模式
docker exec -it nginx bash

image.png

2.14 退出容器

exit

image.png

2.15 删除容器

删除所有容器

docker rm $(docker ps -aq)
  • docker ps -aq:列出所有容器(包括未运行的)的ID。
  • docker rm:移除一个或多个容器。

删除单个容器

docker rm 容器id(或者容器名)
或者用-f操作强制删除
docker rm -f 容器id(或者容器名)

示例一:

docker rm nginx注意:
删除容器的时候,如果不强行删除的话,需要先停止容器
docker stop nginx

image.png
示例二:

docker rm $(docker ps -aq)

image.png

四、配置Docker国内源

可用源
●Docker 官方中国区:https://registry.docker-cn.com
●网易:http://hub-mirror.c.163.com
●中国科技大学:https://docker.mirrors.ustc.edu.cn
●阿里云:https://y0qd3iq.mirror.aliyuncs.com

1.配置源文件

增加Docker的镜像源配置文件 /etc/docker/daemon.json
如果没有配置过镜像源该文件默认是不存在的

vim /etc/docker/daemon.json

在其中增加如下内容

{
"registry-mirrors": ["https://registry.docker-cn.com"]
}

2.重启docker

service docker restart

3.查看配置是否生效

docker info|grep Mirrors -A 1

五、逻辑卷

1.图解

image.png

2.基本命令

image.png

查看命令帮助信息
docker volume --help

image.png

3.实践案例二

image.png

3.1 创建逻辑卷和容器

docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx

image.png

3.2 查看逻辑卷位置

docker volume ls查看具体位置
docker volume inspect html

image.png

image.png
那么以后在宿主机的这个目录下操作文件和在docker容器中操作是一样的效果

3.3 总结

image.png

4.实践案例三

image.png
mysql官方文档:https://hub-stage.docker.com/_/mysql

4.1 查看容器的详情

docker inspect 容器名(或者是ID)docker inspect nginx

主要看Mounts的配置信息
image.png

"Mounts": [{"Type": "volume","Name": "html","Source": "/var/lib/docker/volumes/html/_data","Destination": "/usr/share/nginx/html","Driver": "local","Mode": "z","RW": true,"Propagation": ""}],

image.png
image.png

4.2 挂载目录

image.png

docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
-v /root/mysql/conf:/etc/mysql/conf.d \
mysql

image.png
创建成功后
image.png
image.png

注意:在运行之前,需要创建这些目录

cd /rootmkdir mysqlcd mysqlmkdir datamkdir confmkdir init

image.png
在conf目录下创建配置文件hm.cnf,代码如下

[client]
default_character_set=utf8mb4
[mysql]
default_character_set=utf8mb4
[mysqld]
character_set_server=utf8mb4
collation_server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

然后在init目录下创建数据信息hmall.cnf
image.png

4.3 验证数据持久保存

先删除容器

docker rm -f mysql

无法在连接数据库
image.png
但是数据还在宿主机上
image.png

再次重新创建容器

docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
-v /root/mysql/conf:/etc/mysql/conf.d \
mysql

image.png
查看连接数据库,发现连接成功,并且数据都还在
image.png

六、自定义镜像

image.png
image.png
image.png

1.基础命令

官方文档:https://docs.docker.com/engine/reference/builder
image.png

2.构建解读

image.png
image.png

image.png

3.总结

image.png

七、网络

image.png

1.基本命令

image.png

2.创建网络

docker network create 网络名例如:
docker network create hm

image.png

3.查看网络

docker network ls

image.png

4.将容器添加到网络

docker network connect 网络名 容器名例如:
docker network connect hm mysql

image.png

5.查看容器信息

docker inspect mysql

image.png

八、Docker Compose

image.png
image.png

1.命令选项

build    —— 构建(重新构建)项目中的服务容器
config   —— 检测compose文件的错误
up       —— 启动服务
down     —— 停止容器
images   —— 列出项目中所包含的镜像
logs     —— 查看服务容器的日志
kill     —— 发送 SIGKILL 信号来强制停止服务容器
port     —— 查看某个容器端口所映射的公共端口
ps       —— 列出项目中目前的所有容器
restart  —— 重启项目中的服务
rm       —— 删除所有停止状态的服务容器
run      —— 在指定服务上运行一个命令
scale    —— 设置指定服务运行的容器个数
stop     —— 停止处于运行状态的容器
start    —— 启动被stop的服务容器
top      —— 查看各个服务容器内运行的进程
pause    —— 暂停一个服务容器
unpause  —— 恢复处于暂停状态中的服务

2.例子

version: "3.8"services:mysql:image: mysqlcontainer_name: mysqlports:- "3306:3306"environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123volumes:- "./mysql/conf:/etc/mysql/conf.d"- "./mysql/data:/var/lib/mysql"- "./mysql/init:/docker-entrypoint-initdb.d"networks:- newhmall:build:context: .dockerfile: Dockerfilecontainer_name: hmallports:- "8080:8080"networks:- newdepends_on:- mysqlnginx:image: nginxcontainer_name: nginxports:- "18080:18080"- "18081:18081"volumes:- "./nginx/nginx.conf:/etc/nginx/nginx.conf"- "./nginx/html:/etc/nginx/html"depends_on:- hmallnetworks:- new
networks:new:name: hmall

image.png

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

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

相关文章

华为OD机试 - 密码输入检测(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

后端项目开发笔记

Maven打包与JDK版本不对应解决方法 我这里使用jdk8。 <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configurat…

【适用全主题】WordPress原创插件:弹窗通知插件 支持内容自定义

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 适用于所有WordPress主题的弹窗插件 一款WordPress原创插件&#xff1a;弹窗通知插件 支持内容自定义 二、效果展示 1.部分代码 代码如下&#xff08;示例&#xff09;&#xff1…

BGP学习二:BGP通告原则,BGP反射器,BGP路径属性细致讲解,新手小白无负担

目录 一.AS号 二.BGP路由生成 1.network 2.import-route引入 三.BGP通告原则 1.只发布最优且有效的路由 2.从EBGP获取的路由&#xff0c;会发布给所有对等体 3.水平分割原则 4.IBGP学习BGP默认不发送给EBGP&#xff0c;但如果也从IGP学习到了这条路由&#xff0c;就发…

4. 分布式链路追踪客户端工具包Starter设计

前言 本文将从零搭建分布式链路追踪客户端工具包的Starter&#xff0c;并将在后续文章中逐步丰富支持的场景。这里首先将搭建一个最基础的Starter&#xff0c;能提供的功能和1. 看完这篇文章我奶奶都懂Opentracing了一文中的示例demo类似。 相关版本依赖如下。 opentracing-…

生成ssl证书并配置到nginx

生成ssl证书并配置到nginx 安装证书生成工具 apt-get update apt install software-properties-common add-apt-repository ppa:certbot/certbot apt-get update apt-get install certbot python3-certbot-nginx生成证书 首先在新网上创建一个A链接&#xff0c;域名与服务器做…

vue3 自定义国际化、elementPlus 国际化

自定义国际化 1. 引入 vue-i18n 插件 pnpm install vue-i18nnext 2. 页面添加语言文件目录&#xff0c;添加自定义的语言文件 3.语言目录里添加 index.ts&#xff0c; 内容如下 import { createI18n } from "vue-i18n";// 自定义语言文件 import zhCN from "…

WordPress中插入视频的两种方法详解

最近我在建设WordPress网站的时候需要上传视频&#xff0c;我使用的是Hostease的主机安装的WordPress&#xff0c;随后在咨询了他们的技术支持后获得了一些解决方法。下面将介绍WordPress中插入视频的两种方法&#xff1a;本地上传和外部引用。 本地上传视频 使用WordPress的古…

【eclipse】如何在IDE里创建一个Java Web项目?

如何在eclipse中创建一个动态Web项目并成功运行&#xff1f; 一、 最终效果 懒得写那么多了…我也不知道该怎么写了&#xff0c;有点乱&#xff0c;有问题可以在评论里留言&#xff0c;我看到会解决的&#xff0c;在这个过程中也踩到了一些坑&#xff0c;但好在有CSDN帮助解决…

利用知识图谱提升RAG应用的准确性

文章目录 一、关于 GraphRAG二、Neo4j环境配置三、数据提取四、RAG混合检索1、非结构化数据检索器2、图谱检索器3、最终的检索器 五、定义RAG Chain 本文转载自&#xff1a;lucas大叔 : 利用知识图谱提升RAG应用的准确性 https://zhuanlan.zhihu.com/p/692595027 英文原文&…

网页版五子棋的自动化测试

目录 前言 一、主要技术 二、测试环境的准备部署 三、测试用例 四、执行测试 4.1、公共类设计 创建浏览器驱动对象 测试套件 释放驱动类 4.2、功能测试 登录页面 注册页面 游戏大厅页面 游戏房间页面 测试套件结果 4.3、界面测试 登录页面 注册页面 游戏大…

密码学《图解密码技术》 记录学习 第十五章

目录 十五章 15.1本章学习的内容 15.2 密码技术小结 15.2.1 密码学家的工具箱 15.2.2 密码与认证 15.2.3 密码技术的框架化 15.2.4 密码技术与压缩技术 15.3 虚拟货币——比特币 15.3.1 什么是比特币 15.3.2 P2P 网络 15.3.3地址 15.3.4 钱包 15.3.5 区块链 15.3.…

web安全之登录框渗透骚姿势,新思路

不管漏洞挖掘还是挖SRC&#xff0c;登录框都是重点关注对象&#xff0c;什么漏洞都有可能出现&#xff0c; 本篇文章做个总结&#xff0c;后面发现新思路后会继续更新 万能密码 or 弱口令 SQL注入 水平越权 垂直越权 逻辑漏洞 短信轰炸 邮箱轰炸 信息泄露 验证码DOS XSS万能密…

React:Router-2. createBrowserRouter函数式

参考文档&#xff1a;ReactRouter官网 前边的文章 BrowserRouter组件式路由 提供了组件式路由的方式&#xff0c;在react-router6.4.0及以上版本&#xff0c;提供了 createBrowserRouter 函数式路由创建方式。 一、创建路由 1. 新建router.js文件&#xff0c;使用createBrow…

rac asm新增磁盘报0RA-15333或ORA-15075

虚拟化做的rac&#xff0c;发现原来加盘直接把sdb、sdc、sdd、sde加到asm里了&#xff0c;后面通过udev绑定的盘&#xff0c;增加到asm里就报错&#xff1a; [DBT-30007]Addition of disks to disk group DATA failed ORA-15032:not all alterations performed 0RA-15333: d…

迷宫中离入口最近的出口

题目链接 迷宫中离入口最近的出口 题目描述 注意点 maze[i][j] 要么是 ‘.’ &#xff0c;要么是 ‘’entrance.length 2entrance 一定是空格子出口的含义是 maze 边界上的空格子entrance格子不算出口 解答思路 广度优先遍历找到走i步时所能到达的所有节点位置&#xff0…

idea使用git不提示账号密码登录,而是输入token问题解决

idea 或者 webstream 等全家桶软件 使用git 推送代码时&#xff0c;不提示账号密码登录&#xff0c;而是输入token问题解决 你的代码仓库是gitlab 然后打开修改代码后推送时&#xff0c;会默认使用gitlab插件&#xff0c;所以提示数据token 解决方式就是把gitlab插件取消使用这…

ASP.NET MVC 如何使用 Form Authentication?

前言 .NET 的 Form Authentication 是一种基于表单的简单且灵活的身份验证机制&#xff0c;用户通过输入用户名和密码来登录应用程序&#xff0c;并且通过配置来控制用户访问权限。 在使用 Form Authentication 时&#xff0c;我们需要在 web.config 文件中配置身份验证和授权…

工业级路由器的穿透力是不是更强(原创科普)

今天我想和大家聊聊工业级路由器的一个重要特性——穿透力。作为一名从事工业网络通信的工程师,我发现很多用户在选择工业级路由器时,都会问到一个问题:"工业级路由器的穿透力是不是更强?"下面就让我来为大家解答这个疑问。当然如果有通信产品需要也可以关注星创易联…