Docker相关命令与入门
1. Docker 命令
# centos 7
systemctl start docker # 启动服务
systemctl stop docker
systemctl restart docker # 重启服务
systemctl status docker
systemctl enable docker # 开机自启动
1.1 镜像相关的命令
# 查看镜像
docker images
docker images -q # 查看所有的镜像ID
# 搜索镜像
docker search redis #可以直接去官网查看docker官方支持的镜像 hub.docker.com
# 拉取镜像
docker pull redis[: 版本号]
# 删除镜像
docker rmi IMAGEID
1.2 容器相关的命令
# 查看容器
docker ps -a # -a:查看所有的容器包括历史的
# 创建并启动容器
# -i:容器一直运行 -t:分配一个伪终端 --name:起名字
docker run -i -t --name=c1 image:版本 /bin/bash # 交互式容器
# -d:后台运行容器
docker run -i -d --name=c2 image:版本 # 守护式容器
# 退出容器 利用-it创建的容器exit后容器会立刻关闭
exit
# 进入容器
docker exec -i -t 容器名 /bin/bash
# 停止容器
docker stop 容器名
# 启动容器
docker start 容器名
# 删除容器(不能删除运行的容器)
docker rm 容器名
# 查看容器信息
docker inspect 容器名
1.3 容器的数据卷
1.3.1数据卷的概念和作用
-
Docker容器删除后,容器中产生的数据就不在了
-
Docker容器不可以和外部机器直接交换文件
-
容器之间的怎么数据交互? —>数据卷
- 数据卷是宿主机中的一个目录或文件
- 当容器目录和数据卷目录绑定之后,对方的修改会立即同步
- 一个数据卷可以被多个容器同时挂载
- 一个容器可以挂在多个数据卷
-
数据卷的作用
- 容器数据的持久化
- 外部机器和容器的间接通信
- 容器之间的数据交换
1.3.2 数据卷的配置
-
创建容器时,使用
-v
设置数据卷docker run ... -v 宿主机目录:容器内目录 [-v 宿主机目录:容器内目录]
-
注意:
- 目录必须时是绝对路径
- 如果目录不存在,会自动创建
- 可以挂在多个数据卷
-
通过多个容器挂载相同的数据卷,可以实现容器之间的数据交互
docker run -it --name=c3 -v /root/data:/root/data centos:7 docker run -it --name=c4 -v /root/data:/root/data centos:7# 容器中在挂在的目录修改添加文件后,两个容器的数据是同步的 echo hhhh>a.txt
1.3.3 数据卷容器
-
创建启动c3数据卷容器,使用
-v
参数设置数据卷docker run -it --name=c3 -v /volume centos:7-v /volume 没有指定宿主机的数据卷目录,docker会自动分配一个目录,可使用docker inspect c3查看
-
创建启动c1 c2容器,使用
–-volumes-from
挂载到容器c3docker run -it --name=c1 --volumes-from c3 centos:7 docker run -it --name=c2 --volumes-from c3 centos:7
-
此时c1 和c2 挂载到了c3上,c3挂载到了宿主机上,本质上是c1、c2、c3都挂载到了宿主机的同一个位置
2. Docker 应用部署
2.1 MySql部署
- 在Docker容器中部署MySQL,并通过外部mysql客户端操作MySQL Server
问题:
- 容器内的网络服务和外部机器是不能直接通信的
- 外部机器和宿主机可以直接通信
- 容器和宿主机可以直接通信
解决方式:端口映射
当容器中的网络服务需要被外部机器访问时,可以将容器中提供服务的端口映射到宿主机的端口上。外部机器就可以通过访问宿主机的端口,从而访问容器的服务
步骤:
-
搜索镜像
docker search mysql
-
拉取镜像
docker pull mysql:5.6
-
创建容器、设置端口映射、目录映射(数据卷)
#先在宿主机/root目录下创建一个mysql目录,用于存储mysql数据信息 mkdir ~/mysql cd ~/mysql/
创建端口映射、数据卷
docker run -id \ # 以后台运行的方式创建容器 -p 3307:3306 \ # 端口映射 宿主端口:容器服务端口 --name=c_mysql \ -v $PWD/conf:/etc/mysql/conf.d \ # 必要的数据卷设置 -v $PWD/logs:/logs \ # 同上 -v $PWD/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ # 初始化root用户的密码 mysql:5.6 # 镜像以及版本的选择
进入容器
docker exec -it c_mysql /bin/bash
进入容器后就可以直接登录mysql,并进行mysql的相应操作了
此时可以在外部主机通过映射的端口访问到容器内了
-
操作容器
2.2 部署tomcat
mkdir ~/tomcat
cd ~/tomcat
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat
在宿主机器上创建HTML网页,例如创建在$PWD/test/index.html
浏览器访问:http://192.168.148.129:8080/test/index.html
2.3 部署redis
- 先是按照上述的命令下载redis某个版本(如5.0)的镜像,然后执行如下命令
docker run -id --name=c_redis -p 6379:6379 redis:5.0
3. Dockerfile
- 主要作用:用于制作Docker 镜像
3.1 Docker 镜像原理
-
镜像原理
- Docker镜像是由特殊的文件系统叠加而成
- 最底端是bootfs,使用宿主机的bootfs
- 第二层是root文件系统rootfs,称为base image
- 之后往上边叠加替他的镜像文件
- 统一文件系统技术将不同的层整合成一个文件系统,为这些层提供一个统一的视角,这样来隐藏多层的存在,在用户看来,,只存在一个文件系统
- 一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像是基础镜像
- 镜像是只读的,但是Docker可以加载一个可读写的文件系统作为容器,再整成新的镜像
3.2 Docker 镜像如何制作
-
容器转化为镜像
# 将一个容器转化为镜像 docker commit 容器id 镜像名称:版本号 # 镜像无法传输,因此需要将镜像转化为压缩文件以便于传输 docker save -o 压缩文件名称 镜像名称:版本号 # 将压缩文件解压为镜像 docker load -i 压缩文件名称
- docker 的容器转化为镜像时,只有容器内产生的文件或数据才会保存为镜像,
-
Dockerfile
制作-
书写Dockerfile可以优先抄写官网上的写法
-
Dockerfile关键字 关键字指南
写好Dockerfile文件
使用 docker bulid 命令 构建镜像,然后镜像被压缩后就可以传输给别的使用者
docker build -f dockerfile文件路径 -t 镜像名称:版本 .
Dockerfile案例实践:
自定义一个centos7镜像,要求:
- 默认登录路径为 :
/usr
- 可以使用
vim
Dockerfile文件如下:
# dockerfile 注意dockerfile中需要的镜像资源,本机如果有就会使用本机的 # 若本机没有会自动下载 FROM centos:7 MAINTAINER dzc<12345@qq.com> RUN yum install -y vim WORKDIR /usr CMD /bin/bash
#docker bulid 构建镜像 # -f docker文件路径 # -t 镜像名称:版本号 # .搜索路径 docker build -f ./centos_dockerfile -t centos_with_vim:1.0 .
docker build
最后的.
号,其实是在指定镜像构建过程中的上下文环境的目录# 由镜像创建并启动容器,即可进入 docker run -it --name=centos_vim centos_with_vim:1.0
-
4. Docker 服务编排
4.1 服务编排概念
在
docker-compose.yml
文件中定义各个容器之间的关系、启动顺序等
4.2 docker-compose
安装
# 二进制包的方式安装到linux中(命令多试几次就行了)
curl -L https://github.com/docker/compose/release/download/1.22.0/docker-compose-`uname-s`-`uname-m` -o /usr/local/bin/docker-compose
# 设置文件的可执行权限
chmod +x /usr/local/bin/docker-compose
# 查看版本
docker-compose --version
4.3 一个docker-compose.yml的示例 视频讲解
5. Docker 私有仓库
5.1 私有仓库搭建(照着执行就可以)
5.2 将镜像传到私有仓库
①先给镜像打标签Tag(标记镜像为私有仓库的镜像)
# 查看有啥镜像
docker iamges
>>---------------------------虚线下为终端输出
REPOSITORY TAG IMAGE ID CREATED SIZE
centos_with_vim 1.0 087e14c3fff7 About an hour ago 477MB
nginx latest 605c77e624dd 19 months ago 141MB
tomcat latest fb5657adc892 19 months ago 680MB
redis 5.0 c5da061a611a 19 months ago 110MB
mysql 5.6 dd3b2a5dcb48 19 months ago 303MB
registry latest b8604a3fe854 20 months ago 26.2MB
centos 7 eeb6ee3f44bd 22 months ago 204MB# 打标签(勿忘端口号)
docker tag centos_with_vim:1.0 192.168.148.129:5000/centos_vim# 再查看下镜像
docker iamges
>>---------------------------虚线下为终端输出
REPOSITORY TAG IMAGE ID CREATED SIZE
centos_with_vim 1.0 087e14c3fff7 About an hour ago 477MB
192.168.148.129:5000/centos_vim latest 087e14c3fff7 About an hour ago 477MB
nginx latest 605c77e624dd 19 months ago 141MB
tomcat latest fb5657adc892 19 months ago 680MB
redis 5.0 c5da061a611a 19 months ago 110MB
mysql 5.6 dd3b2a5dcb48 19 months ago 303MB
registry latest b8604a3fe854 20 months ago 26.2MB
centos 7 eeb6ee3f44bd 22 months ago 204MB
②push到私有仓库
docker push 192.168.148.129:5000/centos_vim
>>>----------------------------------------
Using default tag: latest
The push refers to repository [192.168.148.129:5000/centos_vim]
5f70bf18a086: Pushed
e125f7c01fa0: Pushed
174f56854903: Pushed
latest: digest: sha256:eadf3fbeaabf26be9b490a31dcd395899a2025deee37fa5be0045a7df30f7a39 size: 947
5.3 拉取私有仓库的镜像到本地
# 192.168.148.129:5000/centos_vim 分别是私有仓库的地址和端口以及其镜像的名称docker pull 192.168.148.129:5000/centos_vim
6. Docker 相关概念
如果本文对您有用,可以点赞、收藏本文哦,下次用到时就好找多了
如果能关注作者就太好了,作者将持续学习,持续输出,持续分享!谢谢鼓励!
相关文章:

Docker相关命令与入门
1. Docker 命令 # centos 7 systemctl start docker # 启动服务 systemctl stop docker systemctl restart docker # 重启服务 systemctl status docker systemctl enable docker # 开机自启动1.1 镜像相关的命令 # 查看镜像 docker images docker images -q # 查看…...

如何配置一个永久固定的公网TCP地址来SSH远程树莓派?
文章目录 如何配置一个永久固定的公网TCP地址来SSH远程树莓派?前置条件命令行使用举例:修改cpolar配置文件 1. Linux(centos8)安装redis数据库2. 配置redis数据库3. 内网穿透3.1 安装cpolar内网穿透3.2 创建隧道映射本地端口 4. 配置固定TCP端口地址4.1 …...

Kubernetes架构和工作流程
目录 一、kubernetes简介 1.k8s的由来 2.为什么用 k8s ? 3.k8s主要功能 二、k8s集群架构与组件 1.Master 组件 1.1Kube-apiserver 1.2Kube-controller-manager 1.3Kube-scheduler 2.Node组件 2.1Kubelet 2.2Kube-Proxy 2.3docker 或 rocket 3.配置存储中…...

C语言赋值号的运算顺序
从右到左。 int & f(int & a) { printf("参数 %d\n", a); return a; } int main(void) {int a 9;int b 3;f(a) f(b);// 运行到此处,a 3,b 3return 0; } 输出...

fishing之第四篇使用案例一模拟登陆口
文章目录 一、访问钓鱼平台二、Sending Profiles(发件人邮箱配置)三、User&Groups(接收人邮件列表)四、Landing Pags(钓鱼页面配置)五、Email Templates(邮件内容配置)六、Campa…...

CS 144 Lab Six -- building an IP router
CS 144 Lab Six -- building an IP router 引言路由器的实现测试 对应课程视频: 【计算机网络】 斯坦福大学CS144课程 Lab Six 对应的PDF: Lab Checkpoint 5: building an IP router 引言 在本实验中,你将在现有的NetworkInterface基础上实现一个IP路由器…...

edge://settings/defaultbrowser default ie
Microsoft Edge 中的 Internet Explorer 模式 有些网站专为与 Internet Explorer 一起使用,它们具有 Microsoft Edge 等新式浏览器不支持的功能。 如果你需要查看其中的某个网站,可使用 Microsoft Edge 中的 Internet Explorer 模式。 大多数网站在新…...

Centos7安装jdk8教程——rpm安装
1. rpm文件下载 下载链接 Java SE 8 Archive Downloads (JDK 8u211 and later) 2.上传到服务器指定路径下并安装 切换到上传目录,然后执行以下命令 rpm -ivh jdk-8u221-linux-x64.rpm3. 设置环境变量并重载配置 # 设置环境变量 vim /etc/profile# 文件末尾添加…...

Node.js-path模块操作路径的基本使用
path模块提供了操作路径的功能,以下为常用的API。 path.resolve():拼接规范的绝对路径 const path require("path"); // 目录的绝对路径 // __dirname: D:\node\path const pathStr path.resolve(__dirname, "index.html"); // 拼…...

油猴脚本:验证码识别辅助器
脚本信息 描述:当鼠标放在验证码图片上时,显示弹窗并提供识别选项 实现逻辑 定义了一个isRectangle函数,用于判断图片是否符合验证码的特征。判断条件是:图片的宽高比大于1.5,宽度大于等于80且高度大于等于30&#…...

【力扣】24. 两两交换链表中的节点 <栈>
【力扣】24. 两两交换链表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:hea…...

C#中控件的invoke方法
https://www.exyb.cn/news/show-280348.html 在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在控件的事件响应函数中改变控件的状态,例如:某个按钮上的文本原先叫“打开”,单击之后按钮上的文本显示“关闭”࿰…...

x光下危险物品/违禁物品目标识别的模型训练与推理代码
前言 1.安检在公共场合的重要性不言而喻,保障群众人身安全是其首要任务。在各种场合,安检都是不可或缺的环节。x光安检机作为安检的重要工具,尽管其具有人工监控判断成像的特性,但是其局限性也十分明显。 为了解决这一局限性为出…...

基于Matlab实现图像融合技术(附上多个仿真源码+数据)
图像融合技术是一种将多幅图像融合为一幅图像的方法,使得这幅融合图像包含原始图像的所有信息。近年来,图像融合技术已经广泛应用于图像分割、变换和裁剪等领域。本文将介绍如何使用Matlab实现图像融合技术。 实现步骤 首先,我们需要了解图…...

国家级与省级开发区设立超长时间段数据(1970-2022年)
在基于因果推断方法的政策评估备受经济学研究欢迎的今天,将一个重要政策作为外生冲击进行计量建模这一做法,是很多顶刊论文的“宠儿”,大家整理分享的国家级与省级开发区设立超长时间段数据正是其中的代表。 我国各级人民ZF均将开发区设立作为…...
数据结构 10-排序4 统计工龄 桶排序/计数排序(C语言)
给定公司名员工的工龄,要求按工龄增序输出每个工龄段有多少员工。 输入格式: 输入首先给出正整数(≤),即员工总人数;随后给出个整数,即每个员工的工龄,范围在[0, 50]。 输出格式: 按工龄的递…...

SpringBoot复习:(16)TomcatStarter
直接在idea里运行SpringBoot程序时,内嵌的tomcat容器会调用TomcatStarter这个类的onStartup方法。TomcatStarter继承自ServletContainerInitializer 其onStartup方法会调用ServletContextInitializer(不是ServletContainerInitializer)的onStartup方法.…...

RISCV 5 RISC-V调用规则
RISCV 5 RISC-V调用规则 1 Register Convention1.1 Integer Register Convention1.2 Floating-point Register Convention 2. Procedure Calling Convention2.1 Integer Calling Convention2.2 Hardware Floating-point Calling Convention2.3 ILP32E Calling Convention2.4 Na…...

Spring Boot如何整合mybatis
文章目录 1. 相关配置和代码2. 整合原理2.1 springboot自动配置2.2 MybatisAutoConfiguration2.3 debug过程2.3.1 AutoConfiguredMapperScannerRegistrar2.3.2 MapperScannerConfigurer2.3.4 创建MapperFactoryBean2.3.5 创建MybatisAutoConfiguration2.3.6 创建sqlSessionFact…...

TypeScript中 interface 和 type 的区别
区别1 使用 interface 和 type 都是表示给定数据结构的常用方法。定义的方式略有不同。type 定义的时候有 “” 符号 interface User {name: string,age: number } type User {name: string,age: number }区别2 interface 可以多次声明同一接口。它们将合并在一起形成一个接…...

题解 | #B.Distance# 2023牛客暑期多校6
B.Distance 贪心(?) 题目大意 对于两个大小相同的多重集 A , B \mathbb{A},\mathbb{B} A,B ,可以选择其中任一元素 x x x 执行操作 x x 1 xx1 xx1 任意次数,最少的使得 A , B \mathbb{A},\mathbb{B} A,B 相同的操作次数记为 C ( A , B ) C(\m…...

【flink】开启savepoint
先启动一个任务 flink run -c com.yang.flink.CDCJob test-cdc.jar开启savepoint 命令: flink savepoint JobID 文件地址 flink savepoint e929a11d79bdc5e6f140f2cfb92e1335 file:///workspace/flinkSavepoints/backend这样就开启好了 操作中的错误 详细信…...

【C++】开源:事件驱动网络库libevent配置使用
😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍事件驱动库libevent配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下…...

业务测试——历史数据
业务测试历史数据的必要性 1.保留上一版本的呈现效果以及数据正确性 2.做发版前后数据、样式一致性校验 3.后端处理历史数据,覆盖各类场景,保证客户的现有数据不会被影响,造成线上事务 4.为测试过程的覆盖度以及产品迭代的质量保驾护航 如何…...

【Linux】计算机网络套接字编写
文章目录 前言TCP协议和UDP协议网络字节序socket接口sockaddr结构1.创建套接字 cs2.绑定端口号 s3.监听socket s4.接受请求 s5.建立连接 c 地址转换函数字符串转in_addrin_addr转字符串 recvfrom和sendto 前言 上篇文章我们学习了计算机网络分层,了解了网络通信的本…...

Maven-学习笔记
文章目录 1. Maven简介2.Maven安装和基础配置3.Maven基本使用4.Maven坐标介绍 1. Maven简介 概念 Maven是专门用于管理和构建Java项目的工具 主要功能有: 提供了一套标准化的项目结构提供了一套标准化的构建流程(编译,测试,打包,…...

WebGL Shader着色器GLSL语言
在2D绘图中的坐标系统,默认情况下是与窗口坐标系统相同,它以canvas的左上角为坐标原点,沿X轴向右为正值,沿Y轴向下为正值。其中canvas坐标的单位都是’px’。 WebGL使用的是正交右手坐标系,且每个方向都有可使用的值的…...

【Codeforces】 CF468C Hack it!
题目链接 CF方向 Luogu方向 题目解法 令 ∑ i 1 1 e 18 f ( i ) ≡ g ( g < a ) ( m o d a ) \sum_{i1}^{1e18}f(i)\equiv g(g<a)(mod \;a) ∑i11e18f(i)≡g(g<a)(moda) 那么 ∑ i 2 1 e 18 1 f ( i ) ≡ g 1 \sum_{i2}^{1e181}f(i)\equiv g1 ∑i21e181f…...

FFmpeg常见命令行(一):FFmpeg工具使用基础
前言 在Android音视频开发中,网上知识点过于零碎,自学起来难度非常大,不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》。本文是Android音视频任务列表的其中一个, 对应的要学习的内容是:FFmpe…...

Mock.js的基本使用方法
官网网址:Mock.js (mockjs.com) 当前端工程师需要独立于后端并行开发时,后端接口还没有完成,那么前端怎么获取数据? 这时可以考虑前端搭建web server自己模拟假数据,这里我们选第三方库mockjs用来生成随机数据…...