Linux服务器搭建Docker

2023-11-16

一、Docker概述

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口

Docker的出现的原因?

​ 问题:项目开发到上线,环境配置不一致,跨平台,容易出错

​ 解决:发布项目时,不仅有jar包,还要包含环境配置

核心概念:将项目和环境打包(镜像),发布到远程仓库,要用直接下载即可,每个镜像都是隔离互不干扰的,就像一个个集装箱

二、Docker安装

1、环境准备
# 系统内核是4.18
[root@tanghx ~]# uname -r
4.18.0-240.22.1.el8_3.x86_64
# 系统版本
[root@tanghx ~]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="8"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"

2、下载安装

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

# 1、如果存在旧的版本,先卸载掉
sudo yum remove docker \
           docker-client \
           docker-client-latest \
           docker-common \
           docker-latest \
           docker-latest-logrotate \
           docker-logrotate \
           docker-engine
           
# 2、安装需要依赖的包
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

# 3、设置镜像的仓库
# 安装阿里云的镜像
sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 4、安装docker相关,容器核心,客户端  docker-ce(社区版)
yum install docker-ce docker-ce-cli containerd.io

# 5、启动docker
sudo systemctl start docker

# 开机自动启动 
sudo systemctl enable docker

# 更新yum软件包索引,CentOS7命令,
# centos8执行 dnf makecache
yum makecache fasty

查看Docker启动docker version

# 6、启动docker镜像
docker run hello-world
# 7、查看一下镜像是否存在,前面添加的hell-world存在
docker images
# 8、卸载docker
# 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
# 删除资源
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

# /var/lib/docker docker的默认工作路径
3、阿里云镜像加速
  1. 登录阿里云,在弹性计算里找到容器镜像服务

  2. 找到镜像加速地址

  3. 配置使用

# 创建一个目录
sudo mkdir -p /etc/docker
# 编写配置文件
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xuxcjuy8.mirror.aliyuncs.com"]
}
EOF
# 重启服务
sudo systemctl daemon-reload
# 启动
sudo systemctl restart docker

三、Docker命令

# 查看docker容器版本
docker version
# 查看docker容器信息
docker info
# 查看docker容器帮助
docker --help
1、镜像命令

镜像是什么?

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,包含运行某个软件所需要的所有内容(代码、运行时库、环境变量和配置文件)
所有的应用,直接打包docker镜像,就可以直接运行起来

如何得到镜像?

  1. 从远程仓库下载
  2. 别人拷贝
  3. 自己制作一个镜像DockerFile
  • 镜像下载
# 下载Redis官方最新镜像
docker pull redis
# 下载仓库所有Redis镜像
docker pull -a redis
# 下载私人仓库镜像
docker pull bitnami/redis
  • 镜像查看
# 列出本地images
docker images
# 只显示镜像ID
docker images -q
# 显示镜像的摘要信息(某列,如digests列)
docker images --digests
  • 镜像搜索
# 搜索仓库MySQL镜像
docker search mysql
# 只显示 starts >= 300 的mysql镜像
docker search --filter=stars=300 mysql
# 只列出 AUTOMATED=OK 的镜像
docker search --automated mysql
  • 镜像删除
# 单个镜像删除
docker rmi redis
# 强制删除(针对基于镜像有运行的容器进程)
docker rmi -f redis
# 多个镜像删除,不同镜像以空格隔开
docker rmi -f redis mysql nginx
# 删除本地全部镜像
docker rmi -f $(docker images -q)
  • 镜像构建
# 1.编写dockerfile
cd /docker/dockerfile
vim mycentos
# 2.构建docker镜像
docker build -f /docker/dockerfile/mycentos -t mycentos:1.1
2、容器命令
  • 查看容器:
# 查看正在运行的容器
docker ps
# 查看正在运行容器的ID
docker ps -q
# 查看所有容器(正在运行+历史运行过的容器)
docker ps -a
# 显示运行容器总文件大小
docker ps -s
# 显示最近创建的a个容器
docker ps -n a
# 不截断输出
docker ps --no-trunc
# 获取镜像redis的元信息
docker inspect redis
  • 容器启动

启动并进入 centos 容器,并查看 centos 容器里面目录

# 新建并启动容器(-i:交互模式运行,-t:为容器重新分配一个伪输入终端,--name:指定名称)
docker run -i -t --name mycentos
# 后台启动容器(-d:以守护方式启动容器)
docker run -d mycentos

# 启动一个或者多个已被停止的容器
docker start redis
# 重启容器
docker restart redis

注意:当docker run -d启动后台容器,使用docker ps发现容器停止了,是因为使用后台运行,必须要有一个前台进程,不然会自动停止(发现自己没提供服务)

  • 容器进程
# 列出redis容器中运行进程
docker top redis
# 查看所有运行容器的进程信息
for i in  `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done
  • 容器日志
# 查看redis容器日志
docker logs redis
# 查看容器redis从2021年1月1日后的最新十条日志
docker logs --since="2021-01-01" --tail=10 redis
  • 容器的进入与退出
# 使用run方式在创建时进入
docker run -it centos /bin/bash
# 关闭容器并退出
exit
# 仅退出容器,不关闭
快捷键:Ctrl+P+Q
#直接进入centos 容器启动命令的终端,不会启动新进程,多个attach连接共享容器屏幕,参数:--sig-proxy=false  确保CTRL-D或CTRL-C不会关闭容器
docker attach --sig-proxy=false centos
#在 centos 容器中打开新的交互模式终端,可以启动新进程,参数:-i  即使没有附加也保持STDIN 打开;-t  分配一个伪终端
docker exec -i -t  centos /bin/bash
#以交互模式在容器中执行命令,结果返回到当前终端屏幕
docker exec -i -t centos ls -l /tmp
#以分离模式在容器中执行命令,程序后台运行,结果不会反馈到当前终端
docker exec -d centos  touch cache.txt
  • 容器的停止与删除
# 停止一个运行中的容器
docker stop redis
# 杀掉一个运行中的容器
docker kill redis
# 删除一个已停止的容器
docker rm redis
# 删除一个运行中的容器
docker rm -f redis
# 删除多个容器
docker rm -f $(docker ps -a -q)
docker ps -a -q|xargs docker rm
# -l 移除容器间的网络连接,连接名为 db
docker rm -l db 
# -v 删除容器,并删除容器挂载的数据卷
docker rm -v redis

四、操作命令

1、生成镜像(commit)
# 基于当前redis容器创建一个新的镜像;
# 参数:
	# -a :提交的镜像作者;
	# -c :使用Dockerfile指令来创建镜像;
	# -m :提交时的说明文字;
	# -p :在commit时,将容器暂停
docker commit -a="tanghx" -m="这里是提交说明" [redis容器ID]  myredis:v1.1
2、容器主主机间的数据拷贝
# 将rabbitmq容器中的文件copy至本地路径
docker cp rabbitmq:/[container_path] [local_path]
# 将主机文件copy至rabbitmq容器
docker cp [local_path] rabbitmq:/[container_path]/
# 将主机文件copy至rabbitmq容器,目录重命名为[container_path](注意与非重命名copy的区别)
docker cp [local_path] rabbitmq:/[container_path]

五、容器数据卷

数据可以持久化,存储在容器之外的地方,Docker容器中产生的数据,同步到本地,容器之间有一个数据共享

目录的挂载,将我们容器内的目录,挂载到Linux上面

1、使用数据卷

方式一:直接使用命令来挂载 -v

#  -p 主机地址:容器地址
docker run -it -v 主机目录:容器目录
docker run -it -v /home/test:/home centos /bin/bash

# 启动之后查看容器信息,"Mounts:[]"-挂载信息
docker inspect 容器ID

例子:Docker 部署 MySQL

2、具名和匿名挂载
## 匿名挂载
# -v 容器内路径	不写主机目录
docker run -d -p --name nginx -v /etc/nginx nginx

## 具名挂载
# 给挂载起个别名,别名前没有 "/"("/"表示绝对路径)
docker run -d -p --name nginx -v mynginx:/etc/nginx nginx

## 查看所有卷的情况
docker volume ls
# 查看挂载信息
docker volume inspect 挂载具名

所有docker容器内的卷,没有指定目录的情况下,都是在/var/lib/docker/volumes/卷名/_data

通过具名挂载,可以方便的找到我们的卷

挂载文件权限

# 通过 -v 容器内路径:ro rw 改变读写权限
ro	readonly	# 只读,该文件只能从容器外部改变
rw  readwrite	# 可读可写(默认)

# 设置了容器权限,容器对挂载出来的内容操作就有限制了
docker run -d -p --name nginx -v mynginx:/etc/nginx nginx
3、DockerFile

Dockerfile 就是用来构建docker镜像的构建文件,就是一个命令脚本

## 创建一个dockerfile文件,文件里面编写命令脚本(指令全大写)
# 构建一个基础镜像
FROM centos
# 挂载
VOLUME ["volume01","volume02"]
CMD echo "-----打印内容----"
CMD /bin/bash

## 执行Dockerfile创建镜像
#	-f dockerfile文件目录
#	-t 镜像名称、版本
docker build -f /home/docker/dockerfile -t tanghx/centos:1.0 .
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux服务器搭建Docker 的相关文章

  • 为什么此 NASM 代码会打印我的环境变量?

    本学期我刚刚完成计算机体系结构课程 除其他外 我们一直在涉足 MIPS 汇编并在 MARS 模拟器中运行它 今天 出于好奇 我开始在我的 Ubuntu 机器上摆弄 NASM 基本上只是将教程中的内容拼凑起来 并感受一下 NASM 与 MIP
  • 从 Docker 容器发送多播数据包(到多播组)

    我有一个通过 UDP 多播发送消息的应用程序 我一直试图将其放在 docker 下 我在尝试从 Docker 容器发送多播数据包时遇到了很大的阻力 我已经能够通过 net host运行 docker 容器的选项 然而 我想坚持使用桥接配置
  • /sys/device/ 和 dmidecode 报告的不同 CPU 缓存大小

    我正在尝试获取系统中不同缓存级别的大小 我尝试了两种技术 a 使用 sys device 中的信息 这是输出 cat sys devices system cpu cpu0 cache index1 size 32K cat sys dev
  • 在 Docker 容器中看不到 Django

    我想在一个简单的 Docker 容器中运行 Django 首先 我使用 Docker 文件构建了容器 里面没有什么特别的 只有 FROM RUN 和 COPY 命令 然后我用命令运行我的容器 docker run tid p 8000 80
  • 正则表达式删除块注释也删除 * 选择器

    我正在尝试使用 bash 从 css 文件中删除所有块注释 我有以下 sed 命令的正则表达式 sed r s w s w d 这可以很好地去除块注释 例如 This is a comment this is another comment
  • Linux无法删除文件

    当我找到文件时 我在删除它们时遇到问题 任务 必须找到带有空格的文件并将其删除 我的尝试 rm find L root grep i 但我有错误 rm cannot remove root test No such file or dire
  • 来自守护程序的错误响应:加入会话密钥环:创建会话密钥:超出磁盘配额

    我尝试在我的服务器上安装 docker 使用本教程 https docs docker com install linux docker ce ubuntu 我想远程运行 docker 镜像并使用 portainer Web 界面来管理一切
  • Ubuntu Python shebang 线不工作

    无法让 shebang 线在 Ubuntu 中为 python 脚本工作 我每次只收到命令未找到错误 test py usr bin env python print Ran which python usr bin python 在 sh
  • 如何才能将 TCP 连接返回到同一端口?

    机器是 RHEL 5 3 内核 2 6 18 有时我在 netstat 中注意到我的应用程序有连接 建立了 TCP 连接本地地址 and 国外地址是一样的 其他人也报告了同样的问题 症状与链接中描述的相同 客户端连接到本地运行的服务器的端口
  • 在 docker 中重定向命令输出

    我想为我的服务器做一些简单的日志记录 它是一个在 Docker 容器中运行的小型 Flask 应用程序 这是 Dockerfile Dockerfile FROM dreen flask MAINTAINER dreen WORKDIR s
  • ssh 连接超时

    我无法在 git 中 ssh 到 github bitbucket 或 gitlab 我通常会收到以下错误消息 如何避免它 输出 ssh T email protected cdn cgi l email protection i ssh
  • docker repo 解决映像构建期间的错误错误(检查存储库文件)

    我在构建 docker 映像时遇到问题 并尝试了不同的 DNS 选项 但似乎运气不佳 Docker版本1 9 1 构建a34a1d5 回购还活着 为了运行我使用的容器docker run dns 192 168 1 1 d ti name
  • 在没有 noexec 选项的情况下将卷挂载到 docker 容器中

    据我所知 docker 也包括 docker compose 使用 noexec 选项将卷安装到容器中 因此我无法从安装的目录中启动任何程序 services app build context dockerfile Dockerfile
  • 找不到包“gdk-pixbuf-2.0”

    我正在尝试在 Amazon Linux 发行版实例上构建 librsvg 我已经通过 yum 安装了大部分依赖项 其中一些在实例上启用的默认 yum 存储库中不可用 因此必须从头开始构建它们 我已经走了很远 但还停留在最后一点 跑步时sud
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • ALSA:snd_pcm_writei 调用时缓冲区不足

    当运行我最近从灰烬中带回来的旧程序时 我遇到了缓冲区不足的情况 该程序将原始声音文件完全加载到内存中 2100 字节长 525 帧 并准备 ALSA 进行输出 44 1khz 2 通道 有符号 16 位 if err snd pcm set
  • Google BQ:运行参数化查询,其中参数变量是 BQ 表目标

    我正在尝试从 Linux 命令行为 BQ 表目标运行 SQL 此 SQL 脚本将用于多个日期 客户端和 BQ 表目标 因此这需要在我的 BQ API 命令行调用中使用参数 标志 parameter 现在 我已经点击此链接来了解参数化查询 h
  • 我们真的应该使用 Chef 来管理 sudoers 文件吗?

    这是我的问题 我担心如果 Chef 破坏了 sudoers 文件中的某些内容 可能是 Chef 用户错误地使用了说明书 那么服务器将完全无法访问 我讨厌我们完全失去客户的生产服务器 因为我们弄乱了 sudoers 文件并且无法再通过 ssh
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe

随机推荐

  • /Library/Developer/CommandLineTools/usr/bin/python3 :NO module named pytest解决

    报错场景 已经用pip3 install pytest 成功下载pytest 结果运行python3 m pytest xxx py还是报错 Library Developer CommandLineTools usr bin python
  • *python解决狼羊菜过河问题

    python解决狼羊菜过河问题 A岸有菜 羊 狼 农夫农夫必须将他们都送到B岸每次只能送一个 在保证他们不会被吃的前提下 完成任务 并得出步骤 代码 A 狼 1 羊 1 菜 1 B 狼 0 羊 0 菜 0 size len A count
  • 没有与这些操作数匹配的`“>>“`运算符错误;

    报错信息 没有与这些操作数匹配的 gt gt 运算符错误 网上查询大多是少了头文件
  • python反混淆javascript代码

    JavaScript代码一般都是可见的 一些关键的加密算法写在JS里其实很不安全 代码混淆能将Js进行压缩 使之变成不易读的代码 如下图所示 当然这难不倒我们 网上有很多js反混淆的工具 作者推荐使用jsbeautifier 因为最近项目用
  • CSDN上传付费资源需要创作者等级Lv4,我的升级之路,本文持续更新,欢迎各位分享自己的升级经验

    首先来看看官方的要求 创作者等级Lv4 实名认证 原力等级 5 目前惟一满足的实名认证 创作者等级升级官方说明 计分标准 计分规则 分值 说明 资源量 每上传1个资源 审核通过 5分 若自行或被平台删除及下架则扣除对应分数 分数实时更新 阅
  • 【React】react-router-dom

    文章目录 1 路由器组件 lt HashRouter gt lt BrowserRouter gt 2 路由 2 1 lt Route gt 2 1 1 lt Route element gt 2 1 2 lt Route path gt
  • 函数内的ajax同步请求导致遮罩层失效、或者导致loading正在加载提示失效问题

    功能需求 编写点击按钮 弹出loading遮罩层提示正在加载中 同时查询后台信息 拼接数据后渲染到列表时 为了保障渲染时 列表中的数据已经拼接完成 所以在for循环中使用同步ajax进行请求 在success方法中进行拼接 function
  • JUC多线程

    JUC多线程 1 读写锁 ReadWriteLock 2 线程八锁 3 线程池 4 线程池调度 分支合并框架 ForkJoinPool 1 读写锁 ReadWriteLock 读读之间不需要互斥 读写 写写之间需要互斥 通过readWrit
  • GCC的-fomit-frame-pointer编译选项的含义

    GCC的 fomit frame pointer编译选项的含义 优化你的软件时 发觉 fomit frame pointer 这个选项还是蛮有用的 GCC手册上面这么说 Don t keep the frame pointer in a r
  • LVS DR模式负载均衡群集部署

    目录 1 LVS DR 模式的特点 1 1 数据包流向分析 1 2 DR 模式的特点 2 DR模式 LVS负载均衡群集部署 2 1 配置负载调度器 2 1 1 配置虚拟 IP 地址 2 1 2 调整 proc 响应参数 2 1 3 配置负载
  • Linux Top 命令解析

    转自 http www jb51 net LINUXjishu 34604 html TOP是一个动态显示过程 即可以通过用户按键来不断刷新当前状态 如果在前台执行该命令 它将独占前台 直到用户终止该程序为止 比较准确的说 top命令提供了
  • SSM框架实现简单的增删改查

    引言 在中软国际实习的第三天 培训老师要求我们整合出SSM框架实现简单的增删改查 我参考某篇博文链接完成了用户的增删改除 故发此博文以供后来者参考 开发工具 IntelliJ IDEA Ultimate 2018 2 2 Apache to
  • react 更新阶段的生命周期函数

    shouldComponentUpdate nextProps nextState 你可以通过这个方法控制组件是否重新渲染 如果返回 false 组件就不会重新渲染 这个生命周期在 React js 性能优化上非常有用 componentW
  • PyTorch 重磅更新,不只是支持 Windows

    翻译 林椿眄 出品 AI 科技大本营 公众号ID rgznai100 这次版本的主要更新一些性能的优化 包括权衡内存计算 提供 Windows 支持 24个基础分布 变量及数据类型 零维张量 张量变量合并 支持 CuDNN 7 1 加快分布
  • 模型部署之TorchScript

    一 关于torchscript和jit介绍 1 关于torchscript TorchScript是Pytorch模型 继承自nn Module 的中间表示 保存后的torchscript模型可以在像C 这种高性能的环境中运行 TorchS
  • 浏览器定位是如何实现的?为什么会有浏览器定位失败的情况?

    高德地图开放平台JavaScript API提供的Geolocation定位插件 融合了HTML5 Geolocation定位接口 精确IP定位服务 以及安卓定位sdk定位 其中与安卓定位sdk的结合使用适用于开发安卓系统的H5应用 需同时
  • STM32H743必要外围电路分析

    BOOT STM32采用ARM内核 和ARM处理器一样 都有专门的boot脚决定单片机从何处启动 在官方数据手册的第105页 我们可以看到 系统复位后 在SYSTICK的第四个上升沿锁存BOOT引脚的值 复位后 BOOT引脚可以由用户自由配
  • pytorch报错大全

    1 IndentationError unexpected indent 缩进有问题 2 IndexError list index out of range 情况一 list index 中的index下标超出范围了 所以出现了访问越界
  • vs插件,插件大全,插件大全全家桶

    插件大全全家桶 插件大全全家桶 但是本着点赞自愿 收藏吃灰 还是多少可以支持一下
  • Linux服务器搭建Docker

    Linux服务器搭建Docker 一 Docker概述 Docker的出现的原因 二 Docker安装 1 环境准备 2 下载安装 3 阿里云镜像加速 三 Docker命令 1 镜像命令 2 容器命令 四 操作命令 1 生成镜像 commi