什么是Docker容器?一文带你了解,看完直接学会

2023-11-14

一:为什么需要Docker容器?

1.引入

1.1麻烦的环境部署

1.在软件开发中,最麻烦的事情之一就是环境配置。在正常情况下,如果要保证程序能运行,我们需要设置好操作系统,以及各种库和组件的安装。



 



2.举例来说,要运行一个Python程序,计算机必须要有 Python 引擎,还需要安装好程序的各种依赖,甚至还要配置特定的环境变量。假设你有两个程序都需要部署在同一个服务器上,一个需要软件是基于Python2.0,一个是Python3.0,那么在部署上就很容易造成混乱。因为不同版本的Python模块可能互不兼容,况且不同开发环境上的库也需要额外的配置。如果要部署很多程序,而开发环境和部署环境各不相同的话,可想而知配置得多么麻烦。



 



3.为了更好地将软件从一个环境移植到另一个环境上,必须从根源上解决问题,那么如何在移植软件的时候,将一模一样的原始环境迁移过来呢?

1.2虚拟机(Virtual Machine)

虚拟机是移植环境的一种解决方案。虚拟机本质上也是一个软件,在这个软件中,我们可以运行另一种操作系统。比如我们想要在 MacOS 上运行 Linux 系统,我们就在电脑上安装 Linux 镜像,并使用虚拟机打开此镜像,就能创建出一个镜中镜了。这个方案非常方便,想要新环境,就安装镜像,然后使用虚拟机打开,不想要直接删除。但是这个方案有几个缺点:
  1. 占用资源多:虚拟机需要安装整个操作系统,自然会消耗大量内存和硬盘空间。如我们只需要运行1MB的软件,有时候也不得不安装几个G的环境才能运行。
  2. 运行步骤冗余:虚拟机安装的是完整的系统,每次运行程序都需要按部就班,打开系统、登入用户等等之类麻烦的步骤,很不方便。
  3. 运行速度慢:为了运行特定环境中的软件,虚拟机必须先运行系统,而系统占用的资源往往很多(网络,GUI,IO等等),自然也会影响运行速度。

1.3Linux容器(Container)

为了解决虚拟机存在的这些缺点,Linux发展出了另一种虚拟化的技术:Linux容器。Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,就是在正常进程的外面套用了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层程序的隔离。由于容器是进程级别的,相比虚拟机有更多优势:

  1. 占有资源少:容器只占用需要的资源,不占用那些用不到的资源。相比于虚拟机安装完整的操作系统,容器需要消耗的空间自然就少了很多。
  2. 资源利用率高:虚拟机都是独享资源,电脑需要为每个虚拟环境单独分配资源,不仅仅占用空间大,而且资源的利用率很低。而容器之间可以共享资源,最大化资源的利用率。
  3. 运行速度快:容器里面的应用就是底层系统的一个进程,所以启动容器相当于直接运行本机的一个进程,而不是一个完整并臃肿的操作系统,自然就快很多。

img

二:Docker是什么?

1.Docker简介

Docker属于Linux容器的一种封装,提供简单易用的容器使用接口,它也是目前最流行的Linux容器解决方案。Docker 将软件代码和其依赖,全打包在一个文件中。运行单个文件,就会生成虚拟容器。在这个虚拟容器中,不管本地的操作系统是如何的不同,此容器都能照常运行。



 



简而言之,Docker的接口非常简单,可以帮助用户更好地创建和使用容器,让相同的代码在不同的环境上正常运行。

2.Docker的用途

Docker目前主要有以下三个用途:

  1. 提供一次性的环境:本地测试别人的软件、持续集成的时候提供单元测试和构建的环境。
  2. 提供弹性的云服务:因为Docker容器可以随时启动或关闭,所以非常适合动态规划和缩容。
  3. 组建微服务构架:通过多个容器,服务的部署能更加灵活,帮助实现微服务构架。
  4. 不需要虚拟硬件和操作系统,轻量级,占用体积小,启动快

3.Docker容器 VS VM

Docker容器和传统VM技术,在技术实现上有所不同。下图显示的是VM与Docker容器的逻辑组成:

  • VM:使用Hypervisor提供虚拟机的运行平台,管理每个VM中操作系统的运行。每个VM都要有自己的操作系统、应用程序和必要的依赖文件等。
  • Docker容器:使用Docker引擎进行调度和隔离,提高了资源利用率,在相同硬件能力下可以运行更多的容器实例;每个容器拥有自己的隔离化用户空间。

img

img

Server:相当于云服务器



Host OS:为操作系统



Docker Engine:可以认为我们在这个操作系统上安装了一个docker的软件



App A:在Docker组件中运行App A



App B:在Docker组件中运行App B



# 所以docker完全没有操作系统的概念,用的还是宿主机的操作系统,但是它做出了隔离。也实现了虚拟化。

虚拟机与Docker容器对比

img

三:Docker容器是如何工作的?

1.Docker的三大组成要素:

  • 镜像:Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数。 镜像不包含任何动态数据,其内容在构建之后也不会被改变。镜像可以用来创建Docker容器,用户可以使用设备上已有的镜像来安装多个相同的Docker容器。
  • 容器:镜像创建的运行实例,Docker利用容器来运行应用。每个容器都是相互隔离的、保证安全的平台。我们可以把容器看做是一个轻量级的Linux运行环境。
  • 镜像仓库:集中存放镜像文件的地方。用户创建完镜像后,可以将其上传到公共仓库或者私有仓库,需要在另一台主机上使用该镜像时,只需要从仓库上下载即可。

Docker容器的运行逻辑如下图所示,Docker使用客户端/服务器 (C/S) 架构模式,Docker守护进程(Docker daemon)作为Server端接收Docker客户端的请求,并负责创建、运行和分发Docker容器。Docker守护进程一般在Docker主机后台运行,用户使用Docker客户端直接跟Docker守护进程进行信息交互。

img

2.*Docker运行流程*

其中:

  • Docker客户端:用于和Docker守护进程(Docker Daemon)建立通信的客户端。Docker客户端只需要向Docker服务器或者守护进程发出请求(Docker构建、Docker拉取和Docker启动等指令),服务器或者守护进程将完成所有工作并返回结果。

    • 如橙色流程所示,执行Docker构建指令会根据Docker文件构建一个镜像存放于本地Docker主机。
    • 如蓝色流程所示,执行Docker拉取指令会从云端镜像仓库拉取镜像至本地Docker主机或将本地镜像推送至远端镜像仓库。
    • 如黑色流程所示,执行Docker启动指令会将镜像安装至容器并启动容器。
  • Docker主机:一个物理或者虚拟的机器用于执行 Docker守护进程和容器。

  • Docker守护进程:接收并处理Docker客户端发送的请求,监测Docker API的请求和管理Docker对象,比如镜像、容器、网络和数据卷。

4.Docker服务器与客户端

Docker是一个客户端-服务端(C/S)架构程序,Docker客户端只需要向Docker服务器或者守护进程发送请求即可,服务器或者守护进程将完成所有工作并返回结果,Docker提供了一个命令行工具以及一正太Restful Api,我们可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地Docker客户端连接运行在另外一台宿主机的Docker的守护进程。

img

# 使用了RESTful API的目的就是为了统一规范,无需自己在生成一套体系。现在几乎所有的软件都是通过RESTful API来传输数据。

5.docker非常重要的概念:镜像(image)与容器(container)

1.有了镜像---》镜像运行起来是容器(真正的执行单位)



镜像		: 面向对象的类    



容器		: 对象



    



2. 镜像是从哪里来的?    



-镜像就是一堆文件



-从远程仓库获取(拉取)

四:docker架构图

Docker是一个客户端-服务器(C/S)架构程序(mysql,redis都是cs架构),整套RESTful API
  • Docker客户端(Docker Client)

•Docker客户端(Docker Client)是用户与Docker进行交互的最主要方式。当在终端输入docker命令时,对应的就会在服务端产生对应的作用,并把结果返回给客户端。Docker Client除了连接本地服务端,通过更改或指定DOCKER_HOST连接远程服务端。

  • Docker服务端(Docker Server)

•Docker Daemon其实就是Docker 的服务端。它负责监听Docker API请求(如Docker Client)并管理Docker对象(Docker Objects),如镜像、容器、网络、数据卷等

  • Docker Registries

•俗称Docker仓库,专门用于存储镜像的云服务环境.
•Docker Hub就是一个公有的存放镜像的地方,类似Github存储代码文件。同样的也可以类似Github那样搭建私有的仓库。

  • Docker 对象(Docker Objects)

•镜像:一个Docker的可执行文件,其中包括运行应用程序所需的所有代码内容、依赖库、环境变量和配置文件等。
•容器:镜像被运行起来后的实例。
•网络:外部或者容器间如何互相访问的网络方式,如host模式、bridge模式。
•数据卷:容器与宿主机之间、容器与容器之间共享存储方式,类似虚拟机与主机之间的共享文件目录。

docker pull :  拉取镜像(从远程仓库中获取放到Images)



docker run  :  运行镜像(运行镜像后就会放到容器里)



docker container :  查看运行了那些镜像(容器)



docker image :  查看有那些镜像 



docker network :  查看网络



docker valume :  查看数据表等



    - 数据表等建议放到宿主机上,因为如果一旦容器删除了,在容器上的数据表就没有了。

docker 三大要素:镜像(image)、容器(container)、仓库(repository)

1.镜像:就是一个只读的模板,镜像可以用来创建docker容器,一个镜像可以创建很多容器



 



2.容器:用镜像创建的实例,可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、网络空间等)和运行在其中的应用程序。容器与镜像的关系类似于面向对象编程中的类和对象,镜像好比是类,那么容器则是对象



 



3.仓库是集中存放镜像文件的场所。仓库(repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。仓库又分为公开仓库(public)和私有仓库(private)两种形式。最大的仓库是DockerHub (https://hub.docker.com),存放了数量庞大的镜像供用户下载。国内的公有仓库包括阿里云、网易云等。



 



 



docker本身就是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就似乎image镜像文件。只有通过镜像文件才能生成docker容器。image文件可以看做是容器的模板。docker根据image文件生成容器实例。同一个image文件,可以生成多个可以同时运行的容器实例。



 



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



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



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

五:docker安装

1 windows安装

1 windows安装(不建议你装)http://get.daocloud.io/

2.乌班图安装:

# 0 卸载



sudo apt-get remove docker docker-engine docker.io containerd runc



# 1 安装必要工具



sudo apt-get update



sudo apt-get install \



    apt-transport-https \



    ca-certificates \



    curl \



    gnupg-agent \



    software-properties-common



# 2 安装GPG证书



curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -



#换成阿里云



curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -



# 2 写入软件源信息



#官方



sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"



#换成阿里云



sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"



 



# 3 更新并安装docker-ce



sudo apt-get -y install docker-ce



# 4 开启docker服务



systemctl status docker



 



# 安装成功后,使用 docker version查看



 



如果出现权限禁止,需要切换到root用户执行



 



    su



    输入密码



    docker version

3.cent os安装:(条件7.0以上版本)

0 卸载(如果没有安装过无需卸载)



yum remove docker docker-common  docker-selinux docker-engine



rm -rf /var/lib/docker



 



1 更新yum



yum update



 



2 安装需要的软件包:yum-util (会生成该命令yum-config-manager)



命令:yum install -y yum-utils device-mapper-persistent-data lvm2



 



3 执行(向你的yum源,增加一条记录)



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



    



4 安装 



yum install docker-ce



 



5 验证安装(查看版本)



docker -v  



~]# docker -v  (190312日发布)



# 自从分了docker-ce和docker-ee以后,以年份命名版本



Docker version 19.03.12, build 48a66213fe

注意:自从区分docker-ce和docker-ee之后,docker最初始的版本是17.03,也就是17年发布的,所有17是老版本和新版本的分水岭

img

系统支持情况

img

6 启动docker服务



systemctl start docker



 



7 停止docker服务,重启docker服务



systemctl stop docker



systemctl restart docker



 



8 开机启动	



systemctl enable docker



 



9 查看概要信息



docker info(你可能写了一个管理docker的运维平台)

六:容器镜像的基本操作

1.镜像操作

下载镜像:

# 远程仓库地址:https://hub.docker.com/



	- 注册 登录



    



# 你可以上传镜像(类似于github),你把你制作的镜像传上去,别人可以下载使用



# 搜索镜像:



    方式一:https://hub.docker.com/    点点点搜索



	方式二:docker search 镜像名字



    



# 后面有OK代表官方    

img

# search作用:



	搜索Docker Hub(镜像仓库)上的镜像



# 命令格式:



	docker search [OPTIONS] TERM



# 命令参数(OPTIONS)-f,  --filter filter   	根据提供的格式筛选结果



	     --format string   	利用Go语言的format格式化输出结果



	     --limit int       	展示最大的结果数,默认25--no-trunc        	内容全部显示



        



 #  命令演示



docker search -f is-offical=true ubuntu



docker search ubuntu

img

# 拉取下载镜像



docker pull hello-world  # 最新版本latest



docker pull hello-world:nanoserver  # 指定版本

img

docker pull hello-world:版本号(默认最新,可以指定版本号)

img

查看镜像

# 查看机器上有哪些镜像



# 命令:docker images



# 解释:



 



REPOSITORY  TAG   IMAGE ID   CREATED   SIZE



镜像名字    版本     id号     创建时间   大小

img

运行镜像

# 命令:



docker run 镜像名字



 



docker run hello-world



 



# 例:



第一个hello-world(没有任何意义)



	docker run hello-world



	1 客户端连到服务端,服务下载了hello-world镜像



    2 通过镜像跑起容器来



    3 容器输出一些东西,通过服务端发送给客户端,客户端展示在窗口里了

删除镜像

# 命令:



docker rmi 镜像名字/Id号



 



# 注意:



1.如果还有基于这个镜像的容器,是不允许删除镜像的



2.可以先删除容器,在删除镜像



	# 查询容器依赖	



	docker ps -a



    # 在删除要不允许的镜像



    docker rm 容器/id

2.拉取python3.6镜像,redis最新镜像,mysql5.7镜像,nginx镜像

# 拉取python3.6镜像,redis最新镜像,mysql5.7镜像



    docker pull python:3.8



    docker pull redis



    docker pull mysql:5.7



    docker pull nginx



    docker pull centos:centos7



     



# 查询当前镜像



	docker images

镜像容器是可以看作:

镜像容器是可以看作:



	-镜像就是一堆文件,这堆文件通过docker跑起来,就是容器,你现在就把他当成,一个操作系统内跑了这个软件(比如就是:centos+redis)



    -假设centos7的镜像跑起来,此时容器你就当成在你宿主机上跑了一个centos7的操作系统(虚拟机)

七:容器操作

1 删除容器



 docker rm 容器名字/容器id



    



2 启动并运行容器



	# 通过centos:centos7镜像,创建一个容器名字叫mycentos,并且把它运行起来



    docker run -di --name=mycentos centos:centos7



    # 结果:会打印出容器的id号



 



    



3 查看机器上正在运行的容器



	docker ps



    



4 查看宿主机上所有的容器(包括停止的)



	docker ps -a



    



5 停止容器



	docker stop 容器名字/id号



    



6 启动容器



	docker start 容器id/名字   # id号只要能够区分即可无需写全部

八:补充:配置镜像(提升加速)

# 配置加速(之前去https://hub.docker.com/),阿里云,清华,做了一个备份,配置好以后,再拉镜像会去国内地址拉取



第一步:vi /etc/docker/daemon.json  



第二步:



# 指定清华源,提升拉取加速



{



"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]



}

九:容器的创建和启动

虚拟机的生命周期

img

容器的生命周期

img

1.容器创建 – docker create

# 作用:



	利用镜像创建出一个Created 状态的待启动容器



    



# 命令格式:



	docker create [OPTIONS] IMAGE [COMMAND] [ARG...]



    



# 命令参数(OPTIONS):查看更多



  -t, --tty           		分配一个伪TTY,也就是分配虚拟终端



  -i, --interactive    	即使没有连接,也要保持STDIN打开



  --name          		为容器起名,如果没有指定将会随机产生一个名称



    



# 命令参数(COMMAND\ARG:



	COMMAND 表示容器启动后,需要在容器中执行的命令,如ps、ls 等命令



	ARG 表示执行 COMMAND 时需要提供的一些参数,如ps 命令的 aux、ls命令的-a等等



    



# 创建容器命令演示:



docker create --name test-container centos:centos7 ps -A



# 我们创建了一个容器,并指定在启动容器的时候执行:docker ps -a



docker create -ti --name test-container2 centos /bin/bash

2.容器启动 – docker start

# 作用:



	将一个或多个处于创建状态或关闭状态的容器启动起来



# 命令格式:



	docker start [OPTIONS] CONTAINER [CONTAINER...]



# 命令参数(OPTIONS)-a, --attach		将当前shell的 STDOUT/STDERR 连接到容器上



	-i, --interactive		将当前shell的 STDIN连接到容器上	



# 命令演示:



docker ps -a



docker start -a 65ebc



docker start test-container

3.重点(容器一直运行的原因)

# 容器一直运行的原因COMMAND



1.它有一条前台进程,一直在运行



2.以后如果自己制作的镜像,运行起容器,必须有个可以夯住的命令COMMAND



3.如果COMMAND该命令结束,该容器也就结束了

img

# 当我们在后台启动的时候



1.比如:docker run -di --name=mycentos centos:centos7



2.这时他会自动启动一个 /bin/bash窗口



3.因为我们并没有关闭这个/bin/bash窗口,所以他会一直在后台运行  



4.我们在使用start或者直接run进入这个镜像的时候,就相当于运行的这个命令:/bin/bash,就进入了这个bash窗口,相当于进入了容器(其实不是进入了容器,可以把他看作是xshell一个远程连接,连接到这个容器。)这里我们看作是进入到了这个容器,当我们使用exit退出的时候,就相当于关闭了/bin/bash这个窗口。所以容器一直会在后台运行的原因就是这个/bin/bash窗口一直在启动这,没有关闭它

4.容器创建并启动 – docker run

# 创建并启动(run)



# 参数:



    -i:表示运行容器



    -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。



    -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。



    --name :为创建的容器命名。如果不写,会自动分配一个名字(英文人名)



    -v:表示目录映射关系(前者是宿主机目录,后者是容器目录,映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。(下述单独演示)



    -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射 (下述单独演示)



    



# 例子:run



    docker run -it --name=myredis redis  # 这时就会启动redis容器并进去redis容器  



    docker run -id --name=oursql mysql  # 这时就不会进入mysql容器,再后台运行



    



    



# 注意,docker run  镜像 



使用该命令:如果本地没有,会先pull,再run

5.进入容器内部和退出容器

5.1进入容器

# 方式1:



	1.查询机器上运行的容器



	docker ps



    2.进入容器



	docker exec -it 容器id/bin/bash



    docker exec -it 427 /bin/bash



    



# 第二种:ssh连接(容器内部装ssh服务端)(不常用)    

img

#  exec真正的作用是在容器内执行命令,而不是真正的进入到容器内部



1.因为 /bin/bash这个命令,就相当于与这个容器建立了连接,所以我们可以和容器做交互,当我们关闭这个连接的时候,就会自动结束掉这个容器。



 



2.执行exec命令:



	docker exec -it 容器id ls  # 查询根路径所有文件

img

# top 命令(容器内部执行查询进程)

img

# 容器内部是纯净的空间,安装:vim 

img

5.2退出容器

# 命令:exit



	1.如果是一个夯在哪里得命令,则使用exit退出容器



    2.如果不是则会自动退出容器

6.(-it 进入容器退出) 与 (-id 进入容器退出)区别

# -it 进入容器退出(前台容器自动结束【后台停止运行】)



1.在我们使用 -it 参数直接进入该容器的时候,使用exit退出的时候这个容器就会自动结束。



	- 此时后台就没有该运行中的容器。



 



# -id 进入容器退出(前台容器自动结束【后台正常运行】)    



2.如果使用 -id 后台运行容器的时候,使用 docker exec进入该容器,此时使用exit退出该容器的话,只是退出该容器,并没有从后台结束该容器,该容器还会在后台运行这。

十:文件拷贝(宿主机和容器互相拷贝文件)

# 1.从宿主机拷贝到容器内部



	docker cp 宿主机文件 容器id:容器路径



        



    docker cp /home/a.txt 427:/home      



# 2.从容器中拷贝到宿主机



	docker cp 容器id:容器路径 宿主机路径(起别名)



        



    docker cp 427:home/a.txt a.txt

img

十一:目录挂载(映射作用)

# 目录挂载格式:



docker run -di --name=mycentos99 -v /宿主机要挂载目录:/容器要挂载路径 指定镜像



 



docker run -di --name=mycentos99 -v /home:/home centos:centos7



 



# -v 	: 映射



 



# 挂载作用:



1.一旦挂载,以后宿主机目录内修改,同样影响容器内部



2.容器内修改同样影响宿主机

img

十二:端口映射

图解:

img

# 命令:	



	- 使用参数 -p 宿主机端口:容器端口



    - 例:docker run -it -p 6377:6379 redis   # 将宿主机得6377端口映射到容器redis6379端口上



# 演示:



# 创建容器



	- docker run -di -p 6377:6379 redis



# 进入容器



	- docker exec -it 27d /bin/bash



  	- 此时启动的是redis服务端  



# 连接客户端



	- redis-cli



# 在容器中操作redis



	- set name born

img

# 此时我们使用远程连接我们得宿主机云服务器的6377端口。

img

img

为什么会后台启动redis服务?

# 为什么会后台启动redis服务?



	1.我们在启动redis容器的时候,他会自动运行一个脚本文件:docker-entrypoint.sh



    2.就像启动cent os自动启动一个/bin/bash窗口



    3.而redis启动/bin/bash与之建立连接之后,会自动执行这个脚本文件

img

# docker-entrypoint.sh 这个脚本的路径:



	/usr/local/bin/docker-entrypoint.sh

img

十三:查看容器ip地址

# 命令:



# 查看容器详细信息



	- docker inspect 容器id



# 只查看容器ip地址



	- docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称/容器ID

img

# 其实宿主机与容器之间是通过网关进行通信的



	- 查看网关



    	# 容器内下载该命令:



    	- 下载查看ip信息的命令:yum install net-tools



        - ifconfig:查看网络相关信息

img

# 所以此时我们在连接redis的时候就有两种方式



	- 第一种:



    	- 因为我们做了端口映射,所以我们可以通过:云服务器地址:6377连接



     - 第二种:



    	- 此时我们已经知道了容器的ip地址,所以就可以通过: 容器的ip地址:6379 (此时端口号就是它本身的6379因为是直接通过它本身的ip建立的连接)



# 每个容器都有ip地址,每一个ip地址标志着一台唯一服务器,所以就实现了宿主与容器之间的隔离性,每一个容器就相当于一个虚拟机

十四:应用部署

# 在容器内部署mysql



 



# 容器内查询env,环境变量密码



docker run -di --name=mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7



        



# -e		: 表示环境变量指定密码   



 



# 进入容器



docker exec -it 749 /bin/bash



 



mysql



 



mysql -uroot -p 123456



 



show databases;



 



drop database lqz;



 



# 官方提供的



docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag



        



# 宿主部署容器内redis



docker run -di -p 6377:6379 redis:latest



        



# 宿主部署容器内nginx



docker run -di --name=mynginx -p 8080:80 nginx



    



    



# 我们都使用了 -p 参数做了端口映射,所以我们在访问云服务器指定映射端口后,就访问到部署好的容器,所以有了docker完全就需要在本地下载这些应用,直接使用docker pull拉下来使用即可

img

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是Docker容器?一文带你了解,看完直接学会 的相关文章

  • 无法使用maven编译java项目

    我正在尝试在 java 16 0 1 上使用 maven 构建 IntelliJ 项目 但它无法编译我的项目 尽管 IntelliJ 能够成功完成 在此之前 我使用maven编译了一个java 15项目 但我决定将所有内容更新到16 0 1
  • 如何从秘密字符串中制作 HMAC_SHA256 密钥以在 jose4j 中与 JWT 一起使用?

    我想生成 JWT 并使用 HMAC SHA256 对其进行签名 对于该任务我必须使用jose4j https bitbucket org b c jose4j wiki Home 我尝试根据秘密生成密钥 SecretKeySpec key
  • 如何在 JSP 中导入类?

    我是一个完全的JSP初学者 我正在尝试使用java util List在 JSP 页面中 我需要做什么才能使用除以下类之外的类java lang 使用以下导入语句进行导入java util List 顺便说一句 要导入多个类 请使用以下格式
  • 记录骆驼路线

    我的项目中有几个 Camel 上下文 如果可能的话 我想以逆向工程方式记录路线 因为我们希望保持与上下文相关的文档最新 最好的方法是什么 我们倾向于预先实际设计路线 并使用来自EIP book http www eaipatterns co
  • 如何让spring为JdbcMetadataStore创建相应的schema?

    我想使用此处描述的 jdbc 元数据存储 https docs spring io spring integration docs 5 2 0 BUILD SNAPSHOT reference html jdbc html jdbc met
  • 如何将 android.net.Uri 转换为 java.net.URL? [复制]

    这个问题在这里已经有答案了 有没有办法从Uri to URL 我正在使用的库需要这个 它only接受一个URL但我需要在我的设备上使用图像 如果该方案的Uri is http or https new URL uri toString 应该
  • Java:正则表达式排除空值

    在问题中here https stackoverflow com questions 51359056 java regexp for a separated group of digits 我得到了正则表达式来匹配 1 到 99 之间的一
  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • Git 无法识别重命名和修改的包文件

    我有一个名为的java文件package old myfile java 我已经通过 git 提交了这个文件 然后我将我的包重命名为new所以我的文件在package new myfile java 我现在想将此文件重命名 和内容更改 提交
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • Cloudfoundry:如何组合两个运行时

    cloundfoundry 有没有办法结合两个运行时环境 我正在将 NodeJS 应用程序部署到 IBM Bluemix 现在 我还希望能够执行独立的 jar 文件 但应用程序失败 APP 0 bin sh 1 java not found
  • 查找哪个程序运行另一个程序

    我有一个 NAS 运行在 Redhat Linux 的有限版本上 我按照指示破解了它 这样我就可以访问 shell 这很有帮助 我还做了一些修改 其他人也做过修改 除了一个问题之外 它们似乎都工作得很好 不知何故 每隔 22 天 系统就会关
  • Spring Security OAuth2简单配置

    我有一个简单的项目 需要以下简单的配置 我有一个 密码 grant type 这意味着我可以提交用户名 密码 用户在登录表单中输入 并在成功时获得 access token 有了该 access token 我就可以请求 API 并获取用户
  • 在 Spring Boot Actuator 健康检查 API 中启用日志记录

    我正在使用 Spring boot Actuator APIproject https imobilenumbertracker com 拥有一个健康检查端点 并通过以下方式启用它 management endpoints web base
  • 如何在 Eclipse Java 动态 Web 项目中使用 .properties 文件?

    我正在 Eclipse 中开发动态 Web 项目 我创建了一个 properties 文件来存储数据库详细信息 用户名 密码等 我通过右键单击项目和 New gt File 添加它 我使用了Java util包Properties类 但它不
  • Java:拆箱整数时出现空指针异常?

    此代码导致空指针异常 我不知道为什么 private void setSiblings PhylogenyTree node Color color throws InvalidCellNumberException PhylogenyTr
  • JSON 到 hashmap (杰克逊)

    我想将 JSON 转换为 HashMapJackson http jackson codehaus org 这是我的 JSON String json Opleidingen name Bijz trajecten zorg en welz
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部
  • 在哪里存储 Java 的 .properties 文件?

    The Java教程 http download oracle com javase tutorial essential environment properties htmlon using Properties 讨论如何使用 Prop
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创

随机推荐

  • win10企业版更新和安全中没有 “恢复”这个选项_永别了您内,整疯我的Win10自动更新...

    朋友终于买了台微星GP75 用来驾驭重制版剑三的网游史最大客户端 号称几乎无短板 处处贵到痛点的香香75的确值得 游戏流畅丝滑 开强冷模式手托半点不热 不过就在昨天 朋友突然问我 微星笔记本自带的win10系统可以退回win7吗 害 这哥果
  • centos 安装k8s

    第一步 每台机子都做 关闭防火墙 systemctl stop firewalld systemctl disable firewalld 第二步 每台机子都做 永久关闭selinux sed i s enforcing disabled
  • 30-10-010-编译-kylin-on-druid-2.6.0-CDH57编译

    1 视界 1 下载kylin git clone https github com apache kylin kylin 2 安装maven nodejs 1 maven的安装参照百度 这里不再赘述 2 nodejs的安装参考
  • ssh连接慢解决办法

    ssh连接慢解决办法 成功 用真机连接虚拟机卡的话 1 进入虚拟机vim etc ssh sshd config 2 将 UseDNS yes改为UseDNS no即可如下 使用 UseDNS找到地方然后添加 UseDNS yes UseD
  • VS2019+QT5.15.2+QGIS二次开发环境搭建

    VS2019 QT5 15 2 QGIS二次开发环境搭建 1 开发环境 VS2019 QT5 15 2 QGIS 注意 QT 平台的版本与qgis下载的版本有关 以前采用OSGeo4w64来下载qgis时会区分32和64位 但现在官网已经不
  • QT中QWeight与QMainWindow的区别

    在Qt中 QWidget 和 QMainWindow 是两个常用的类 用于创建用户界面 它们之间有一些区别 1 QWidget 是Qt中所有用户界面类的基类 而 QMainWindow 是一个特殊的窗口类 通常用于创建应用程序的主窗口 QM
  • elasticsearch(磁盘删除data后kibana自动进入只读模式)

    Elasticsearch 基于磁盘的碎片分配 向index插入 删除数据时发生报错 index kibana 1 blocked by FORBIDDEN 12 index read only allow delete api clust
  • FreeRTOS笔记(一)简介

    这个笔记主要依据韦东山freertos快速入门系列记录 感谢韦东山老师的总结 什么是实时操作系统 操作系统是一个控制程序 负责协调分配计算资源和内存资源给不同的应用程序使用 并防止系统出现故障 操作系统通过一个调度算法和内存管理算法尽可能把
  • DEDE自动调用轮播图/幻灯片

    备注 以下示例是以自动调取轮播图为例 具体使用时 步骤不变 内容据实调整即可 一 创建 1 新建模型 2 在新模型下依次添加字段 本例字段 datu xiaotu 分别给PC端和手机端用 据实调整即可
  • 雅思词汇表8000词版_考“鸭”干货丨雅思词汇备考技巧!

    点击蓝字 关注我们 考 鸭 干货第3期 雅思词汇备考技巧 语言学家TERREL认为 只要掌握了足够的词汇 即使没有多少语法知识 外语学习者也能较好理解外语和用外语进行表达 语言学家WILKINS有一句经典名言 没有语法只能传达很少的信息 没
  • 【STM32】STM32之timer1产生PWM(互补通道)

    本篇博文最后修改时间 2017年01月14日 23 50 一 简介 本文介绍STM32系列如何使用timer1的第TIM1 CH2N通道 PB14 产生PWM 二 实验平台 库版本 STM32F10x StdPeriph Lib V3 5
  • 反序列化攻击原理及防御措施(已解决)

    反序列化攻击原理及防御措施 已解决 java序列化算法透析 Serialization 序列化 是一种将对象以一连串的字节描述的过程 反序列化deserialization是一种将这些字节重建成一个对象的过程 Java序列化API提供一种处
  • 计算机视觉之VGGNet

    1 VGGNet介绍 VGGNet是牛津大学视觉几何组 Visual Geometry Group 提出的模型 故简称VGGNet 该模型在2014年的ILSVRC中取得了分类任务第二 定位任务第一的优异成绩 该模型证明了增加网络的深度能够
  • C#学习笔记 字符串和正则表达式

    字符串字面值 原始字符串 和很多语言相似 C 使用 来包括字符串字面值 字符串字面值可以是普通的字符串 也可以包含以 开头的转义字符 如果想让字符串字面值中包含 就必须写成 这样的 但是 像Windows系统文件路径这样的字符串 这就是很不
  • PTA 1074 宇宙无敌加法器(Python3)

    地球人习惯使用十进制数 并且默认一个数字的每一位都是十进制的 而在 PAT 星人开挂的世界里 每个数字的每一位都是不同进制的 这种神奇的数字称为 PAT数 每个 PAT 星人都必须熟记各位数字的进制表 例如 0527 就表示最低位是 7 进
  • 内容安全策略 Content-Security-Policy

    一 作用 1 限制资源获取 限制网页当中一系列的资源获取的情况 从哪里获取 请求发到哪个地方 限制方式 default src限制全局的和链接有关的作用范围 根据资源类型 connect src img src等 限制资源范围 2 报告资源
  • kotlin编译报错问题和解决方案

    IDEA 编译springboot项目报错 Error Kotlin Module was compiled with an incompatible version of Kotlin The binary version of its
  • 网络同步与异步概念整理

    在网络同步中 有两种同步方式 分别为同步与异步 同步的操作指的是 当所有的操作请求都做完 才将结果返回给用户 用户才能进行下一个操作 这样就会让用户有一种卡顿的感觉 因为需要等待上一步操作的执行结果 异步操作指的是 用户的操作之间不需要进行
  • git相关命令

    git命令 首先在github页面上创建一个自己的分支 new branch 命名branch 1 git clone git 克隆项目 2 git init 生成本地 git 文件 3 git add 添加需要上传的文件 4 git co
  • 什么是Docker容器?一文带你了解,看完直接学会

    一 为什么需要Docker容器 1 引入 1 1麻烦的环境部署 1 在软件开发中 最麻烦的事情之一就是环境配置 在正常情况下 如果要保证程序能运行 我们需要设置好操作系统 以及各种库和组件的安装 2 举例来说 要运行一个Python程序 计