Docker-

Docker为什么出现

开发过程中开发者之间会遇到版本,环境等问题。如何确保应用能够在这些环境中运行和通过质量检测?且避免版本,配置问题,也无需编写代码和进行故障修复?

使用容器。Docker 之所以发展的如此迅速,是因为他对上列问题提供了一个标准化的解决方案---------系统平滑移植,容器虚拟化技术。

软件可以带环境安装? 安装的时候,把原始环境一模一样的复制过来。开发人员利用 Docker 可以消除协作编码时 “在我的机器上可以运行”的问题。
在这里插入图片描述
Docker的出现 使得 Docker 得以打破过去 【程序即应用】的观念。透过镜像 (images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。

Docker理念

Docker 是基于 Go 语言实现的云开源项目。

一次镜像,处处运行。(在 Linux 的基础上发展过来的、大大简化了操作)

解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。

传统虚拟机和容器的对比

虚拟机:就是带环境安装的一种解决方案。

缺点:资源占用多、冗余步骤多、启动慢。

为解决以上缺点 LInux发展出了另一种虚拟化技术:Linux容器(LXC)

Linux 容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。因此在开发到测试到生产的整个过程中,都具有可移植性和一致性。

Linux 容器不是模拟一个完整的操作系统而是对进程进行隔离。

容器与虚拟机不同,不需要捆绑一整套操作系统(只需要软件工作中所需的库资源和设置------打包到一个隔离的容器中)。

Docker 容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统的虚拟机则是在硬件层面实现虚拟化。与传统的虚拟机相比, Docker 优势体现在启动速度快,占用体积小。

比较了Docker 和传统虚拟化方式的不同之处:

传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;

容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源。

Docker 能干吗

技术职级变化
coder
programmer
software engineer

开发/运维(DevOps)新一代开发工程师

1、一次构建、随处运行

  • 更快的应用交付和部署
  • 更便捷的升级和扩容缩
  • 更简单的系统运维
  • 更高效的计算机资源利用(Docker 是内核级虚拟化)

2、Docker 的运用场景

在这里插入图片描述
Docker 借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker将这个mo型运用到自己的设计中,唯一不同的是:集装箱运输货物,而Docker 运输软件。

哪些企业在使用

CentOs Docker安装

Docker并非是一个通用的容器工具,它依赖于已存在并运行的Linux内核环境。Docker实质上是在已经运行的Linux下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的Linux主机。因此,Docker必须部署在Linux内核的系统上。如果其他系统想部署Docker就必须安装一个虚拟Linux环境。
在这里插入图片描述

在Windows上部署Docker的方法都是先安装一个虚拟机,并在安装Linux系统的的虚拟机中运行Docker。

前提条件

目前,CentOS仅发行版本中的内核支持Docker。Docker运行在CentOS 7(64-bit)上,要求系统为64位、Linux系统内核版本为3.8以上。

查看自己的内核

cat /etc/redhat- release
uname -r

Docker 的基本组成

镜像(image)、容器(container)、仓库(repository

镜像(image)

Docker镜像(lmage)就是一个只读的模板。镜像可以用来创建Docker容器,一个镜像可以创建很多容器。它也相当于是一个root文件系统。比如官方镜像centos:7就包含了完整的一套centos:7最小系统的 root文件系统。相当于容器的“源代码”,docker镜像文件类似于Java的类模板,而docker容器
实例类似于java中new出来的实例对象。
在这里插入图片描述

在这里插入图片描述

容器(container)

1、从面向对象角度

Docker利用容器(Container)独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。就像是Java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。

2、从镜像容器角度

可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

仓库(repository)

仓库(Repository)是集中存放镜像文件的场所。

类似于
Maven仓库,存放各种jar包的地方;
github仓库,存放各种git项目的地方;
Docker公司提供的官方registry被称为Docker Hub,存放各种镜像模板的地方。

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是 Docker Hub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云、网易云等。

小总结

需要正确的理解仓库/镜像/容器这几个概念:

Docker本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是image镜像文件。只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。

image文件可以看作是容器的模板。Docker根据 image文件生成容器的实例。同一个image文件,可以生成多个同时运行的容器实例。

镜像文件

image文件生成的容器实例,本身也是一个文件,称为镜像文件。

容器实例

一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器

仓库

就是放一堆镜像的地方,我们可以把镜像发布到仓库中,需要的时候再从仓库中拉下来就可以了。

Docker 平台架构图解(入门)

在这里插入图片描述
Docker 的工作原理

Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。容器,是一个运行时环境,就是我们前面说到的集装箱。可以对比mysql演示对比讲解。
在这里插入图片描述

Docker 平台架构图解(架构版)

整体架构及底层通信原理简述

Docker是一个CIS模式的架构,后端是一个松耦合架构,众多模块各司其职。

Docker运行的基本流程为:

1、用户是使用Docker Client与Docker Daemon建立通信,并发送请求给后者。

2、Docker Daemon作为Docker架构中的主体部分,首先提供Docker Server的功能使其可以接受Docker Client的请求。

3、Docker Engine执行Docker内部的一系列工作,每一项工作都是以一个Job的形式的存在。

4、Job的运行过程中,当需要容器镜像时,则从Docker Registry中下载镜像,并通过镜像管理驱动Graph driver将下载镜像以Graph的形式存储。

5、当需要为Docker创建网络环境时,通过网络管理驱动Network driver创建并配置Docker容器网络环境。

6、当需要限制Docker容器运行资源或执行用户指令等操作时,则通过Exec driver来完成。

7、Libcontainer是一项独立的容器管理包,Network driver以及Exec driver都是通过Libcontainer来实现具体对容器进行的操作。

在这里插入图片描述

安装步骤

1、确定是CentOs7 及以上版本
2、卸载旧版本
3、yum 安装 gcc 相关

yum -y install gcc
yum -y install gcc- c++ //可以不执行

4、安装需要的软件包

官网要求
在这里插入图片描述
执行命令

yum install -y yum-utils

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo  默认国外的

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  阿里云

注意:最好不要执行下列命令(国外的)
在这里插入图片描述
在这里插入图片描述

5、设置 stable 镜像仓库
6、更新 yum 软件包索引

yum makecache fast

7、安装 DOCKER CE

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

8、启动docker

systemctl start docker

9、测试

docker version
docker run hello-world

10、卸载

systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

阿里云镜像加速

注意:在执行第九步的时候报错:
在这里插入图片描述
执行:

vi /etc/docker/daemon.json

添加:

{ 
"registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"] 
}

{
“registry-mirrors”: [“https://8y2y8njn.mirror.aliyuncs.com”]
}

然后重启服务即可

官网:
在这里插入图片描述

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://w5krmtii.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Helloword

启动 Docker 后容器(测试运行 hello-world)

  • docker run hello-world
  • run 干了什么
    在这里插入图片描述

底层原理(为什么Docker会比VM虚拟机快)

1、docker有着比虚拟机更少的抽象层

由于docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化.运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。

2、docker利用的是宿主机的内核,而不需要加载操作系统OS内核

当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。进而避免引寻、加载操作系统内核返回等比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker容器只需要几秒钟。
在这里插入图片描述
在这里插入图片描述

帮助启动类命令

  • 启动docker: systemctl start docker
  • 停止docker: systemctl stop docker
  • 重启docker: systemctl restart docker
  • 查看docker状态: systemctl status
  • docker 开机启动: systemctl enable docker
  • 查看docker概要信息: docker info
  • 查看docker总体帮助文档: docker --help
  • 查看docker命令帮助文档: docker 具体命令 --help

镜像命令

  • 列出本地主机上的镜像:docker images

    • OPTIONS说明:
      a :列出本地所有的镜像(含历史映像层)
      q :只显示镜像ID。
  • docker search 某个XXX镜像名字

    • 网站:https://hub.docker.com
    • docker search [OPTIONS] 镜像名字
    • –limit : 只列出N个镜像,默认25个
    • docker search --limit 5 redis
  • docker pull 某个XXX镜像名字(下载镜像)

    • docker pull 镜像名字[:TAG]
    • docker pull 镜像名字
      • 没有TAG就是最新版 ==== docker pull 镜像名字:latest
      • docker pull ubuntu
        在这里插入图片描述
  • docker system df 查看镜像/容器/数据卷所占的空间 在这里插入图片描述

  • docker rmi 某个XXX镜像名字 || ID (删除镜像)
    - 删除单个:docker rmi -f 镜像ID
    - 删除多个:docker rmi -f 镜像名1:TAG 镜像名2:TAG
    - 删除全部:docker rmi -f $(docker images -qa)

面试题:谈谈docker虚悬镜像是什么?

仓库名、标签都是< none >的镜像,俗称虚悬镜像dangling image

在这里插入图片描述

有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示 docker pull ubuntu)

如何删除虚悬镜像?

查看虚悬镜像

docker images -f dangling=true

删除虚悬镜像

docker rmi $(docker images -q -f dangling=true)

容器命令

新建+启动容器:

docker run [OPTIONS] IMAGE [COMMAND] [ARG…]

OPTIONS说明(常用):有些是一个减号,有些是两个减号

--name="容器新名字"为容器指定一个名称;
-d:后台运行容器并返回容器ID,也即启动守护式容器(后台运行);
-i:以交互模式运行容器,通常与t同时使用;
-t:为容器重新分配一个伪输入终端,通常与-i同时使用;也即启动交互式容器(前台有伪终端,等待交互);
-P:随机端口映射,大写P
-p:指定端口映射,小写p

在这里插入图片描述

启动交互式容器(有伪终端)

run -it ubuntu /bin/bash
run -it ubuntu
//这两个命令都可以

在这里插入图片描述

列出当前所有正在运行的容器:

docker ps

在这里插入图片描述
OPTIONS说明(常用):
-a :列出当前所有正在运行的容器+历史上运行过的
-l:显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。

退出、启动已停止、重启、停止—容器

退出容器

命令作用
ctrl+p+qrun进去容器,ctrl+p+q退出,容器不停止
exitrun进去容器,exit退出,容器停止
docker start 容器ID或者容器名启动已停止运行的容器
docker restart 容器ID或者容器名重启容器
docker stop 容器ID或者容器名停止容器

强制停止、删除已停止的----容器

命令作用
docker kill 容器ID或容器名强制停止容器
docker rm 容器ID删除已停止的容器

一次性删除多个容器实例(尽量不用)

docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm

重要

有镜像才能创建容器,这是根本前提(下载一个Redis6.0.8镜像演示)

命令作用
docker run -d 容器名启动守护式容器(后台服务器)
docker run -it redis:6.0.8redis 前台启动演示case
docker run -d redis:6.0.8redis 后台启动演示case
docker logs 容器ID查看容器日志
docker top 容器ID查看容器内运行的进程
docker inspect 容器ID查看容器内部细节

进入正在运行的容器并以命令行交互====面试

docker exec -it 容器ID /bin/bash

重新进入=======面试

docker attach 容器ID

上述两个区别:
attach 直接进入容器启动命令的终端,不会启动新的进程
用exit退出,会导致容器的停止。

exec 是在容器中打开新的终端,并且可以启动新的进程
用exit退出,不会导致容器的停止。

推荐大家使用 docker exec 命令,因为退出容器终端,不会导致容器的停止。
一般用-d后台启动的程序,再用exec进入对应容器实例

命令作用
docker cp 容器ID:容器内路径 目的主机路径从容器内拷贝文件到主机上
docker export 容器ID > 文件名.tar导出容器
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号导入容器

镜像分层的概念

分层的镜像

在下载景象的时候,是一层一层的下载的。

UnionFS(联合文件系统)

Union文件系统〈UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual
filesystem)。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

Docker镜像加载原理

docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是引导文件系统bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。

rootfs (root file system),在bootfs之上。包含的就是典型Linux系统中的/dev,/proc, /bin, /etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。
在这里插入图片描述
在这里插入图片描述

为什么Docker 镜像采用分层

镜像分层最大的一个好处就是共享资源,方便复制迁移,就是为了复用。
比如说有多个镜像都从相同的 base镜像构建而来,那么Docker Host只需在磁盘上保存一份base镜像;同时内存中也只需加载一份base镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

Docker镜像层都是只读的,容器层是可写的。当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。

commit 创建镜像

docker commit提交容器副本使之成为一个新的镜像

docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]

在这里插入图片描述

默认的Ubuntu是不带vim的,安装命令:

先更新包管理工具:

apt-get update

更新安装vim

apt-get install vim

小总结:

Docker中的镜像分层,支持通过扩展现有镜像,创建新的镜像。类似Java继承于一个Base基础类,自己再按需扩展。新镜像是从base镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层
在这里插入图片描述

本地镜像发布到阿里云与拉取

在阿里云控制台进入容器镜像服务,选择个人实例,新建命名空间和镜像仓库,点击镜像仓库的管理,里面有上传的脚本

在这里插入图片描述

Docker Registry私有库

下载镜像Docker Registry:docker pull registry

运行私有库Registry 、相当于本地有个私有 Docker hub

docker run -d -p 5000:5000 -v /tmp/host_data/:/tmp/con_data --privileged=true registry

运行原始 ubuntu,若没有则拉取:docker run -it ubuntu

原始的 ubuntu 没有ifconfig命令,安装ifconfig命令

apt-get update
apt-get install net-tools

安装完成后,commit我们自己的新镜像

docker commit -m=“add config” -a=“dudu” ebedd80c10ab ubuntu_ifconfig:1.0

启动新镜像,ifconfig 执行成功
在这里插入图片描述

curl验证私服库上有什么镜像

curl -XGET http://192.168.6.99:5000/v2/_catalog

在这里插入图片描述
使用daocker tag 将 ubuntu_ifconfig:1.0 镜像修改符合私服规范的Tag

docker tag ubuntu_ifconfig:1.0 192.168.6.99:5000/ubuntu_ifconfig:1.0

修改配置文件使之支持http

"insecure-registries": ["192.168.6.99:5000"]

在这里插入图片描述

push推送到私服库
如果拒绝连接的话,重新启动一下私有仓库

docker push 192.168.6.99:5000/ubuntu_ifconfig:1.0

此时curl验证私服库上有什么镜像

curl -XGET http://192.168.6.99:5000/v2/_catalog

在这里插入图片描述
pull到本地并运行(首先把本地的镜像删除)

docker pull 192.168.6.99:5000/ubuntu_ifconfig:1.0

Docker 容器数据卷

坑:容器卷记得加入 --privileged=true
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
有点类似我们Redis里面的rdb和aof文件
将docker容器内的数据保存进宿主机的磁盘中
运行一个带有容器卷存储功能的容器实例

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名

特点:

1:数据卷可在容器之间共享或重用数据
2:卷中的更改可以直接实时生效,爽
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止

宿主vs容器之间映射添加容器卷

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名

默认同上案例,默认就是rw 可读可写

查看数据卷是否挂载成功

docker inspect 容器ID

读写规则映射添加说明(只读,容器只能读不能写)
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

docker上安装常用软件说明

搜索镜像
拉取镜像
查看镜像
启动镜像------服务端口映射
停止容器
移除容器

安装 tomcat

搜索镜像:docker search tomcat
拉取镜像:docker pull tomcat
查看镜像:docker images tomcat
使用 tomcat 镜像创建容器实例(也叫运行镜像)
docker run -it -p 8080:8080 tomcat
docker run -d -p 8080:8080 tomcat =======守护进程

在这里插入图片描述

此时在虚拟机中访问tomcat会报404(http://localhost:8080/)
在这里插入图片描述
这是因为tomca最t新版本对首页的访问发生了改变
解决:
进入到tomcat镜像中 把webapps删除然后把webapps.dist改成webapps
因为webapps里面是空的

 mv webapps.dist/ webapps

然后就可以正常访问

在这里插入图片描述
免修改版

docker pull billygoo/tomcat8-jdk8
docker run -d -p 8080:8080 tomcat
也可以执行一条命令
docker run -d -p 8080:8080 billygoo/tomcat8-jdk8

可以指定镜像的名称

在这里插入图片描述

安装mysql

docker hub 上查找mysql 镜像

docker search mysql

从 docker hub 上拉取mysql镜像到本地标签为5.7

docker pull mysql:5.7

使用mysql5.7镜像创建容器(运行镜像)

简单版

使用mysql镜像

docker run -p 3305:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

官网

docker run -it --network some-network --rm mysql mysql -hsome-mysql -uexample-user -p

在这里插入图片描述
进入mysql容器

 docker exec -it ed3215426cd7 /bin/bash

在这里插入图片描述
进入mysql

mysql -uroot -p
回车输入密码

创建数据库

 create database db01;
 使用数据库
 use db01;
 新建表
 create table t1(id int,name varchar(20));
 添加数据
insert into t1 values(1,"z3");
查看表中数据
elect *from t1;

外部windows也来连接运行在docker上的mysql容器实例服务

在这里插入图片描述

在这里插入图片描述

问题
在docker中的mysql中或者在windows中添加数据时,添加中文都会报错(docker上默认字符集编码隐患)
在docker里面的mysql容器实例查看,输入:

SHOW VARIABLES LIKE 'character%';

在这里插入图片描述
删除容器后,里面的mysql数据如何办

实战版

新建mysql容器实例

docker run -d -p 3305:3306 --privileged=true -v /dudu/mysql/log:/var/log/mysql -v /dudu/mysql/data:/var/lib/mysql -v /dudu/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7

新建my.cnf======通过容器卷同步给mysql容器实例

my.cnf在刚刚的容器卷/dudu/mysql/conf下

[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8

重新启动mysql 容器实例再重新进入并查看字符编码
在这里插入图片描述
linux已经装了mysql为了避免冲突使用id

docker restart e3c8fac81805

进入数据库

docker exec -it mysql bash
mysql -uroot -p

在这里插入图片描述

查看编码

SHOW VARIABLES LIKE 'character%';

在这里插入图片描述

再新建库建表再插入中文测试
在这里插入图片描述

结论

之前的DB无效

修改字符集操作+重启mysql容器实例

之后的DB 有效,需要新建

结论:docker安装完MySQL并run出容器后,建议请先修改完字符集编码后再新建mysql库-表-插数据

假如将当前容器实例删除、再重新来一次、之前建的db01还有用吗?

如果把当前容器实例删除,如果是实战版挂载了容器卷再次使用实战版的新建mysql实例,里面的数据还存在

安装redis

拉取镜像

docker pull redis:6.0.8

启动并端口映射(linux装过Redis了 和本地映射写成6380)

docker run -d -p 6380:6379 redis:6.0.8

进入

docker exec -it 35b7178623bb bash

redis-cli

以上步骤没有进行一些配置删了重新进行相关配置

docker rm -f 35b7178623bb
35b7178623bb  是redis的id

=================================================

命令提醒:容器卷记得加入–privileged=true
在CentOS宿主机下新建目录/app/redis

mkdir -p /app/redis

将一个redis.conf文件模板拷贝进/app/redis目录下
在这里插入图片描述

修改redis.conf文件

在这里插入图片描述

使用redis6.0.8镜像创建容器(也叫运行镜像)

docker run -p 6380:6379 --name myr3 --privileged=true -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf

进入容器

docker exec -it myr3 bash
两者都可
docker exec -it myr3 /bin/bash

测试
在这里插入图片描述

如何证明docker启动使用了我们自己指定的配置文件

在这里插入图片描述

这是第一次启动后
在这里插入图片描述
修改/app/redis下的redis.conf文件
在这里插入图片描述
重启容器实例

docker restart myr3

在这里插入图片描述

安装 Nginx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值