Docker应用容器引擎

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路Docker应用容器引擎,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

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是否安装成功。Docekr使用

镜像使用
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 的路径。

build 进程在执行操作后,它要做的第一件事情就是上传这个 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

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

容器所有到外部网络的连接,源地址都会被NAT成本地系统的IP地址。这是使用 iptables 的源地址伪装操作实现的。和虚拟机时一样的由dhcp服务器自动分配动态ip。希望永久绑定到某个固定的 IP 地址,可以在 Docker 配置文件 /etc/default/docker 中指定DOCKER_OPTS=“–ip=IP_ADDRESS”,之后重启 Docker 服务即可生效。

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

容器允许外部访问,可以在 docker run 时候通过 -p 或 -P 参数来启用。不管用那种办法,其实也是在本地的 iptable 的 NAT 表中添加相应的规则。

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

Docker端口设置

Docker仓库

仓库(Repository)是集中存放镜像的地方。

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

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

登录:docker login

退出:docker logout

搜索镜像: docker search <name>

下载镜像:docker pull <name>

上传镜像:docker push [options]

Docker安装Ubuntu

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/156276.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!