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


前言

什么是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的一系列操作,如有错误,欢迎指正!

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加辣椒了吗?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值