小工具      在线工具  汉语词典  dos游戏  css  js  c++  java

Docker应用容器引擎

# docker,docker 额外说明

收录于:15天前

Docker简介

Docker 是一个开源应用程序容器引擎。 Docker 允许开发人员将他们的应用程序和依赖包打包到一个轻量级、可移植的容器中,然后将其发布到任何流行的 Linux 机器上,这些机器也可以虚拟化。容器完全使用沙箱机制,相互之间没有任何接口。更重要的是,容器性能开销极低。

容器是一种标准软件单元,它打包代码及其所有依赖项,以便应用程序从一个计算环境快速可靠地运行到另一个计算环境。 Docker 容器映像是一个轻量级、独立的可执行软件包,其中包含运行应用程序所需的一切:代码、运行时、系统工具、系统库和设置。

Docker容器可以理解为运行在沙箱中的进程。这个沙箱包含了进程运行所必需的资源,包括文件系统、系统库、shell环境等。但是这个沙箱默认不会运行任何程序。您需要在沙箱中运行一个进程来启动容器。该进程是容器的唯一进程,因此当该进程结束时,容器将完全停止。

Docker应用场景

  • Web 应用程序的自动化打包和发布。

  • 自动化测试和持续集成和发布。

  • 在基于服务的环境中部署和调整数据库或其他后端应用程序。

Docker优势

  1. 不同的软件用户,比如开发人员、运维人员,都可以使用Docker“在我的机器上运行得更快、更方便”。

  2. 将软件打包成标准化单元以进行开发、交付和部署。

  3. Docker 容器映像是一个轻量级、独立的可执行软件包,其中包含运行应用程序所需的一切:代码、运行时、系统工具、系统库和设置。

Docker的优点主要解决以下难点:

  1. 发布到任何流行的 Linux 计算机或通过 Windows Server 部署到 Windows
  2. 解决环境(切换/配置)问题和开发应用程序一般包括多个环境、开发、测试生产环境。不同的环境需要不同的运行环境,切换时需要修改和配置。 Docker可以将不同的环境打包成独立的容器。
  3. 应用需要隔离,多个应用部署在同一台服务器上。不同技术栈的应用程序的依赖软件都安装在同一台服务器上,这可能会导致各种冲突/不兼容。 Docker可以实现功能隔离,打包后的容器是一个独立的软件包。
  4. 解决环境(切换/配置)、快速部署。开发环境构建war包并部署到Linux上。需要先下载Linux上的Java、Tomcat、MySQL,配置相应的环境变量,并将war包复制到Tomcat的webapps文件夹下才能运行。 Docker容器包含了这些环境,部署包只需要拉取其他服务器上的Doker镜像即可。 Docker在底层利用Linux的cgroup和namespace技术来实现应用程序隔离。

综上所述
Docker将一整套环境打包封装成镜像,无需重复配置环境,解决环境带来的种种问题。
Docker容器间是进程隔离的,比虚拟机更轻量级。

Docker 开发文档
Docker中文文档

Docker安装

中文安装手册
菜鸟安装手册

Docker使用

查看版本
docker version查看docker版本,也用于产看docker是否安装成功。文档库使用

镜子的使用
Docker镜像就是一个可获取额具有基本配置的Docker容器。
docker pull 命令来从仓库获取所需要的镜像。

sudo docker pull registry.hub.docker.com/ubuntu:12.04 命令,即从注册服务器registry.hub.docker.com 中的 ubuntu 仓库来下载标记为 12.04 的镜像。有时候官方仓库注册服务器下载较慢,可以从其他仓库下载。 从其它仓库下载时需要指定完整的仓库注册服务器地址。sudo docker pull dl.dockerpool.com:5000/ubuntu:12.04

容器配置
docker run 命令来在容器内运行一个应用程序。

如运行刚下载的ubuntu虚拟机容器:
通过 docker 的两个参数 -i -t,让 docker 运行的容器实现"对话"的能力:sudo docker run -i -t ubuntu:12.04 /bin/bash交互容器。-t: 在新容器内指定一个伪终端或终端。-i: 允许你对容器内的标准输入 (STDIN) 进行交互。exit 命令或者使用 CTRL+D 来退出容器。

docker run ubuntu:12.04 /bin/echo "Hello world"运行应用程序。
docker run命令有两个参数,一个是镜像名,一个是要在镜像中运行的命令。

交互式容器用于对应用所需环境的配置,例如安装的为ubuntu环境进入交互式命令后就跟操作ubuntu虚拟机时一样的。sudo apt install安装等。主要用于对容器的环境配置,如应用下载,文件配置等。例如Java Web需要配置JRE、Tomcat等。

非交互式主要用于测试。

配置完成后,请务必将更改保存到容器中。
docker commit container[id] container[name]

使用 docker ps -l命令获得安装完ping命令之后容器的id。
使用docker commit id name命令将容器保存,id是前一个命令获取的,name要保存的容器名称。无需拷贝完整的id,通常来讲最开始的三至四个字母即可区分。

启动容器
通过-d命令来创建一个进程式的容器。
docker run -d ubuntu:12.04 /bin/bash -c "while true; do echo hello world; sleep 1; done"循环输出helloword的进程。启动进程后输出的是一个长字符串,是容器 ID,用来标识的容器进程。

docker start container[id]启动一个已停止的容器。

查看进度
docker ps查看正在运行的进程

输出详情介绍:
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
状态有7种:
created(已创建)
restarting(重启中)
running 或 Up(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称。

使用 docker ps命令可以查看所有正在运行中的容器列表,使用 docker inspect命令我们可以查看更详细的关于某一个容器的信息。

docker logs container[id]命令,查看容器内的标准输出。可以看到输出的helloword。id也不需要全盘赋值,只要前几位即可。使用容器分配的NAMES属性也可以查看。

进入容器
在RUN使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

  • docker attach idexit从这个容器退出,会导致容器的停止。

  • docker exec id:exit命令会退出容器终端,但不会导致容器的停止。

停止容器
docker stop container[id]命令来停止容器。使用容器分配的NAMES属性也可以。

重启容器
停止的容器可以通过docker restart 重启。

镜像搜索
docker search 镜像名字来检索名字叫做tutorial的镜像。

docker images显示本地已有的镜像。
在这里插入图片描述

在列出的信息中,可以看到几个字段信息

  • 来自哪个仓库,比如ubuntu
  • 图片标签,例如14.04
  • 它的 ID 号(唯一)
  • 创建时间
  • 图片大小

Dockerfile

如何与其他人共享本地构建的 Docker 容器。 Docker 提供了 Dockerfile。用于构建图像的文本文件。文本内容包含构建镜像所需的说明和说明。构建 这使您可以与其他人共享构建的文本文件。功能与Maven类似。

除了命令行操作之外,Docker还可以使用DockerFile来批量操作Docker。

创建一个新的 Dockerfile

vim Dockerfile

编写 Docker 文件

FROM ubuntu:12.04
# MAINTAINER Docker Newbee <newbee@docker.com>  # 用户在Docker Hub上注册,协同开发需要
RUN apt-get update
RUN apt-get install ping

Dockerfile 的基本语法是:

  • 使用#来评论
  • FROM 指令告诉 Docker 使用哪个镜像作为基础,格式为FROM<image>FROM <image>:<tag>
  • 接下来是维护者的信息
  • RUN开头的指令会在创建中运行,比如安装一个软件包,在这里使用 apt-get 来安装了一些软件。&&符号连接命令,来减少RUN指令。

运行该文件的意义是在构建的Ubuntu容器中运行RUN后面的指令。更多介绍:http://www.dockerinfo.net/dockerfile%e4%bb%8b%e7%bb%8d

常见语法:
FROM
MAINTAINER指定维护者信息
RUN在当前镜像基础上执行指定命令
EXPOSEDocker 服务端容器暴露的端口号,供互联系统使用。在启动容器时需要通过 -P,Docker 主机会自动分配一个端口转发到指定的端口。
ENV格式为 ENV <key> <value>。 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。
ADD格式为 ADD <src> <dest>。复制指定的 到容器中的 。 其中 可以是Dockerfile所在目录的一个相对路径;也可以是一个 URL;还可以是一个 tar 文件(自动解压为目录)。
COPY复制本地主机的<src>(为 Dockerfile 所在目录的相对路径)到容器中的 <dest>
VOLUME格式为 VOLUME [“/data”]。创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。

使用 docker build [选项] 路径来生成镜像:

sudo docker build -t="ouruser/sinatra:v2" .

-t 标记来添加 tag,指定新的镜像的信息。 “.” 是 Dockerfile 所在的路径(当前目录),也可以替换为一个具体的 Dockerfile 的路径。

构建过程执行操作后,首先要做的就是上传Dockerfile的内容,因为所有操作都必须基于Dockerfile进行。然后,Dockfile中的指令就会被一一执行。每一步都会创建一个新的容器,执行容器中的指令并提交更改(就像之前介绍的 docker commit 一样)。当所有指令执行完毕后,返回最终的图像ID。中间步骤创建的所有容器都将被删除并清理。

更多命令

Dokcer构建

Docker容器共享,Dokerfile可以将文件发送给其他用户,来构建相同的Docker容器。如果要导出本地某个容器,可以使用 docker export 命令。

出口集装箱
docker export 1e560fca3906 > ubuntu.tar将文件打包为一个tar压缩包。

进口集装箱
docker import 从容器快照文件中再导入为镜像
docker import - test/ubuntu:v1可以使用 docker import 从容器快照文件中再导入为镜像。

删除容器
docker rm 来删除一个处于终止状态的容器。
如果要删除一个运行中的容器,可以添加 -f 参数。Docker 会发送 SIGKILL 信号给容器。

Docker端口设置

容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P -p参数来指定端口映射。

当使用 -P 标志时,Docker 会随机将 49000 到 49900 之间的端口映射到内部容器打开的网络端口。使用docker ps查看。

-p(小写的)则可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。支持的格式有ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort。

sudo docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py

容器端口映射到宿主机host的实现
容器可以主动访问到外部网络的连接,但是外部网络无法访问到容器。

对于从容器到外部网络的所有连接,源地址将被 NAT 为本地系统的 IP 地址。这是使用 iptables 的源地址伪装操作来完成的。就像虚拟机一样,动态IP是由dhcp服务器自动分配的。如果想永久绑定固定IP地址,可以在Docker配置文件/etc/default/docker中指定DOCKER_OPTS="–ip=IP_ADDRESS",然后重启Docker服务即可生效。

在Unbuntu容器中使用ip addr源地址在 172.17.0.0/16 网段,目标地址为其他网段(外部网络)的流量动态伪装为从系统网卡发出。

容器允许外部访问,可以在docker运行时通过-p或-P参数启用。无论使用哪种方法,实际上都是将相应的规则添加到本地iptable的NAT表中。

用户可以通过-p IP:host_port:container_port-p IP::port 来指定允许访问容器的主机上的 IP、接口等,以制定更严格的规则。
Docker数据共享

Docker 端口设置

Docker仓库

存储库是集中存储图像的地方。

您可以从仓库获取现有镜像,也可以将自定义配置的容器作为镜像上传。

注册:在 https://hub.docker.com 免费注册一个 Docker 账号。

登录:docker login

退出:docker logout

搜索镜像: docker search <name>

下载镜像:docker pull <name>

上传镜像:docker push [options]

Docker安装Ubuntu

. . .

相关推荐

额外说明

Labview如何建立与远程MS SQL数据库的连接

一、远端服务器上安装MS SQL Server 2019 官网下载:https://www.microsoft.com/zh-cn/sql-server/sql-server-2019 二、配置服务器MSSQL容许访问 服务器的防火墙要容许MSSQL的端

额外说明

Golang运营阿里云对象存储-OSS |创建桶、上传、下载、查询、删除数据

golang操作阿里云对象存储——OSS | 创建桶、上传、下载、查询、删除数据 创建存储空间 上传文件 下载文件 列举文件 删除文件 参考 本节介绍如何快速使用OSS Go SDK完成常见操作,如创建存储空间(Bucket)、上传/下载文件(Objec

额外说明

AI 实战篇 |基于 AI开放平台实现 人脸识别对比 功能,超详细教程【附带源码】

- 博客主页:https://xiaoy.blog.csdn.net - 本文由 呆呆敲代码的小Y 原创,首发于 CSDN- - 学习专栏推荐:Unity系统学习专栏 - 游戏制作专栏推荐:游戏制作 -Unity实战100例专栏推荐:Unity 实战10

额外说明

Yolo 推测的候选框NMS笔记

                                       YOLOV3 NMS笔记 1 参数     假设当前网络输入大小为416*416 ,分类为3个 [a,b,c] ,每个YOLO层3个anchor    输入图像:img=1*3

额外说明

【玩转Linux操作】用户管理(命令讲解配上样例解释)

-专栏【玩转Linux操作】 -喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 -音乐分享【Counting Stars 】 欢迎并且感谢大家指出小吉的问题- 文章目录 -添加用户 ⭐命令 ⭐演示 -删除用户 ⭐命令 ⭐演示 -给用户设置和修改密码 ⭐命令

额外说明

【Go 基础篇】Go语言数据类型转换:精确的值变换与类型协作

介绍 在计算机编程中,数据类型转换是一种常见的操作,用于将一个类型的值转换为另一个类型。Go语言(也称为Golang)作为一门现代编程语言,具有强大的类型系统和灵活的数据类型转换机制,使得开发人员可以精确地变换数据值,以适应不同的需求。本篇博客将深入探讨

额外说明

Java代码弱点与修复之——Arguments in wrong order(参数顺序错误)

弱点描述 “Arguments in wrong order”:是指在调用方法时传入参数的顺序不正确,导致方法的行为与预期不符。 示例代码 public void argWrongOrder(User user) { boolean isAdmin

额外说明

英语学习笔记2019-12-06

英语学习笔记2019-12-06 At the beginning of this term, we talked about the talent show which would be carried out at the end of our co

额外说明

Web Spider提取编码方法总结

概要: 1,通过分析Header提取编码 2,通过分析BOM(Byte Order Mark)提取编码 3,通过分析页面的meta提取编码 4,通过字节流分析检测编码 正文: 总结一下。目前有四种方法 1,通过分析Header提取编码。  这个也是比较简

额外说明

【Jenkins】win 10 / win 11:Jenkins 的下载、安装、部署(Jenkins 2.365 基于 Java 17)

目录 一、安装 JDK 二、Jenkins 下载 三、准备服务登录凭据 四、Jenkins 安装 (1)自定义路径安装 (2)提供服务登录凭据 (3)设置端口 (4)选择 Java 主目录 (jdk 或 jre) (5)自定义设置 (6)安装完成 五、J

ads via 小工具