Docker(Docker的安装和介绍,常用命令,镜像制作,服务编排,docker私服)

目录

一、简介

1. docker简介

1 什么是docker

2 容器和虚拟机对比

2. 安装docker

1 docker相关概念

2 安装docker

1 安装docker

2 设置注册中心(仓库)

3. 小结

二、常用命令【重点】

1. 服务管理

2. 镜像管理

1 语法说明

2 使用练习

3. 容器管理

1 容器介绍

2 容器基本使用

1 语法说明

2 练习:创建CentOS容器

3 端口映射

1 端口映射介绍

2 练习:创建Redis容器

3 练习:创建MySQL容器

4 挂载数据卷

1 数据卷常用命令

操作数据卷的命令

给容器挂载数据卷

2 练习:创建nginx容器

1 语法说明

2 练习:创建tomcat容器

5 挂载目录

1 语法说明

2 练习:创建tomcat容器

4. 小结

三、镜像制作【了解】

1. 备份与恢复

1 导出镜像

2 加载镜像

3 练习

2. Dockerfile

1 Dockerfile介绍

​编辑

2 Dockerfile示例

3. 小结

四、服务编排【了解】

1. 服务编排介绍

2. 安装docker compose

3. 服务编排示例

4. 常用命令 【掌握】

5. 小结

五、docker私服【拓展了解】

1. 搭建私服

1 拉取私服镜像

2. 上传镜像到私服

1. 给镜像打标记成为私有仓库镜像

2. 上传到私有仓库

3. 从私服拉取镜像

4.小结

今天内容回顾


一、简介

1. docker简介

我们写的代码会接触到好几个环境:开发环境、测试环境以及生产环境等等。多种环境去部署同一份代码,由于环境原因往往会出现软件跨环境迁移的问题(也就是“水土”不服

针对这种问题如何解决?我们可以将工程及此工程依赖的所有软件打包到一个容器中统一部署

1 什么是docker

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。它可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。

2 容器和虚拟机对比

本质的区别

容器

容器是应用层的一个抽象,它将代码和依赖关系打包在一起。

多个容器可以在同一台机器上运行,并与其他容器共享操作系统内核,每个容器作为独立的进程在用户空间运行。

容器比虚拟机占用的空间更小(容器镜像的大小一般为几十MB),可以处理更多的应用,对虚拟机和操作系统的要求也更低。

虚拟机

虚拟机(VM)是物理硬件的抽象,将一台服务器变成多台服务器。

管理程序允许多个虚拟机在一台机器上运行。每个虚拟机都包括一个操作系统、应用程序、必要的二进制文件和库的完整副本--占用几十GB的空间。

虚拟机的启动速度也会很慢。

使用的区别

2. 安装docker

1 docker相关概念

镜像image

Docker 镜像(Image),就相当于是一个文件系统,是用于创建 Docker 容器的模板。也可以将镜像当作容器的“源代码”。镜像体积很小,非常“便携”,易于分享、存储和更新。

容器container

容器是独立运行的一个或一组应用,是镜像运行时的实体。(相当于是精简版的虚拟机,其中安装好了软件)

注册中心(仓库)registry

Docker 仓库用来保存镜像,有点类似于Maven的远程仓库。Registry 分为公共和私有两种。Docker 公司运营公共的 Registry 叫做 Docker Hub。用户可以在 Docker Hub 注册账号,分享并保存自己的镜像(说明:在 Docker Hub 下载镜像巨慢,可以自己构建私有的 Registry)。

2 安装docker

Docker 官方建议在 Ubuntu 中安装,因为 Docker 是基于 Ubuntu 发布的。

由于我们学习的环境都使用的是 CentOS,因此这里我们将 Docker 安装到 CentOS 上。

注意:这里建议安装在 CentOS7.x 以上的版本,在 CentOS6.x 的版本中,安装前需要安装其他很多的环境而且 Docker 很多补丁不支持更新。

1 安装docker

在安装docker之前,可以先做如下准备工作:

自己的服务器不要全开防火墙容易被威胁

#1. 关闭防火墙,并禁止防火墙开机自启
systemctl stop firewalld
systemctl disable firewalld

#2. 关闭MySQL,并禁止MySQL开机自启(你的CentOS里之前安装过MySql,为防止端口冲突,需要做这一步)
systemctl stop mysqld
systemctl disable mysqld

启动CentOS7后,使用SecureCRT连接上CentOS7,然后依次执行命令(要联网):

# 更新系统,如果需要确认,全部选 y (yes)。根据网络状况,此操作可能要花几分钟或者十几分钟时间
yum update

# 安装yum-utils工具和两个驱动依赖
yum install -y yum-utils device-mapper-persistent-data lvm2

# 设置使用阿里云的yum源,稍后会从阿里云下载docker软件
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装docker
yum install docker-ce

# 查看docker版本
docker -v

2 设置注册中心(仓库)

如果不设置注册中心,将从默认的docker hub里下载镜像,速度非常慢。

USTC(中科大的镜像服务)是老牌的Linux镜像服务提供者(注册中心Registry),从Ubuntu5.04版本就在使用。USTC的docker镜像速度加载很快,它的优势之一是不需要注册,是真正的公共服务。

设置步骤:

  1. 创建文件夹:mkdir /etc/docker

  2. 编辑文件daemon.json: vim /etc/docker/daemon.json

    按字母i进入编辑模式,复制以下内容,在finalShell里右键,粘贴到文件里

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

保存并退出vim:按ESC,输:wq 回车

然后查看配置的是否正确:cat /etc/docker/daemon.json

   3. 重新加载daemon文件,然后重启docker服务:

systemctl daemon-reload
systemctl restart docker

4.查看docker信息:docker info,如果能看到以下信息,就说明配置成功了

3. 小结

 

 

docker是什么:容器引擎,可以管理容器

docker解决什么问题:软件环境的迁移问题

容器和虚拟机的区别:

  • 容器:是应用程序的抽象。占用资源更小,启动速度快。轻巧灵活

  • 虚拟机:是对硬件机器的抽象。占用资源更多,启动速度慢。笨重强大

二、常用命令【重点】

1. 服务管理

# 启动docker服务
systemctl start docker

# 查看docker运行状态
systemctl status docker

# 重启docker服务
systemctl restart docker

# 关闭docker服务
systemctl stop docker

# 设置docker开机自启动
systemctl enable docker

2. 镜像管理

1 语法说明

  • 拉取镜像:docker pull 镜像名称:tag, 从docker hub拉取镜像包

    从注册中心docker hub把镜像拉取到本地。拉取下来的镜像,在/var/lib/docker目录下存储

    tag:标签名称,相当于版本号。如果不知道版本号,可以从https://hub.docker.com/里查询

  • 查看镜像:docker images,查看服务器里的所有镜像

  • 删除镜像:docker rmi 镜像ID 或者 docker rmi 镜像名称:tag

2 使用练习

  1. 拉取CentOS7镜像,查看镜像列表(从https://hub.docker.com/里搜索CentOS镜像,找到CentOS7)

  2. 拉取nginx镜像,查看镜像列表(从https://hub.docker.com/里搜索nginx镜像,找到nginx1.14.2)

3. 容器管理

1 容器介绍

容器是独立运行的一个或一组应用,是镜像运行时的实体。(相当于是精简版的虚拟机,其中安装好了软件)

容器的状态有:

  • 运行状态:容器正在运行,可以直接使用。

  • 暂停状态:容器进程暂停,CPU不再处理容器,但并不释放容器的内存

  • 停止状态:容器进程终止,CPU不再处理容器,并释放容器占用的内存

其中操作容器相关的命令有:

  • docker run:创建并运行容器

  • docker pause:暂停容器

  • docker unpause:让容器从暂存中恢复运行

  • docker stop:关闭停止容器

  • docker start:启动容器

  • docker rm:删除容器

2 容器基本使用

1 语法说明
  • 创建容器:docker run -di --name=容器名称 -p 宿主机端口:容器端口 -v 宿主机目录:容器目录 镜像名称:标签

    命令介绍:根据镜像创建容器并启动运行容器

    参数介绍:

    • d:创建出来的容器在后台运行

    • i:开启STDIN交互(让容器处理活动状态)

    • name:用于设置容器名称

    • p:用于设置 宿主机端口 与 容器端口的映射

    • v:用于设置 宿主机数据卷(或文件夹) 与 容器文件夹的映射

  • 查看容器:

    • docker ps -a:查看所有容器

    • docker ps:查看运行状态的容器

  • 进入容器:

    • 进入容器内部:docker exec -it

    • 退出容器(回到宿主机):exit (在容器内执行,是退出容器回到宿主机)

  • 关闭容器:docker stop 容器id或名称

  • 启动容器:docker start 容器id或名称

  • 删除容器:docker rm 容器id或名称

2 练习:创建CentOS容器

要求:

  • 创建CentOS7容器并启动

  • 查看所有正在运行的容器

  • 进入容器内部,查看容器里的目录结构

  • 退出容器回到宿主机

  • 关闭容器

  • 删除容器

3 端口映射

1 端口映射介绍

宿主机和容器的关系:

  • docker所在的主机,称为宿主机;docker里还有容器

为什么要做端口映射:

  • 每个容器都相当于一个独立的服务器,服务器之间是一个小型局域网,外界的客户端不能访问某一个容器

  • 所以要做一个端口映射:宿主机的一个端口号---容器里的一个端口号。两个端口建议相同

  • 这样:客户端就能通过“宿主机:端口”,访问到映射的容器端口

2 练习:创建Redis容器

要求:

  • 创建redis容器并启动,暴露端口6379

  • 查看所有正常运行的容器

  • 然后用RDM工具或其它工具,访问redis

docker run -id --name=myredis -p 6379:6379 redis:5.0 

3 练习:创建MySQL容器

要求:

  • 创建MySql容器并启动,暴露端口3306

  • 查看所有正在运行的容器

  • 然后使用Navicat或其它工具连接MySQL

# 拉取镜像
docker pull mysql:5.7

# 创建容器
docker run -id --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7 --character-set-server=utf8

4 挂载数据卷

之前我们创建的所有容器,并不涉及其中文件的修改。但是如果要创建一个nginx容器,或者tomcat容器,如何把项目传输到容器内部呢?docker提供了数据卷的功能,用于实现宿主机目录与容器目录的映射,这样我们在宿主机目录里的一切操作,都会作用到容器目录里了。

1 数据卷常用命令

数据卷:被docker管理的一些文件夹目录。

数据卷可以跟容器里的指定路径进行绑定,绑定后:

  • 在数据卷文件夹里添加文件,docker会自动帮我们把文件同步到容器里

  • 容器里的文件有所变化,docker也会同步到绑定的数据卷里

操作数据卷的命令

创建数据卷:docker volume create 数据卷名称

列出数据卷:docker volume ls

查看数据卷:docker volume inspect 数据卷名称

删除数据卷:docker volume rm 数据卷名称

给容器挂载数据卷

在创建容器时,可以通过-v参数,将数据卷挂载给容器内的某个目录:

  • docker run -id --name=容器名称 -v 数据卷名称:容器内目录 -p 宿主机端口:容器端口 镜像名称:tag

2 练习:创建nginx容器

要求:创建一个nginx容器,修改nginx内的html页面

已知:nginx内html目录的位置是 /usr/share/nginx/html

提示:

  1. 创建一个数据卷,名称为html。查看数据卷的文件夹位置

    创建数据卷docker volume create html

    查看数据卷docker volume inspect html

        2. 创建nginx容器,使用-v参数把数据卷html挂载绑定到容器内的/usr/share/nginx/html

   docker run -id --name=mynginx -v html:/usr/share/nginx/html -p 80:80 nginx:1.14.2

        3. 使用浏览器访问nginx,先查看原始index.html页面的效果

        浏览器输入地址:http://宿主机ip:80

        4. 直接进入数据卷html的目录,修改其中的index.html文件

   cd /var/lib/docker/volumes/html/_data

        使用vi修改其中的index.html文件,之后保存并退出vi

        5. 再使用浏览器访问nginx,查看修改后的index.html页面效果

        浏览器输入地址:http://宿主机ip:8

1 语法说明

容器不仅仅可以挂载数据卷,也可以直接挂载到宿主机目录上。

挂载目录的语法,和挂载数据卷的语法是类似的,都是使用参数-v

  • 挂载数据卷:-v 数据卷:容器内目录

  • 挂载目录:-v 宿主机目录:容器内目录

    注意:“宿主机目录”要以绝对路径的形式提供。以/开头的路径

2 练习:创建tomcat容器

要求:创建一个tomcat容器,修改mysql内的html页面

已知:tomcat内webapps目录的位置是/usr/local/tomcat/webapps

提示:

  1. 创建文件夹/root/webappsmkdir /root/webapps

  2. 创建nginx容器,使用-v参数把/root/webapps挂载绑定到容器内的/usr/local/tomcat/webapps

    docker run -id --name=mytomcat -p 8080:8080 -v /root/webapps:/usr/local/tomcat/webapps tomcat:8.5.88
  3. 把资料中的appfront文件夹上传到/root/webapps文件夹里

  4. 再使用浏览器访问tomcat,访问 http://宿主机ip:8080/appfront/index.html

5 挂载目录

1 语法说明

容器不仅仅可以挂载数据卷,也可以直接挂载到宿主机目录上。

挂载目录的语法,和挂载数据卷的语法是类似的,都是使用参数-v

  • 挂载数据卷:-v 数据卷:容器内目录

  • 挂载目录:-v 宿主机目录:容器内目录

    注意:“宿主机目录”要以绝对路径的形式提供。以/开头的路径

2 练习:创建tomcat容器

要求:创建一个tomcat容器,修改mysql内的html页面

已知:tomcat内webapps目录的位置是/usr/local/tomcat/webapps

提示:

  1. 创建文件夹/root/webappsmkdir /root/webapps

  2. 创建nginx容器,使用-v参数把/root/webapps挂载绑定到容器内的/usr/local/tomcat/webapps

docker run -id --name=mytomcat -p 8080:8080 -v /root/webapps:/usr/local/tomcat/webapps tomcat:8.5.88

     3. 把资料中的appfront文件夹上传到/root/webapps文件夹里

     4. 再使用浏览器访问tomcat,访问 http://宿主机ip:8080/appfront/index.html

4. 小结

docker服务的状态管理:

  • systemctl status docker:查看docker的运行状态

  • systemctl stop docker:关闭docker

  • systemctl start docker:启动docker

  • systemcl restart docker:重启docker

  • systemctl enable docker:设置docker为开机自启

docker镜像管理

  • 搜索镜像:docker search 镜像名

  • 拉取镜像:docker pull 镜像名:tag 如果不指定tag会拉取lastest

  • 查看镜像:docker images

  • 删除镜像:docker rmi 镜像名:tag

docker容器管理:

  • 创建容器:docker run -di --name=容器名 镜像名:tag

  • 关闭容器:docker stop 容器名

  • 启动容器:docker start 容器名

  • 删除容器:docker rm 容器名

  • 查看容器:

    • docker ps -a 查看所有容器,包括未运行的

    • docker ps 查看正在运行的容器

  • 进入容器:docker exec -it 容器名 /bin/bash

docker的数据卷:

  • 数据卷:是被docker管理的文件夹。

  • 数据卷的用处:可以把数据卷和 某个容器里的路径进行绑定, 实现容器与宿主机之间文件的双向自动传输

    把文件放到宿主机的数据卷里:docker会自动把文件同步到容器里

    容器里的文件有变化:docker会自动同步到宿主机的数据卷里

  • 数据卷操作命令:

    列出数据卷:docker volume ls

    创建数据卷:docker volume create 数据卷名称

    查看数据卷详情(实际路径):docker volume inspect 数据卷名称

    删除数据卷:docker volume rm 数据卷名称

  • 创建容器并绑定数据卷:

    docker run -di --name=容器名 -v 数据卷名:容器里的路径 镜像名:tag

    docker run -di --name=容器名 -v 宿主机里的路径:容器里的路径 镜像名:tag

    注意:-v参数里的路径,全部都得是 绝对路径

三、镜像制作【了解】

1. 备份与恢复

1 导出镜像

  • 命令:docker save -o 文件名称 镜像名称

  • 参数:

    • o:output,表示要输出到文件

  • 说明:

    • 文件名称,通常是xxx.tar打包文件

  • 示例:docker save -o nginx.tar nginx:1.14.2

2 加载镜像

  • 命令:docker load -i xxx.tar

  • 参数:

    • i:input,表示要从文件读取

  • 示例:

    • 我们先将原有镜像删除掉:docker rmi nginx:1.14.2

    • xxx.tar恢复镜像:docker load -i nginx.tar

3 练习

要求:

  1. 把redis镜像保存成文件 redis.tar

    docker save -o redis.tar redis:5.0

  2. 删除所有redis的容器和镜像

    docker stop myredis

    docker rm myredis

    docker rmi redis:5.0

  3. 重新加载redis.tar得到镜像

    docker load -i redis.tar

2. Dockerfile

1 Dockerfile介绍

前边是从一个已有容器生成一个镜像。而Dockerfile是另外一种构建镜像的方式,它是以一种基础镜像为基础,编写一系列的docker指令,每条指令构建一层镜像,通过这些指令一层层构建出一个目标镜像出来。

  • 对于开发人员:可以为开发团队提供一个完全一致的开发环境

  • 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了

  • 对于运维人员:在部署时,可以实现应用的无缝移

Dockerfile的常用指令有以下几个:

更新详细语法说明,请参考官网文档: Dockerfile reference | Docker Docs

从前面的内容可以看出,要构建一个容器,需要做很多的工作,设置很多的配置,如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。 这个脚本就是 Dockerfile。

2 Dockerfile示例

需求

定义dockerfile,发布springboot项目

分析

  1. SpringBoot项目可以独立运行,不需要Tomcat;但是需要有jdk

    所以:我们这个容器,要提供基础的jdk环境,基于jdk环境构造一个新容器

    使用:FROM java:8

  2. 要把SpringBoot项目添加到这个容器里

    使用:ADD demo.jar /demo.jar

  3. 当启动容器时,要同时启动运行这个SpringBoot项目

    所以:启动容器时,要执行Java命令,运行SpringBoot项目

实现

1. 把SpringBoot项目上传到宿主机

在宿主机里创建一个文件夹~/dockerfiles,把SpringBoot工程打包为demo.jar,然后上传到CentOS的~/dockerfiles

2. 创建Dockerfile

~/dockerfiles文件夹里创建文件Dockerfile,内容如下:

#1.定义父镜像:                                                  
FROM openjdk:8
#2.定义作者信息:
MAINTAINER  itheima <itheima@itcast.cn>
#3.将jar包添加到容器: 
ADD demo.jar /demo.jar
#4.定义容器启动执行的命令: 当通过此镜像启动容器的时候,执行的命令
CMD java -jar /demo.jar

3. 通过Dockerfile构建镜像

# 切换到dockerfile文件所在的路径
cd ~/dockerfiles

# 构建镜像
docker build -f ./Dockerfile -t demo:1 ./

4. 启动容器

#创建启动容器
docker run -id --name=自定义名称 -p 端口  镜像名称

docker run -id --name=demo -p 81:80 demo:1

#打开浏览器,输入地址  http://宿主机ip:81/hello  ,可以访问到SpringBoot项目

3. 小结

简化版:

镜像备份:docker save -o /root/xxx.tar 镜像名:tag

加载备份得到镜像:docker load -i /root/xxx.tar

Dockerfile技术:作用是用于制作新镜像

四、服务编排【了解】

1. 服务编排介绍

服务编排或容器编排:按照一定的业务规则批量管理容器

Docker compose是一个用于定义和运行多个Docker容器的编排工具。可以一条命令启动多个容器。主要是解决了容器与容器之间如何管理编排的问题。

使用Docker compose 有三个步骤:

  1. 利用Dockerfile定义运行环境(如果已有镜像,可省略这一步)

  2. 使用docker-compose.yml定义组成应用的各服务

  3. 运行docker-compose up -d启动应用

2. 安装docker compose

# 下载docker compose
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,可执行如下命令:

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

3. 服务编排示例

要求:通过docker-compose 批量创建三个容器(nginx,tomcat,redis)

  1. 创建docker-compose目录

mkdir ~/docker-compose
cd ~/docker-compose

     2. 编写docker-compose.yaml文件

version: "3.0"
services:
  redis:
    container_name: redis 
    image: redis:5.0
    ports:
      - 6379:6379
  nginx:
    container_name: nginx
    image: nginx:1.14.2
    ports:
      - 80:80
    volumes:
      - /root/volumes/nginx/html:/usr/share/nginx/html
  tomcat:
    container_name: tomcat
    image: tomcat:8.5.88
    ports:
      - 8080:8080
    volumes:
      - /root/volumes/tomcat/webapps:/usr/local/tomcat/webapps

      3.启动

# !!!注意:必须先切换到`docker-compose.yaml`文件所在的目录后,才可以执行以下命令!!!
cd ~/docker-compose

# docker-compose up -d 以守护进程方式创建并启动容器
docker-compose up -d

4. 常用命令 【掌握】

# !!!注意:必须先切换到`docker-compose.yaml`文件所在的目录后,才可以执行以下命令!!!

#创建容器并后台启动
docker-compose up -d

#直接启动容器
docker-compose start

# 了解其它命令:
docker-compose help # 查看帮助
docker-compose stop  # 停止容器
docker-compose start # 启动容器
docker-compose restart # 重启容器
docker-compose rm # 删除已停止的容器
docker-compose down # 停止并删除容器

5. 小结

五、docker私服【拓展了解】

我们知道docker镜像可以托管到Docker Hub中,跟代码库托管到github是一个道理。但如果我们不想把docker镜像公开放到Docker Hub中,只想在部门或团队内部共享docker镜像,能不能项gitlab一样在搭建私有的仓库呢?答案是肯定的,docker也支持将镜像存到私有仓库。

1. 搭建私服

1 拉取私服镜像

# 拉取私服镜像
docker pull registry
# 启动运行私服
docker run -id --name=registry -p 5000:5000 registry

2 设置私服可信任

  • 设置私有仓库为可信任,用vim或vi编辑文件 /etc/docker/daemon.json

"insecure-registries":["私有仓库的ip:端口"]

  • 重启docker:systemctl restart docker

  • 打开浏览器,通过网址:http://192.168.247.140:5000/v2/_catalog来验证是否启动成功

2. 上传镜像到私服

1. 给镜像打标记成为私有仓库镜像

  • 语法:docker tag 镜像名称 私有仓库ip:端口/镜像名称

  • 示例:docker tag redis:5.0 192.168.200.137:5000/redis:5.0

2. 上传到私有仓库

  • 语法:docker push 私有仓库ip地址:5000/镜像名称

  • 示例:docker push 192.168.200.137:5000/redis:5.0

  • 上传后,可以浏览器上看到

3. 从私服拉取镜像

  • 语法:docker pull 私有仓库ip:端口/镜像名称

  • 示例:docker pull 192.168.200.137:5000/redis:5.0

4.小结

先创建一个私服

今天内容回顾

安装、配置docker

管理docker服务:

  • 启动docker:systemctl start docker

  • 关闭docker:systemctl stop docker

  • 查看docker运行状态:systemctl status docker

管理docker镜像:

  • 搜索镜像:docker search 镜像名

  • 拉取镜像:docker pull 镜像名:tag

  • 查看镜像:docker images

  • 删除镜像:docker rmi 镜像名:tag

管理docker容器:

  • 创建容器:docker run -di --name=容器名 -p 宿主机端口:容器端口 -v 数据卷名:容器里的文件夹路径 镜像名:tag

    创建容器,并直接后台运行

  • 关闭容器:docker stop 容器名

  • 启动容器:docker start 容器名

  • 重启容器:docker restart 容器名

  • 查看容器:

    docker ps 查看正在运行的容器

    docker ps -a 查看所有容器

  • 进入容器:docker exec -it 容器名 /bin/bash

    退出容器到宿主机:exit

镜像备份与恢复:

  • 把镜像保存成文件:docker save -o xx.tar 镜像名:tag

  • 加载文件成镜像:docker load -i xx.tar

制作新的镜像:使用Dockerfile技术

docker服务编排:使用docker-compose技术,可以批量管理容器

  • 必须先切换到docker-compose.yaml所在的文件夹

  • 再执行命令:

    docker-compose up -d 创建容器并启动

    docker-compose start 启动容器

    docker-compose stop 关闭容器

    docker-compose restart 重启容器

    docker-compose down 停止并删除容器

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024.4.25 LoadRunner 测试工具详解 —— Controller Analysis

目录 Controller 的使用 创建场景 Controller 快捷方式创建场景 VUG 针对写好脚本创建场景 场景设计 设计初始化 设计启动机制 设计性能测试脚本的执行时间 设计虚拟用户退出机制 场景运行 添加监控指标至图标格区域 Analysis 的使用 汇总报告 测试报表 吞吐量图 …

Dockerfile实战---构建SSH、Tomcat、MySQL、Nginx镜像

目录 引言 一、安装docker程序 二、构建SSH镜像 1.创建镜像 2.基于sshd镜像创建容器 三、构建tomcat镜像 1.创建镜像 2.基于tomcat镜像创建容器 四、构建MySQL镜像 1.创建镜像 2.基于mysqld镜像创建容器 五、构建nginx镜像 1.创建镜像 2.基于nginx镜像创建容器 引…

用Stream流方式合并两个list集合(部分对象属性重合)

一、合并出共有部分 package com.xu.demo.test;import java.util.Arrays; import java.util.List; import java.util.stream.Collectors;public class ListMergeTest1 {public static void main(String[] args) {List<User> list1 Arrays.asList(new User(1, "Alic…

Linux学习之Tcp与Udp

目录 UDP Udp协议的格式 UDP的传输特性 UDP的缓冲区 基于UDP的应用层协议 TCP协议 TCP的报文格式 1.ACK确认应答机制 2.超时重传 3.TCP的链接管理机制 为什么要三次握手呢&#xff1f; 理解TIME_WAIT状态 流量控制&#xff08;可靠性效率&#xff09; 滑动窗口 拥塞…

Java8中的Stream流相关用法学习

目录 一、Stream是什么 二、创建Stream 三、中间操作 3.1 filter() 3.2 map() 3.3 flatMap() 3.4 distinct() 3.5 limit() 四、终端操作 4.1 findAny(), 和 orElse() 4.2 sorted() 4.3 forEach() 4.4 count() 4.5 collect() 4.6 groupingBy() 4.7 average() 4…

RAG-Driver: 多模态大语言模型中具有检索增强上下文学习的通用驱动解释

RAG-Driver: 多模态大语言模型中具有检索增强上下文学习的通用驱动解释 摘要Introduction RAG-Driver: Generalisable Driving Explanations with Retrieval-Augmented In-Context Learning in Multi-Modal Large Language Model. 摘要 由“黑箱”模型驱动的机器人需要提供人类…

Java对接高德api搜索POI 2.0 关键字搜索

目录 一、注册账号 二、搜索小demo 1.首先要引入依赖 2. 然后查看打印结果即可 三、搜索接口代码 1.引入依赖 2.yml配置 2.Controller 3.静态工具类 四、运行测试 一、注册账号 高德开放平台 | 高德地图API 注册高德开发者&#xff1b;去控制台创建应用&#xff…

【Python网络爬虫】python爬虫用正则表达式进行数据清洗与处理

&#x1f517; 运行环境&#xff1a;PYTHON &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#x1f917;&#x1f91…

机器学习:深入解析SVM的核心概念(问题与解答篇)【三、核函数】

核函数 **问题一&#xff1a;为什么说是有限维就一定存在高维空间可分呢&#xff1f;**原始空间与特征空间为什么映射到高维空间可以实现可分核函数的作用 **问题二&#xff1a;最终怎么得到函数**从对偶问题到决策函数的步骤&#xff1a;结论 **问题三&#xff1a;为什么说特征…

c#数据库: 6.查询成绩合格的学生/7.输出全部学生信息

SQL Server Management Studio Management Studio 中的学生信息表: 查询上图成绩合格的学生信息&#xff0c;并将信息从控制台输出 using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Text…

【弱监督语义分割】AllSpark:从transformer中的未标记特征重生标记特征,用于半监督语义分割

AllSpark: Reborn Labeled Features from Unlabeled in Transformer for Semi-Supervised Semantic Segmentation 摘要&#xff1a; 目前最先进的方法是用真实标签训练标注数据&#xff0c;用伪标签训练未标注数据。然而&#xff0c;这两个训练流程是分开的&#xff0c;这就使…

《Fundamentals of Power Electronics》——正激变换器

正激变换器电路如图6.24所示&#xff1a; 该变压器隔离型转换器基于Buck电路&#xff0c;需要一个晶体管&#xff0c;因此常被使用在比全桥和半桥功率等级低的应用中。其非脉动输出电流与其他降压衍生变换器相同&#xff0c;使正激变换器非常适合涉及高输出电流的应用。晶体管最…

Slave SQL线程与PXB FTWRL死锁问题分析

1. 问题背景 2.27号凌晨生产环境MySQL备库在执行备份期间出现因FLUSH TABLES WITH READ LOCK未释放导致备库复制延时拉大&#xff0c;慢日志内看持锁接近25分钟未释放。 版本&#xff1a; MySQL 5.7.21PXB 2.4.18 慢查询日志&#xff1a; 备份脚本中的备份命令&#xff1a;…

QT 开发COM(ActiveX)组件基础介绍和方案验证

一、COM简介 1.1 COM是什么&#xff1f; COM&#xff0c;Component Object Model&#xff0c;即组件对象模型&#xff0c;是一种以组件为发布单元的对象模型&#xff0c;这种模型使各软件组件可以用一种统一的方式进行交互。COM 既提供了组件之间进行交互的规范&#xff0c;也…

LSTM-KDE的长短期记忆神经网络结合核密度估计多变量回归区间预测(Matlab)

LSTM-KDE的长短期记忆神经网络结合核密度估计多变量回归区间预测&#xff08;Matlab&#xff09; 目录 LSTM-KDE的长短期记忆神经网络结合核密度估计多变量回归区间预测&#xff08;Matlab&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.LSTM-KDE的长短期…

微服务入门学习笔记(黑马商城)

课程转跳&#xff1a;SpringCloud微服务Day1-01.微服务课程介绍_哔哩哔哩_bilibili 一、服务拆分 新建一个maven项目将商品服务拆分出去 更改包扫描 新建一个数据库用于商品服务&#xff0c;同样将表拆分出去 更改配置文件的服务名和数据库名 启动多个实例&#xff1a; 复制配…

解决Pycharm全局搜索与输入法简繁切换快捷键冲突问题

Pycharm中全局搜索快捷键Ctrl Shift F 如图所示&#xff1a; 微软输入法简繁切换快捷键设置&#xff1a; 解决办法&#xff1a; 关掉输入法的切换功能即可&#xff0c;或者更改简繁切换快捷键&#xff0c;毕竟简繁切换使用频率极低。

特别的时钟:上次那个时钟布局和计算有问题,重新修改一下,用JS创建180多个li标签,自动生成数字

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>特别的时钟</title> </head> <st…

Github Action Bot 开发教程

Github Action Bot 开发教程 在使用 Github 时&#xff0c;你可能在一些著名的开源项目&#xff0c;例如 Kubernetes&#xff0c;Istio 中看到如下的一些评论&#xff1a; /lgtm /retest /area bug /assign xxxx ...等等&#xff0c;诸如此类的一些功能性评论。在这些评论出现…

合泰杯(HT32F52352)RTC的应用(计时)--->掉电不丢失VBAT(代码已经实现附带源码)

摘要 在HT32F52352合泰单片机开发中&#xff0c;rtc在网上还是挺少人应用的&#xff0c;找了很久没什么资料&#xff0c;现在我根据手册和官方的代码进行配置理解。 RTC在嵌入式单片机中是一个很重要的应用资源。 记录事件时间戳&#xff1a;RTC可以记录事件发生的精确时间&…