Docker 从 安装 到 配置 到 实战:手把手带你入门

news2024/11/25 3:00:48

文章目录

  • 前言
    • 什么是docker?!docker的作用是什么?!
  • 一、下载docker
    • 1.卸载docker
    • 2.安装yum环境
    • 3.更新yum本地软件源
    • 4.安装Docker(参数ce:社区版)
    • 5.Docker使用中会涉及到各种端口,为了方便使用最好关闭防火墙
    • 6.安装成功!查看docker版本
    • 7.配置Docker国内镜像加速
    • 8.启动Docker
  • 二、对镜像操作示例
    • 1.拉取镜像
    • 2.删除镜像
    • 3.导入镜像
  • 三、数据卷操作示例
    • 1.创建数据卷:
    • 2. 映射挂载数据卷:
    • 3.绑定挂载数据卷:
    • 4.其他命令:
  • 四、挂载nginx容器示例
    • 1.拉取nginx镜像:
    • 2.创建并启动容器 :
    • 3.打开浏览器,访问宿主机的 IP 地址(例如,http://127.0.0.1:80),您应该能看到 Nginx 容器示例网站的内容。
    • 4.在nginx容器挂载数据卷:
  • 五、挂载mysql容器示例
    • 1.创建目录
    • 2.将初始化脚本拉进去
    • 3.创建并运行新mysql容器,挂载本地目录
  • 六、挂载redis容器示例
  • 七、自定义镜像
    • 1.编写dockerfile文件
    • 2.生成镜像
    • 3.运行容器
  • 八、自定义网络
  • 九、部署java应用
  • 总结


前言

什么是docker?!docker的作用是什么?!

🤔🤔🤔下面就以通俗易懂的方式讲一下它的用处吧~~~
🤔🤔🤔Docker 就像是快递界的 !!“顺丰”!!,它将应用程序及其依赖打包成一个轻量级的、可移植的容器,确保应用程序在各个环境中都能“异地发货、本地签收”。这样一来,开发者无需担心应用程序在不同服务器、数据中心或云平台上的兼容性问题,省去了大量调试和配置的麻烦。
在这里插入图片描述
Docker 的主要优势在于其实现了应用程序和基础设施之间的解耦,从而提高了应用程序的部署速度和可维护性。Docker 容器可以轻松地在集群、数据中心和云平台之间进行迁移,从而实现了高度的可扩展性和灵活性。
总之,Docker 是一种现代化的容器技术,它解决了应用程序的开发、部署和运维方面的诸多问题,使得开发者能够更专注于编写代码,而不用担心底层基础设施的复杂性。


一、下载docker

使用环境:centos7

1.卸载docker

如果之前有下载过docker的话,先把docker删除;

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

那如果小伙伴们是全新服务器的话,则不用执行删除,先安装好yum环境

2.安装yum环境

yum install -y yum-utils \
          device-mapper-persistent-data \
          lvm2 --skip-broken

3.更新yum本地软件源

 sudo su 
 
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g'
/etc/yum.repos.d/docker-ce.repo

yum makecache fast

4.安装Docker(参数ce:社区版)

yum install -y docker-ce

执行以上命令,运行后-y yes or no 都是填y

5.Docker使用中会涉及到各种端口,为了方便使用最好关闭防火墙

#关闭防火墙
systemctl stop firewalld
#禁止开机启动防火墙
systemctl disable firewalld

6.安装成功!查看docker版本

docker -v

7.配置Docker国内镜像加速

点击此链接,登录自己的阿里云账号,复制自己阿里云的加速地址,如下图
在这里插入图片描述
复制图中选中指令并运行

8.启动Docker

systemctl start docker  #启动docker服务
systemctl stop docker  #停止docker服务
systemctl restart docker  #重启docker服务

二、对镜像操作示例

常用操作命令:

docker run 新建并启动容器
docker start/stop/pause/unpause
docker logs 查看容器运行日志
docker ps 查看容器的状态(运行中的)
docker ps -a 查看所有容器的状态(包括停止的)
docker stop 暂停指定容器
docker rm 删除指定容器

下面演示拉取镜像,删除镜像,导出镜像三种示例:

1.拉取镜像

1.拉取镜像: docker pull redis

2.查看本地镜像: docker images

3.将镜像导出到磁盘: docker save -o 文件名称 镜像名称:版本
docker save -o redis.tar redis:latest

在这里插入图片描述
如上图导出成功!

2.删除镜像

删除本地镜像: docker rmi 镜像名称/ID
docker rmi redis:latest

在这里插入图片描述

3.导入镜像

导入镜像: dockerload -i 文件名称
docker load -i redis.tar

在这里插入图片描述

三、数据卷操作示例

什么是数据卷:

数据卷(Data Volume)是 Docker 中的一个重要概念,它允许您在容器内外之间共享数据。挂载数据卷有以下几个原因和优势:
数据持久化:数据卷可以让容器中的数据在容器停止或重新启动时得到保留。当容器被删除时,数据卷中的数据不会丢失,从而提高了数据的安全性。
资源共享:通过挂载数据卷,多个容器可以访问同一组数据,实现资源共享。这在多容器应用中尤为重要,例如,当多个容器需要访问相同的数据存储时,可以使用数据卷实现。
隔离性:数据卷在容器之间提供了一种隔离机制。每个容器可以拥有自己的数据卷,避免数据相互干扰。
灵活性:数据卷可以灵活地调整大小,满足不同场景的需求。在运行时,可以根据实际需要扩展或缩小数据卷的大小。
方便部署:通过挂载数据卷,可以简化部署流程。例如,将应用程序的数据存储在数据卷中,可以使容器快速启动和停止,提高运维效率。
安全性:数据卷可以设置访问权限,确保数据的安全。通过对数据卷设置只读或读写权限,可以控制不同容器对数据卷的访问权限,防止数据泄露。
总之,挂载数据卷有助于提高数据的持久性、安全性和共享性,同时简化部署流程,提高容器应用的灵活性和可扩展性。在实际应用中,根据不同场景选择合适的数据卷策略,可以有效提升 Docker 容器化的优势。

数据卷常用操作命令:

数据卷操作的基本语法为: docker volume [COMMAND],其中COMMAND可选值:
create: 创建一个volume;
inspect: 显示一个或多个volume的信息
ls:列出所有的volume
prune: 删除未使用的volume
rm:删除一个或多个指定的volume

1.创建数据卷:

1.创建数据卷:

docker volume create testA

2.查看数据卷:

docker volume ls

3.查看数据卷详细信息:

docker volume inspect testA
(docker volume inspect 数据卷名)

在linux的docker主机中创建一个卷时,其在宿主机对应的目录(挂载点)路径为/var/lib/docker/volumes/卷名/ data
如下图:
在这里插入图片描述

那么讲完怎么创建数据卷,下面来看一下怎么把数据卷挂载到容器上!

2. 映射挂载数据卷:

在创建容器时,可以通过–volume或 -v 参数挂载一个数据卷到某个容器目录
例一:

docker run --name testAcon -v testA:/data -d redis

上述命令表示创建一个名为testAcon的容器,将testA卷映射到testAcon容器的/data目录中
注意: 如果卷映射的目录在容器中不存在时,会自动在容器中创建对应的目录一个容器可以使用多个卷,
只需要多次使用-v选项指定即可
例二:

docker run --name testBcon -v testA:/data -v testB:/var/log -d redis

上述命令是用来在 Docker 中启动一个名为 “testBcon” 的容器,并且将宿主机的 “testA” 目录挂载到容器中的 “/data” 目录,同时将宿主机的 “testB” 目录挂载到容器中的 “/var/log” 目录。容器使用的镜像是 redis,并且以后台(-d)模式运行。
在这里插入图片描述
当指定的卷不存在时,docker会自动创建对应的卷,上述命令中的testB数据卷会被自动创建

测试:

到外面映射的数据卷里创建一个文件a.txt
在这里插入图片描述
进入容器里面查看是否同步:
结果如下:测试通过!挂载成功!
在这里插入图片描述

3.绑定挂载数据卷:

前面创建的数据卷都存放在/var/lib/docker/volumes目录中,这个目录是固定的,它们都能被docker volume命令管理
docker还有一种映射宿主机目录的方法,这种方法被称之为”绑定挂载”,绑定挂载能够将指定的宿主机目录挂载到容器中,只需要将卷名替换成宿主机上的目录路径即可
如下:

docker run -d --name testAcon -v /root/test1:/data1 redis

上述命令将宿主机的/root/test1目录映射到容器的/data1目录中绑定挂载不会生成任何卷,它直接将指定的宿主机目录映射到容器中,所以docker volume命令无法查看或管理到绑定挂载的路径。

4.其他命令:

docker volume ls:查看系统有几个卷
在这里插入图片描述
关机后启动docker
在这里插入图片描述

四、挂载nginx容器示例

1.拉取nginx镜像:

docker pull nginx

2.创建并启动容器 :

docker run --name mynginx -d -p 80:80 nginx
–name:指定容器名称
-p:将宿主机端口与容器端口映射,格式:宿主机端口:容器端口
-d: 后台运行容器

在这里插入图片描述

3.打开浏览器,访问宿主机的 IP 地址(例如,http://127.0.0.1:80),您应该能看到 Nginx 容器示例网站的内容。

在这里插入图片描述
以上是最简单的部署;

4.在nginx容器挂载数据卷:

先来解释一下为什么要挂载数据卷:
😱😱😱如果按照上面简单方法部署的nginx容器,其中最重要的一点就是当容器被删除时,容器中的数据就会丢失!这是一个影响很大的问题,没有配置数据卷,数据就不能持久化!

😎😎😎而挂载了数据卷,它可以让容器中的数据在容器停止或重新启动时得到保留,
当容器被删除时,数据卷中的数据不会丢失。
也可以通过挂载数据卷,多个容器可以访问同一组数据,实现资源共享等。

下面演示如何在原有的基础上加上挂载:

1、进入Nginx容器当中

docker exec -it nginx /bin/bash

2、在容器中查询出nginx的相关配置文件存放位置

whereis nginx

3.退出容器

exit

效果图如下:
在这里插入图片描述
4、本地创建管理目录

mkdir -p /root/nginx/www /root/nginx/logs /root/nginx/conf

5、将容器中的相应文件复制到刚创建的管理目录中(先复制再把之前的容器删了,之前容器的作用就是用来复制文件出来的)

docker cp mynginx:/etc/nginx/nginx.conf /root/nginx/conf

这里注意自己定义的容器名,我是mynginx,改成自己定义的容器名,和在第一步定义的相同
7、再次创建容器并作目录挂载
注意这里是新容器nginx-web

docker run -d -p 80:80 --name nginx-web -v /root/nginx/www:/usr/share/nginx/html -v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/logs:/var/log/nginx nginx

8.删除之前的容器
先停止容器再删除(如下图):
在这里插入图片描述

五、挂载mysql容器示例

1.创建目录

mkdir mysql
cd mysql
mkdir init
mkdir conf
mkdir data

如下图:
在这里插入图片描述

2.将初始化脚本拉进去

在这里插入图片描述
conf文件夹拉入以下文件:
目的是设置utf-8编码

[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文件夹拉入以下数据库文件:
这是自己准备的数据库文件,如果一开始没有可以不用或者自己导出个数据库文件
在这里插入图片描述

3.创建并运行新mysql容器,挂载本地目录

注意版本要一致!下面是 mysql:8.0.28


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

如下,挂载成功!
在这里插入图片描述
创建并导入数据库成功:
在这里插入图片描述
测试连接:初始化成功
在这里插入图片描述

六、挂载redis容器示例

1.拉取redis镜像

docker pull redis

创建并启动容器

docker run --name myredis -d -p 6379:6379 redis

2.进入容器:

docker exec -it myredis bash

  • it:给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
  • bash: 进入容器后执行的命令
  • 进入容器后执行: redis-cli,使用redis客户端操作redis

在容器中查询出相关配置文件存放位置

whereis nginx

如下图:
在这里插入图片描述

七、自定义镜像

如果只是使用镜像,当然不需要了解镜像的内部结构,直接通过docker命令下载和运行就可以了,
但如果我们想创建自己的镜像,或者想理解Docker为什么是轻量级就非常有必要学习这部分知识了。

下面来个简单的示例:
1.下载官方hello-world镜像:

docker pull hello-world

2.运行:

docker run hello-world

如下图:
在这里插入图片描述

以上是简单的运用自定义镜像的示例,那么接下来我们怎么生成属于自己的镜像呢?

1.编写dockerfile文件

编写文件之前,我们先了解一下他的指令:
指定基础镜像:

FROM centos:6

ENV 设置环境变量:

ENV key value

COPY 拷贝本地文件到镜像的指定目录 :
例如 拷贝数据库配置文件到tmp目录:

COPY ./mysql-5.7.rpm /tmp

RUN 执行Linux的shell命令,一般是安装过程的命令:

RUN yum install gcc

EXPOSE 指定容器运行时监听的端口,是给镜像使用者看的

EXPOSE 8080

ENTRYPOINT 镜像中应用的启动命令,容器运行时调用:

ENTRYPOINT java -jar xx.jar

根据以上命令,我们可以来写一个最简单的自定义镜像:

FROM java:8-alpine
COPY ./demo.jar /tmp/app/jar
EXPOSE 8081
ENTRYPOINT java -jar /tmp/app/jar

引入Java的基础镜像:

FROM java:8-alpine

复制我们打包好的Java程序demo.jar到指定目录/tmp/app/jar:

COPY ./demo.jar /tmp/app/jar

暴露自己Java程序的端口8081(你的程序是什么端口就暴露什么端口):

EXPOSE 8081

启动命令:

ENTRYPOINT java -jar /tmp/app/jar

2.生成镜像

在当前dockerfile文件的命令下执行生成镜像命令:
注意最后面有点

docker build -f dockerfile -t myjava:1.0 .

运行结果如下:
在这里插入图片描述
在这里插入图片描述
执行成功,生成myjava:1.0镜像

3.运行容器

docker run --name myjava -d -p 8081:8081 myjava:1.0

在这里插入图片描述

八、自定义网络

Docker 中的自定义网络允许用户在容器之间创建虚拟网络,以便在容器之间进行通信。自定义网络可以帮助解决多容器应用之间的网络通信问题,使容器可以在不同的网络环境中独立运行。只有加入同一个网络,容器之间才可以相互访问!
在这里插入图片描述
常用命令如下:

docker network create networktest
docker network ls
docker network connect 网络名 容器名

在这里插入图片描述

九、部署java应用

1.导入dockerfile和jar文件
在这里插入图片描述
dockerfile文件如下:

# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY hm-service.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

2.移动到当前目录下,构建镜像

docker build -t hmall .

3.运行容器

docker run -d --name hm -p 8080:8080 hmall

4.加入和mysql一样的网络

docker network connect 网络名 容器名

总结

以上内容为记录自己初学docker的一系列操作,如有错误,欢迎指正!

@作者:加辣椒了吗?
简介:憨批大学生一枚,喜欢在博客上记录自己的学习心得,也希望能够帮助到你们!
在这里插入图片描述

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

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

相关文章

为什么小程序做好了,却运营不起来?

​在小程序开发完成并投入市场后,许多商家发现小程序虽然做得很精美,但是却无法吸引到足够的用户,更谈不上留住用户了。那么,为什么小程序做好了却运营不起来呢?本文将就此问题进行探讨。 一、缺乏运营策略 很多商家在…

0002Java安卓程序设计-springboot合同管理APP论文

文章目录 摘 要目 录系统设计开发环境 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤&#xff0c…

在Spring Boot中使用国产数据库连接池Druid

在我们实际开发过程中,我们经常使用的是DriverManager来获取,通过每次都向数据库建立连接时将Connection加载到内存中,然后验证用户名和密码,这段时间的消耗大致在0.0 5s - 1s左右,每次当我们需要获取数据库连接的时候…

“利用自动粘贴功能,一键粘贴网址,提升工作效率“

在快节奏的现代工作中,效率是关键。如果你经常需要复制和粘贴网址,那么你可能会浪费很多时间。幸运的是,我们的自动粘贴功能可以帮助你自动粘贴网址,一键即可完成,让你更加高效地工作。 首先, 我们要进入首…

操作系统复习(1)概述

一、序言 1.1简介 计算机系统组成:硬件操作系统 操作系统是计算机系统中的一个重要组成部分,它负责管理和控制计算机的硬件资源和软件资源,以及提供用户接口和其他功能 操作系统定义:操作系统是计算机系统中的一个系统软件&…

代码随想录算法训练营第23期day38|动态规划理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

目录 一、动态规划理论基础 1.动态规划的解题步骤 2.动态规划应该如何debug 二、(leetcode 509)斐波那契数 1.递归解法 2.动态规划 1)确定dp数组以及下标的含义 2)确定递推公式 3)dp数组如何初始化 4&#x…

PMIC、电源管理MAX77646ANP、MAX77647AANP、MAX77675AEWE、MAX77847AEWL DC-DC 开关稳压器

一、MAX77646ANP、MAX77647AANP 低IQ SIMO PMIC支持原电池应用的1.8V工作电压 MAX77646/MAX77647为尺寸和效率至关重要的低功耗应用提供电源解决方案。该IC集成单电感多输出(SIMO)降压/升压稳压器,可通过单个电感提供三个可独立编程的电源轨,尽可能地减…

PageRank算法c++实现

首先用邻接矩阵A表示从页面j到页面i的概率,然后根据公式生成转移概率矩阵 M(1-d)*Qd*A 常量矩阵Q(qi,j),qi,j1/n 给定点击概率d,等级值初始向量R0,迭代终止条件e; 计算Ri1M*R…

选哪个内衣洗衣机比较好?觉飞和希亦内衣洗衣机对比测评

如今,随着物质生活水平的不断提升,消费者更加追求健康、品质化的生活。而反映在衣物清洁上,诸如像贴身衣物的深度清洁、儿童和成人衣物的分洗等细分场景下的洗护需求也变得越来越多,内衣物洗衣机也因此应运而生。现在市面上关于内…

【RabbitMQ】RabbitMQ 消息的堆积问题 —— 使用惰性队列解决消息的堆积问题

文章目录 一、消息的堆积问题1.1 什么是消息的堆积问题1.2 消息堆积的解决思路 二、惰性队列解决消息堆积问题2.1 惰性队列和普通队列的区别2.2 惰性队列的声明方式2.3 演示惰性队列接收大量消息2.4 惰性队列的优缺点 一、消息的堆积问题 1.1 什么是消息的堆积问题 消息的堆积…

修复dinput8.dll文件的缺失,以及修复dinput8.dll文件时需要注意什么

dinput8.dll文件通常在使用大型游戏时容易出现dinput8.dll文件丢失的情况,今天这篇文章将要教大家修复dinput8.dll文件的缺失,同时在修复dinput8.dll文件时需要注意些什么?防止文件在修复的过程中出现其他的错误。 dinput8.dll是DirectInput库…

[自定义 Vue 组件] 小尾巴下拉菜单组件(2.0) TailDropDown

文章归档:https://www.yuque.com/u27599042/coding_star/kcoem6dgyn8drglb [自定义 Vue 组件] 下拉菜单(1.0) DropDownMenu:https://www.yuque.com/u27599042/coding_star/llltv52tchmatwg4 组件效果示例 组件所依赖的常量 在 src 目录下,创…

商品礼品卡券提货码商城小程序开发

礼品商品提货码卡密卷商城系统开发 本系统为方便各类商品、产品福利等,能以电子化形式发放,用通过手机端直接邮寄提货而开发使用。 主要功能包含:1、后台批量卡密生产2、前端卡密输入兑换提货 应用界面 1、兑换页输入卡券账号和密码&#…

模拟实现简易版shell(需要单独处理 ls+cd+export)

目录 minishell -- 简易版shell 大致思路 注意点 ls cd export 代码 minishell -- 简易版shell 大致思路 首先确定,我们的shell是一直在运行的(while(1))每次都会有提示信息打印出来 [xxxxxx x]输入命令(选项),其中,我们需要将读入的字符串分开,不然只是没有意义的字符…

HNU程序设计 练习五-函数

1.小熊买糖果 【问题描述】 小熊去到商店,选择了一种它非常喜欢的糖果,其单价为 k 元,假定商店里有无穷多的这种糖果。 它的父亲允许它花费任意多的10元硬币和一个 r 元硬币去购买,但不能找零,请帮助小熊确定它能购买…

Docker基础(简单易懂)

目录 一、docker是什么 核心概念 二、docker安装 1、卸载docker 2、使用yum 安装 三、docker常用命令 1、帮助命令 2、镜像命令 1)查看镜像 2)查询镜像 3)拉取镜像 4)删除镜像 3、容器命令 四、容器数据卷 五、Dock…

在全球半导体行业中“疯狂冒险”的台积电

来源:猛兽财经 作者:猛兽财经 总结: (1)尽管在收入和利润率方面面临挑战,但台积电(TSM)仍在为自己在半导体行业的复苏做准备。 (2)台积电的全球扩张和先进技术战略使其能够充分利用…

Windows10+CLion+OpenCV4.5.2开发环境搭建

目录 OpenCV准备下载解压环境变量配置 clion配置新建工程选择编译工具编写CMakeLists.txt将OpenCV执行的一些动态链接库复制到项目目录下编写测试代码 OpenCV准备 下载 官网:OpenCV 往下滑,找到自己需要下载的版本。我下载的是4.5.2。 解压 选择好解…

dockerfile避坑笔记(VMWare下使用Ubuntu在Ubuntu20.04基础镜像下docker打包多个go项目)

一、docker简介 docker是一种方便跨平台迁移应用的程序,通过docker可以实现在同一类操作系统中,如Ubuntu和RedHat两个linux操作系统中,实现程序的跨平台部署。比如我在Ubuntu中打包了一个go项目的docker镜像(镜像为二进制文件&am…

“如何对TXT文件的内容进行连续行删除?实现一键文件整理!

如果你有一个TXT文件,需要删除其中的连续行,这可能是为了整理文件、去除重复信息或清除不需要的文本。尽管手动删除每一行可能很耗时,但幸运的是,有一个简单而高效的方法可以帮助你实现这个目标。 首先,在首助编辑高手…