Docker学习

文章目录

  • 我的`docker`环境
    • 替换`apt`软件包镜像源
    • `docker`安装
      • 以`apt`包管理器安装`docker`
        • 卸载
      • 以`docker`官方存储库安装
        • 卸载
    • 添加某用户到`docker`组
    • 配置`docker`镜像
  • `docker`命令学习
    • 操作守护进程相关命令
    • 操作镜像相关命令
      • 查看镜像
      • 搜索镜像
      • 拉取镜像
      • 删除镜像
    • 操作容器相关命令
      • 查看容器
      • 创建容器
      • 进入容器
      • 启动容器
      • 停止容器
      • 删除容器
      • 查看容器信息
  • 容器的数据卷
      • 数据卷的概念以及作用
        • 概念
        • 作用
      • 配置数据卷
      • 数据卷概念
  • 部署应用案例
    • 部署`mysql`
    • 部署`tomcat`
    • 部署`nginx`
  • `Dockerfile`
    • `docker`镜像原理
    • 镜像制作
      • 容器转为镜像
      • `dockerfile`
    • `dockerfile`关键字
    • 案例
      • 搭建一个`springboot`的环境
      • 自定义`centos`
  • `docker`服务编排
    • 服务编排概念
    • `Docker Compose`概述
      • 一、安装`Docker Compose`
      • 二、卸载`Docker Compose`
      • 三、 使用docker compose编排nginx+springboot项目

我的docker环境

Ubuntu 20.04.6 LTS

替换apt软件包镜像源

修改/etc/apt/source.list中所有的

http://cn.archive.ubuntu.com/ubuntu

->

https://mirrors.tuna.tsinghua.edu.cn/ubuntu

cd /etc/apt
# 备份文件
cp source.list source.list.package
# 替换镜像源
sed -i 's/http:\/\/cn\.archive\.ubuntu\.com\/ubuntu\//https:\/\/mirrors\.tuna\.tsinghua\.edu\.cn\/ubuntu\//g' source.list

docker安装

apt包管理器安装docker

sudo apt install docker.io

卸载

如果要卸载

sudo apt-get purge docker.io
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

docker官方存储库安装

  1. 更新 apt 包索引,并且安装一些软件使得apt可以通过HTTPS协议访问软件库。
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
  1. 添加docker官方的GPG秘钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  1. 设置一个标准的docker软件仓库。
# 会在/etc/apt/source.list.d/添加一个叫docker.list的文件
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/dockerarchive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. 更新apt 包索引并查看docker 可用版本列表
sudo apt-get update
apt-cache madison docker-ce
  1. 安装docker

    1. 安装特定版本docker语法,例如:5:24.0.2-1~ubuntu.18.04~bionic

      sudo apt-get install docker-ce=<VERSION_STRING> \
      docker-ce-cli=<VERSION_STRING> \
      containerd.io=<VERSION_STRING> \
      docker-compose-plugin=<VERSION_STRING>
      

      使用具体版本号代替

      sudo apt-get install docker-ce=5:24.0.5-1~ubuntu.20.04~focal \
      docker-ce-cli=5:24.0.5-1~ubuntu.20.04~focal \
      containerd.io=1.6.21-1 \
      docker-compose-plugin=2.20.2-1~ubuntu.20.04~focal
      
    2. 或者直接安装最新版docker-ce及相关软件

      sudo apt-get update
      sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
      
  2. 检查docker engine是否安装正确

    sudo docker run hello-world
    

卸载

sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-compose-plugin

删除相关目录

sudo rm -rf /var/lib/docker && sudo rm -rf /var/lib/containerd && sudo rm -rf /etc/docker/

添加某用户到docker

为了不让每次输入docker指令都输入sudo
我们讲用户添加到docker

// 将用户从docker用户组中移除 gpasswd -d <username> docker
// 将用户添加到docker 用户组
sudo addgroup -a <username> docker
sudo service docker restart
// 查看用户信息
id <username>

配置docker镜像

/etc/docker/daemon.json添加镜像源

{"registry-mirrors": ["https://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com"]
}

docker命令学习

操作守护进程相关命令

systemctl 操作 dockersystemctl enable docker # 开机启动docker

操作镜像相关命令

查看镜像

docker imagesdocker images -q  # 显示所有的镜像id
REPOSITORYTAGIMAGE IDCREATEDSIZE
仓库(镜像名称)版本镜像id(删除时会用)创建时间大小

搜索镜像

docker search xxxx

在网络上搜索镜像包

拉取镜像

docker pull redis:7.0
  • 可以指定版本也可以不指定,不指定的话默认latest

删除镜像

docker rmi redis
  • 可以写名称:版本,也可以写image id

操作容器相关命令

查看容器

docker ps

显示出正在运行的容器列表

docker ps -a

显示出历史所有运行过的容器列表

docker ps -aq

显示出所有历史运行过的容器列表id

创建容器

docker run -it --name=c1 redis:latest /bin/bash
  • -i表示保持容器运行,如果不加的话容器默认状态就为exit
  • -t为容器重新分配一个伪输入终端,exit后容器关闭
  • --name=xx分配名字
  • redis:latest指定镜像
  • /bin/bash进入容器的初始化指令
docker run --id --name=c2 redis:latest

返回容器id

  • -d以守护模式运行容器。创建一个容器在后台运行,使用exit退出后容器不会关闭

-it创建一个交互式容器,-id创建一个守护式容器

进入容器

docker exec -it c2 /bin/bash
  • 以交互的终端方式进入c2

启动容器

docker start c2
  • 启动exit状态的容器

停止容器

docker stop c2
  • 关闭已经启动的容器

删除容器

docker rm c1
  • 从容器列表中删除容器
docker rm `docker ps -aq`
  • 删除所有容器

查看容器信息

docker inspect c2

容器的数据卷

数据卷的概念以及作用

概念

宿主机上有数据卷目录,容器内部也有数据卷目录,容器内部的数据卷目录挂载的是宿主机上的数据卷目录。所以可以回答下面三个问题

  • docker容器删除后,在容器中产生的数据也会随之销毁吗
    • 相当于不挂载了,只要宿主数据卷还在就行
  • docker容器和外部机器可以直接交换文件吗
    • 外部机器与宿主的数据卷进行交互间接修改docker容器数据
  • 容器之间想要进行数据交互
    • 不同容器间挂载可以挂载同一个宿主数据卷

一个数据卷可以被多个容器挂载

一个容器可以挂载多个数据卷

作用

  • 容器数据持久化
  • 外部机器和容器间通信
  • 容器之间数据交换

配置数据卷

docker run -it --name=c1 -v /root/data:/root/data_container redis:latest /bin/bash
  • 挂载路径需要写绝对路径

  • 如果目录不存在会自动创建

  • 可以挂载多个数据卷

    docker run -it --name=c1 \
    -v /root/data:/root/data_container \
    -v /root/data1:/root/data1 \
    redis:latest \
    /bin/bash
    

数据卷概念

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tNu8Z2nc-1693211395679)(image\image-20230827083359874.png)]

c3挂载了一个数据卷,c1c2分别挂载了c3,那么他们也相当于挂载到了对应的数据卷

此时c3就叫做数据卷容器

docker run -it --name=c3 -v /volumn redis:latestdocker run -it --name=c2 --volumn-from c3 redis:latest
docker run -it --name=c1 --volumn-from c3 redis:latest

部署应用案例

部署mysql

  1. 搜索应用

    docker search mysql
    
  2. 拉取mysql镜像

    docker pull mysql:5.6
    
  3. 创建容器,设置端口映射、目录映射

    mkdir ~/mysql
    cd ~/mysqldocker run -id \
    -p 3307:3306 \
    --name=c_mysql \
    -v $PWD/conf:/etc/mysql/conf.d \ 
    -v $PWD/logs:logs \
    -e MYSQL_ROOT_PASSWORD=123456 \
    mysql:5.6
    
    • 映射端口
    • 目录映射
    • 设置mysql密码

进入容器

docker exec -it c_mysql /bin/bash

部署tomcat

mkdir ~/tomcat
cd ~/tomcatdocker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat
  • 设置webapp映射目录
  • 映射端口

部署nginx

docker run -id --name=c_nginx \ 
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx

Dockerfile

docker镜像原理

为什么centos镜像只有200MB,而一个centos操作系统要几个G

为什么tomcat镜像有500MB,而一个tomcat安装包只有几十兆

  • docker是一个分层的文件系统
  • docker的镜像复用宿主机的bootfs,自己只要有rootfs和其他镜像层

镜像制作

容器转为镜像

docker commit 容器id 镜像名称:版本号

将镜像打成压缩包

docker save -o 压缩文件名称 镜像名称:版本号

将压缩包转为镜像

docker load -i 压缩文件名称

目录挂载的需要重新docker run的时候使用-v指定

dockerfile

一个文本文件,包含了一条条的指令。

每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像。

dockerfile关键字

关键字作用备注
FROM指定父镜像指定dockerfile基于那个image构建
MAINTAINER作者信息用来标明这个dockerfile谁写的
LABEL标签用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看
RUN执行命令执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN [“command” , “param1”,“param2”]
CMD容器启动命令提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD [“command” , “param1”,“param2”]
ENTRYPOINT入口一般在制作一些执行就关闭的容器中会使用
COPY复制文件build的时候复制文件到image中
ADD添加文件build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务
ENV环境变量指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value
ARG构建参数构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数
VOLUME定义外部可以挂载的数据卷指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME [“目录”]
EXPOSE暴露端口定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp
WORKDIR工作目录指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径
USER指定执行用户指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户
HEALTHCHECK健康检查指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制
ONBUILD触发器当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大
STOPSIGNAL发送信号量到宿主机该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。
SHELL指定执行脚本的shell指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell

案例

搭建一个springboot的环境

创建一个springboot的项目,jdk使用8maven打包成jar包传给ubuntu

jar包目录下创建dockerfile

# springboot_dockerfile
FROM java:8
MAINTAINER ljq <luopanforever@163.com>
ADD springbootDocker-0.0.1-SNAPSHOT.jar app.jar
CMD java -jar app.jar

加载dockerfile文件

docker build -f ./springboot_dockerfile -t app .

创建容器

docker run -id -p9000:8080 app

自定义centos

设置默认登录路径为/usr

可以使用vim

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tlJcHfKd-1693211395680)(image\image-20230827193940002.png)]

docker服务编排

服务编排概念

按照一定的业务规则批量管理容器

Docker Compose概述

Docker Compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。

使用步骤:

  1. 利用dockerfile定义运行环境镜像
  2. 使用docker-compose.yml定义组成应用的各服务
  3. 运行docker-compose up启动应用

一、安装Docker Compose

# Compose目前已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,需要先安装Docker。下面我 们以编译好的二进制包方式安装在Linux系统中。 
curl -L https://github.com/docker/compose/releases/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

二、卸载Docker Compose

# 二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose

三、 使用docker compose编排nginx+springboot项目

  1. 创建docker-compose目录
mkdir ~/docker-compose
cd ~/docker-compose
  1. 编写 docker-compose.yml 文件
version: '3'
services:nginx:image: nginxports:- 80:80links:- appvolumes:- ./nginx/conf.d:/etc/nginx/conf.dapp:image: appexpose:- "8080"
  1. 创建./nginx/conf.d目录
mkdir -p ./nginx/conf.d
  1. ./nginx/conf.d目录下 编写itheima.conf文件
server {listen 80;access_log off;location / {proxy_pass http://app:8080;}}
  1. ~/docker-compose 目录下 使用docker-compose 启动容器
docker-compose up
  1. 测试访问
http://192.168.149.135/hello

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

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

相关文章

Deepin 图形化部署 Hadoop Single Node Cluster

Deepin 图形化部署 Hadoop Single Node Cluster 升级操作系统和软件 快捷键 ctrlaltt 打开控制台窗口 更新 apt 源 sudo apt update更新 系统和软件 sudo apt -y dist-upgrade升级后建议重启 开启ssh服务 打开资源管理器 进入系统盘 找到 etc 目录 在系统盘的 etc 目录上 右键…

【校招VIP】前端校招考点之UDP

考点介绍&#xff1a; UDP是非面向连接协议&#xff0c;使用udp协议通讯并不需要建立连接&#xff0c;它只负责把数据尽可能发送出去&#xff0c;并不可靠&#xff0c;在接收端&#xff0c;UDP把每个消息断放入队列中&#xff0c;接收端程序从队列中读取数据。 『前端校招考点…

【leetcode 力扣刷题】汇总区间//合并区间//插入区间

一些关于区间的力扣题目 228. 汇总区间56. 合并区间57. 插入区间 228. 汇总区间 题目链接&#xff1a;228.汇总区间 题目内容&#xff1a; 看题目真是没懂这个题到底是要干啥……实际上题目要求的恰好覆盖数组中所有数字的最小有序区间范围列表&#xff0c;这个最小是指一个区…

使用Docker安装和部署kkFileView

&#x1f388;1 参考文档 kkFileView官方文档 &#x1f680;2 安装kkFileView 拉取Redis镜像。 docker pull keking/kkfileview启动docker容器。 docker run -it -d -p 8012:8012 keking/kkfileview --restart always解释&#xff1a; docker run redis # 从kkfileview镜像运行…

『PyQt5-Qt Designer篇』| 08 Qt Designer中容器布局和绝对布局的使用

08 Qt Designer中容器布局和绝对布局的使用 1 容器布局1.1 设计容器布局1.2 保存文件并执行2 绝对布局2.1 设计绝对布局2.2 保存文件并执行1 容器布局 1.1 设计容器布局 先拖入一个容器Frame容器,然后拖入几个控件: 把拖入的控件拖入容器中: 选中容器,右键-布局-栅格布局:…

Python大数据处理利器之Pyspark详解

摘要&#xff1a; 在现代信息时代&#xff0c;数据是最宝贵的财富之一&#xff0c;如何处理和分析这些数据成为了关键。Python在数据处理方面表现得尤为突出。而pyspark作为一个强大的分布式计算框架&#xff0c;为大数据处理提供了一种高效的解决方案。本文将详细介绍pyspark…

父组件调用子组件 ref 不生效?组件暴露 ref ?

向你的组件暴露 ref 要暴露 ref 最关键的就是 forwardRef forwardRef 是 React 中的一个高阶函数&#xff0c;用于在函数组件中将 ref 属性向下传递给子组件。 在 React 中&#xff0c;我们可以使用 ref 属性来获取对一个组件实例的引用&#xff0c;以便在父组件中操作子组件。…

Dynamic ReLU:根据输入动态确定的ReLU

这是我最近才看到的一篇论文&#xff0c;它提出了动态ReLU (Dynamic ReLU, DY-ReLU)&#xff0c;可以将全局上下文编码为超函数&#xff0c;并相应地调整分段线性激活函数。与传统的ReLU相比&#xff0c;DY-ReLU的额外计算成本可以忽略不计&#xff0c;但表示能力明显增强&…

项目(补充2):智慧教室

一。emWin环境的搭建 1.codeBlock下载 开源免费。 2.使用stm的Cubemx提供的作图软件 &#xff08;1&#xff09;在C盘下找到第三方的固件库&#xff0c;旁边有个ST文件夹 注意&#xff1a;我在下载cubemx为默认的路径 &#xff08;2&#xff09;STemWin中的Soft提供了绘图…

一文1800字从0到1使用Python Flask实战构建Web应用

Python Flask是一个轻量级的Web框架&#xff0c;它简单易用、灵活性高&#xff0c;适用于构建各种规模的Web应用。本文将介绍如何使用Python Flask框架来实战构建一个简单的Web应用&#xff0c;并展示其基本功能和特性。 第一部分&#xff1a;搭建开发环境 在开始之前我们需要…

企业架构LNMP学习笔记8

1、 运维人员需要考虑安全性、稳定性。 安装&#xff1a; 解压进入到目录&#xff1a; shell > tar zxf php-7.2.12.tar.gz shell > cd php-7.2.12 安装依赖软件&#xff1a; yum -y install libxml2-devel libjpeg-devel libpng-devel freetype-devel curl-devel op…

【100天精通Python】Day52:Python 数据分析_Numpy入门基础与数组操作

目录 1 NumPy 基础概述 1.1 NumPy的主要特点和功能 1.2 NumPy 安装和导入 2 Numpy 数组 2.1 创建NumPy数组 2.2 数组的形状和维度 2.3 数组的数据类型 2.4 访问和修改数组元素 3 数组操作 3.1 数组运算 3.2 数学函数 3.3 统计函数 4 数组形状操作 4.1 重塑数组形…

使用Windbg动态调试排查软件启动不了的问题

目录 1、问题说明 2、初步分析 3、使用Windbg启动程序进行动态调试 4、进一步分析 5、何时使用Windbg静态分析&#xff1f;何时使用Windbg进行动态调试&#xff1f; 6、最后 VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&…

Go在安装Gin时出现Failed to connect 报错问题的解决方案(已解决)

在命令行中输入&#xff1a;go get -u github.com/gin-gonic/gin指令安装Gin第三方包时出现连接错误与连接超时的情况如下&#xff1a; 在较新版本的Go中引入了全新的包管理机制&#xff0c;出现上述错误可能是包管理机制设置不恰当的问题&#xff0c;尝试在终端窗口输入如下…

解决Apache Tomcat “Request header is too large“ 异常 ‍

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

【数据结构】| 并查集及其优化实现

目录 一. 并查集基本概念处理过程初始化合并查询小结 二. 求并优化2.1 按大小求并2.2 按秩(高度)求并2.3 路径压缩2.4 类的实现代码2.5 复杂度分析 三. 应用LeetCode 128: 最长连续数列LeetCode 547: 省份数量LeetCode 200: 岛屿数量 一. 并查集基本概念 以一个直观的问题来引入…

差分数组/前缀和

文章目录 1094. 拼车1109. 航班预定统计303. 区域和检索 - 数组不可变560. 和为K的子数组523. 连续的子数组的和 1094. 拼车 class Solution {public boolean carPooling(int[][] trips, int capacity) {int[] diff new int[1001]; // 记录每个站点改变的人数&#xff0c;比如…

无涯教程-JavaScript - WEIBULL函数

WEIBULL函数取代了Excel 2010中的WEIBULL.DIST函数。 描述 该函数返回威布尔分布。在可靠性分析中使用此分布,如计算设备的平均故障时间。 语法 WEIBULL(x,alpha,beta,cumulative)争论 Argument描述Required/OptionalXThe value at which to evaluate the function.Requir…

selenium可以编写自动化测试脚本吗?

Selenium可以用于编写自动化测试脚本&#xff0c;它提供了许多工具和API&#xff0c;可以与浏览器交互&#xff0c;模拟用户操作&#xff0c;检查网页的各个方面。下面是一些步骤&#xff0c;可以帮助你编写Selenium自动化测试脚本。 1、安装Selenium库和浏览器驱动程序 首先…

stable diffusion实践操作-常见lora模型介绍

系列文章目录 本文专门开一节写Lora相关的内容&#xff0c;在看之前&#xff0c;可以同步关注&#xff1a; stable diffusion实践操作 文章目录 系列文章目录前言一、什么是lora?1.1 lora 定义1.2 lora的基本原理1.2 通过分层控制lora 二、作用&#xff1a;2.1 复刻人物特征2…