docker容器的安装以及用法

server/2024/12/20 13:27:44/

1、了解docker

1.1、docker是什么

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

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

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)。

官方地址:docker地址

1.2、docker历史

2010年,几个搞IT的年轻人,就在美国成立了一家公司dotcloud做一些pass的云计算服务!
LXC有关的容器技术!他们将自己的技术(容器化技术)命名就是Docker!
Docker刚刚诞生的时候,没有引起行业的注意!(dotCloud就活不下去)
开源(开放源代码)
2013年,Docker开源!
Docker越来越多的人发现了docker的优点!就火了,Docker每个月都会更新一个版本!
2014年4月9日,Docker1.0发布!
Docker为什么这么火?十分的轻巧
容器技术出来之前,我们都是使用虚拟机技术!
虚拟机:在window中装一个Vmware,通过这个软件我们可以虚拟出来一台或者多台电脑!(很笨重)
虚拟机也是属于虚拟化技术,Docker容器技术,也是一种虚拟化技术!

2.docker的基本操作

2.1基本准备

这篇文章中我的运行环境都是在CentOS7中运行。

所以各位需要首先准备VMware Workstation Pro软件

1、去官网下载:VM官网

2、在官网下载可能会下载速度非常的慢, 所以这里给大家分享一个网盘(不是作者的网盘)

网盘地址

提取码:fmp2

下载安装后,还需要安装一台虚拟机,具体操作如下:

2.1.1 创建CentOS 

这里可以选择你适合的大小,推荐至少2GB

这里内存根据自己电脑适合的大小来选择,推荐至少20G

最后确定是不是刚刚选择的信息

进入这个页面表示成功创建,现在进行下一步操作

这边选择《 简体中文 

这一步一定需要选择,要不然进去后就看不到虚拟机的视图化,只有纯指令的页面,对于我们开发非常不便

选择完成后,就可以开始安装了

密码随意设置,我这里设置的是123456

出现这个页面,就代表我们的CentOS已经正在安装了,只需要等着结束即可

等进来之后,就是这个页面

这个时候,电脑是没有网络的,我们需要为他配置网络,可以查看以下博主的作品,质量非常高

CentOs配置网络

网络配置成功之后,就可以对虚拟机开始操作了

2.2、安装docker容器

2.2.1、docker基本组成

镜像(Image):

docker镜像就好比一个模板,我们可以通过这个模板来创建容器服务,tomcat镜像===>run==>tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。

容器(container):

docker利用容器技术,独立运行一个或者一组应用 通过镜像来创建

启动,停止,删除,基本命令!
目前就可以把这个容器理解为就是一个简易的linux系统

仓库(repository):

仓库就是存放 镜像(image)的地方!

仓库又可以分为 公有仓库和私有仓库

2.2.2、创建yum

首先安装一个yum工具

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

安装成功后,执行命令,配置Docker的yum源(已更新为阿里云源):

sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

 更新yum,建立缓存

sudo yum makecache fast

2.2.3、创建docker

如果项目中有旧的docker,请先删除

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

 如果从来没安装过docker,可以省略这一步,直接进行下一步安装docker

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

 启动和校验

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

镜像地址可能会变更,如果失效可以百度找最新的docker镜像。

配置镜像步骤如下:

# 创建目录
mkdir -p /etc/docker# 复制内容
tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["http://hub-mirror.c.163.com","https://mirrors.tuna.tsinghua.edu.cn","http://mirrors.sohu.com","https://ustc-edu-cn.mirror.aliyuncs.com","https://ccr.ccs.tencentyun.com","https://docker.m.daocloud.io","https://docker.awsl9527.cn"]
}
EOF# 重新加载配置
systemctl daemon-reload# 重启Docker
systemctl restart docker

此镜像可能不太好用,速度有点慢,可以去下方链接中查找最新的镜像

国内镜像链接

 推荐镜像:

#复制粘贴即可
echo '{"registry-mirrors": ["https://docker.1ms.run"]}' | sudo tee /etc/docker/daemon.json > /dev/null#刷新
systemctl daemon-reload#重启docker
systemctl restart docker

至此,整个docker的安装就完成了

2.3、docker快速入门

现在可以先安装一个MySQL,试一下我们的docker容器到底安装好了没

如果按传统的方式的话,分为以下几个步骤

(1):网站搜索MySQL的安装包并下载

(2):上传到linux环境中

(3):编译和配置环境

(4):安装并使用

而使用Docker安装,仅仅需要一步即可,在命令行输入下面的命令:

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

这样可以直接去网站上找到对应的MySQL版本进行下载

(--name):MySQL容器的名称(可改)

(-p):前面的3307指的是安装的MySQL端口(可改),后面的3306指的是默认端口(不可改)

(-e):第一个指时区,设置后可以防止我们时间与本地时间对不上(可改,但建议不改)

(-e):第二个指MySQL容器的密码,可以根据自己的需求更改(可改)

后面三个无需管,直接粘贴即可

最后的MySQL如果未写版本,那么默认就是下载最新的版本,所以可以根据需求进行更改

如果出现上面这种情况,表示我们的MySQL容器正常安装成功了,如果不是这种情况很可能是出现了问题

大家可以发现,当我们执行命令后,Docker做的第一件事情,是去自动搜索并下载了MySQL,然后会自动运行MySQL,我们完全不用插手,是不是非常方便。

而且,这种安装方式你完全不用考虑运行的操作系统环境,它不仅仅在CentOS系统是这样,在Ubuntu系统、macOS系统、甚至是装了WSL的Windows下,都可以使用这条命令来安装MySQL。

要知道,不同操作系统下其安装包、运行环境是都不相同的!如果是手动安装,必须手动解决安装包不同、环境不同的、配置不同的问题

而使用Docker,这些完全不用考虑。就是因为Docker会自动搜索并下载MySQL。注意:这里下载的不是安装包,而是镜像。镜像中不仅包含了MySQL本身,还包含了其运行所需要的环境、配置、系统级函数库。因此它在运行时就有自己独立的环境,就可以跨系统运行,也不需要手动再次配置环境了。这套独立运行的隔离环境我们称为容器

说明:

  • 镜像:英文是image

  • 容器:英文是container

那么,docker到底是从哪里去下载镜像的呢?

docker官网

点击这里就可以进入docker的官网了

2.3、常用指令

docker的指令是非常多的,所以是非常难记的,那么我们就可以查看官方文档来提高我们开发的效率

dockcer指令

2.3.1、命令介绍

其中,比较常见的命令有:

命令说明
docker images查看本地镜像

docker rmi

删除本地镜像

docker run

创建并运行容器(不能重复创建)

docker stop

停止指定容器

docker start

启动指定容器

docker restart

重新启动容器

docker rm

删除指定容器

docker ps

查看容器

docker logs

查看容器运行日志

docker exec

进入容器

docker save

保存镜像到本地压缩文件

docker load

加载本地压缩文件到镜像

docker inspect

查看容器详细信息

为了防止每次打开虚拟机都需要重启docker容器,所以我们在这里直接为它设置开机自启动

systemctl enable docker

 这样下次启动虚拟机后就无需再次打开docker了,非常方便

并且docker里面的容器也同样可以进行自启动,根据需求制定即可

docker update --restart=always [容器名/容器id]

 2.3.2、操作MySQL

刚刚我们安装了一个MySQL容器,现在查看它是否存在

使用命令:docker images,即可查看所有下载的镜像

docker images

 由于我的之前下载过其他的镜像,所以显示比较多,如果是第一次下载那么就只有一个MySQL镜像,不会有其他的

现在我们查看MySQL的容器是否存在

使用命令docker ps即可查看所有下载的容器,这里为什么一个也没有呢?

因为docker ps只是显示所有正在运行的容器,而我们没有对MySQL设置自启动,所以说他现在是未启动的状态,所以我们可以使用另一个指令,将启动和没启动的全查出来

docker ps -a

 (-a)指的是-all的简写,意思是所有都查出来

显而易见,所有的容器都查出来了

那么我们现在将MySQL的容器启动,用来后面的操作

docker start 【名字/ID】

 执行这段命令就可以启动了,名字或者ID自己可以选择

启动完成后,我们可以在这里对数据库进行操作,也可以从Windows系统中对它进行操作

我这边使用的软件是navicat,软件可以自己选择,如果没有MySQL软件可以安装一个

Navicat2024最新版下载 (belacad.cn)

这边可以从官网进行下载

进软件后,点击连接后,选择MySQL,然后就可以进行连接了

后面的用户名密码也是根据安装来,可以看之前的设置

然后《主机》就是根据虚拟机的ip地址来决定的

使用 ifconfig 命令可以查看ip地址

需要找到ens33,下面的inet就是ip地址,所以我的ip地址就是(192.168.87.99)

双击连接,就可以看到很多的库,这样就表示我们的数据库就外部连接成功了

如果出现这种问题,可能是因为docker中的数据库容器未启动或者是信息填错了导致的

再根据上面检查一遍即可

想删除容器也很简单,使用docker rm 【名字/ID】就可以了

但是如果容器正在使用,那么就不可删除,这个时候就需要强制删除

docker rm -f 【名字/ID】

 

2.4、命令别名

在使用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

首先使用vi 命令进入.bashrc文件进行修改

这边我举了几个例子,比如说:

《dis》就是《docker images》的简写

《rm》就是《rm -i》的简写

《dps》就是《docker ps》的简写

这样我们只需要执行简写后的命令,就可以以原命令的方式输出结果

这样减少了很多的代码,非常便利

注意:

执行完毕后需要执行《source /root/.bashrc》命令,让别名生效

 2.5、数据卷

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

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

  • html:放置一些静态资源

  • conf:放置配置文件

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

为了部署SSM的工程,需要使用到cp的命令将宿主机内的ssm.war文件复制到容器内部。

数据卷:将宿主机的一个目录映射到容器的一个目录中。

可以在宿主机中操作目录中的内容,那么容器内部映射的文件,也会跟着一起改变。

# 1. 创建数据卷
docker volume create 数据卷名称
# 创建数据卷之后默认会存放在一个目录下 /var/lib/docker/volumes/数据卷名称/_data
# 2. 查看数据卷的详细信息
docker volume inspect 数据卷名称
# 3. 查看全部数据卷
docker volume ls
# 4. 删除数据卷
docker volume rm 数据卷名称
# 5. 应用数据卷
# 当你映射数据卷时,如果数据卷不存在。Docker会帮你自动创建
docker run -v 数据卷名称:容器内部路径 镜像id
# 直接指定一个路径作为数据卷的存放位置。这个路径下是空的。
docker run -v 路径:容器内部的路径 镜像id

也就是说在创建容器的时候,就将数据卷配置好了,所以说如果想给已经安装的的容器再配置数据卷,最好的方法建议是重新再次安装一遍,安装时就配置好数据卷


http://www.ppmy.cn/server/151710.html

相关文章

vue-cli 5接入模块联邦 module federation

vue-cli 5接入模块联邦 module federation 模块联邦概念实现思路配置遇到的问题: 模块联邦概念 模块联邦由webpack 5最先推出的,让应用加载远程的代码模块来实现不同的Web应用共享代码片段.模块联邦分为两个角色,一个是生产者,一个是消费者.生产者暴露代码供消费者消费 (用一个…

milvus 支持向量化索引的方法

Milvus 是一个高性能的向量数据库&#xff0c;支持多种向量索引方法&#xff0c;以优化不同的查询需求。Milvus 支持以下几种常见的向量化索引方法&#xff1a; IVF (Inverted File)&#xff1a; IVF_FLAT&#xff1a;基于倒排索引和线性扫描的简单方法&#xff0c;适用于小型数…

分布式接口防抖

目录 前言什么是防抖&#xff1f; 防抖 vs 节流 思路解析分布式部署下如何做接口防抖&#xff1f; 使用 Redis 实现分布式锁 生成唯一 Key设置请求锁释放请求锁处理重复提交判断 总结 前言 在高并发的分布式系统中&#xff0c;接口防抖&#xff08;Debouncing&#xff09;是…

GC.2015.四年级

GC.2015.四年级.01.奖励 题目描述 晨晨班主任想奖励班里面的每个学生一只圆珠笔和铅笔&#xff0c;已知每只圆珠笔和铅笔的价格&#xff0c;以及班里面的学生人数n&#xff0c;你能帮助老师算出总价吗&#xff1f; 输入格式 第一行&#xff1a;一个整数n&#xff0c;代表班里…

Kaggler日志--Day9

进度24/12/18 昨日复盘&#xff1a; 补充并解决Day7Kaggler日志–Day7统计的部分问题 今日进度&#xff1a; 继续完成Day8Kaggler日志–Day8统计问题的解答 明日规划&#xff1a; 今天报名了Regression with an Insurance Dataset算是新手村练习比赛&#xff0c;截止时间是2…

端到端、非端到端、序列到序列

一、端到端&#xff08;end to end&#xff09; 从输入端到输出端会得到一个预测结果&#xff0c;将预测结果和真实结果进行比较得到误差&#xff0c;将误差反向传播到网络的各个层之中&#xff0c;调整网络的权重和参数直到模型收敛或者达到预期的效果为止&#xff0c;中间所…

读心术小游戏(附加源码)

写在开头 上期代码主要实现瀑布流功能&#xff0c;本期就来实现读心术小游戏&#xff0c;开发久了很多功能都是通过框架组件库来完成&#xff0c;但是如果组件满足不了开发需求&#xff0c;还需要开发人员手动封装组件&#xff0c;专门出这样一期文章&#xff0c;通过原生js实现…

vue框架的搭建

1什么是Node.js&#xff1b; Node.js 是一个免费、开源、跨平台的 JavaScript 运行时环境, 它让开发人员能够创建服务器 Web 应用、命令行工具和脚本 Node.js下载&#xff1a; 下载Node 16.20.2 安装Node.js 安装Node.js 测试安装 运行命令行 win键R 查看node版本 输入&am…