GVKun编程网logo

Docker 入门及安装 [Docker 系列 - 1](docker安装教程)

25

本文将为您提供关于Docker入门及安装[Docker系列-1]的详细介绍,我们还将为您解释docker安装教程的相关知识,同时,我们还将为您提供关于167dockerdocker构建nginx容器系

本文将为您提供关于Docker 入门及安装 [Docker 系列 - 1]的详细介绍,我们还将为您解释docker安装教程的相关知识,同时,我们还将为您提供关于167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、Docker 17.03系列教程(一)Docker EE/Docker CE简介与版本规划、Docker in Docker(实际上是 Docker outside Docker): /var/run/docker.sock、Docker 从入门到进阶七:DockerFile 与 Docker Compose的实用信息。

本文目录一览:

Docker 入门及安装 [Docker 系列 - 1](docker安装教程)

Docker 入门及安装 [Docker 系列 - 1](docker安装教程)

点击 “牧码小子” 关注,和众多大牛一起成长!

关注后,后台回复 java ,领取松哥为你精心准备的技术干货!




docker 如日中天,这不是单纯的炒概念,docker 确确实实解决了开发与运维的痛点,因此在企业开发中得到了非常广泛的使用,本文对于 docker 的这些基本知识点再做一些简单回顾。

什么是 docker

根据 wikipedia 中的介绍:

Docker 是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在 Linux 操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。
Docker 利用 Linux 核心中的资源分脱机制,例如 cgroups ,以及 Linux 核心名字空间(name space),来创建独立的软件容器(containers)。这可以在单一 Linux 实体下运作,避免启动一个虚拟机造成的额外负担。Linux 核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括进程树、网络、用户 ID 与挂载文件系统,而核心的 cgroup 提供资源隔离,包括 CPU 、存储器、block I/O 与网络。从 0.9 版本起,Dockers 在使用抽象虚拟是经由 libvirt 的 LXC 与 systemd - nspawn 提供界面的基础上,开始包括 libcontainer 库做为以自己的方式开始直接使用由 Linux 核心提供的虚拟化的设施。 依据行业分析公司 “451 研究”:“Dockers 是有能力打包应用程序及其虚拟容器,可以在任何 Linux 服务器上运行的依赖性工具,这有助于实现灵活性和便携性,应用程序在任何地方都可以运行,无论是公有云、私有云、单机等。” 。

这里的介绍有点绕口,让我来介绍下 docker 解决了哪些痛点:

  1. 简化环境管理:传统的软件开发与发布环境复杂,配置繁琐,经常有读者在微信上问:我的代码开发环境可以运行,一旦部署到服务器上就运行不了了。这个问题很常见,也确实很烦人,但是问题总要解决,开发环境、测试环境、生产环境,每个环节都有可能出现这样那样的问题,如果能够在各个环境中实现一键部署,就会方便很多,例如一键安装 linux 、一键安装 mysql、一键安装 nginx 等,docker 彻底解决了这个问题。

  2. 虚拟化更加轻量级:说到容器,说到虚拟化,很多人总会想到虚拟机,想到 VMware、VirtualBox 等工具,不同于这些虚拟技术,docker 虚拟化更加轻量级,传统的虚拟机都是先虚拟出一个操作系统,然后在操作系统上完成各种各样的配置,这样并不能充分的利用物理机的性能,docker 则是一种操作系统级别的虚拟技术,它运行在操作系统之上的用户空间,所有的容器都共用一个系统内核甚至公共库,容器引擎提供了进程级别的隔离,让每个容器都像运行在单独的系统之上,但是又能够共享很多底层资源。因此 docker 更为轻量、快速和易于管理。

  3. 程序可移植:有了前面介绍的两个特点,程序可移植就是顺理成章的事情了。

docker 和虚拟机

前面介绍了 docker 与传统虚拟机的差异,通过下表再来详细了解下这种差异:


docker 虚拟机
相同点 1. 都可在不同的主机之间迁移
2. 都具备 root 权限
3. 都可以远程控制
4. 都有备份、回滚操作

操作系统 在性能上有优势,可以轻易的运行多个操作系统 可以安装任何系统,但是性能不及容器
原理 和宿主机共享内核,所有容器运行在容器引擎之上,容器并非一个完整的操作系统,所有容器共享操作系统,在进程级进行隔离 每一个虚拟机都建立在虚拟的硬件之上,提供指令级的虚拟,具备一个完整的操作系统
优点 高效、集中。一个硬件节点可以运行数以百计的的容器,非常节省资源,QoS 会尽量满足,但不保证一定满足。内核由提供者升级,服务由服务提供者管理 对操作系统具有绝对权限,对系统版本和系统升级具有完全的管理权限。具有一整套的的资源:CPU、RAM 和磁盘。QoS 是有保证的,每一个虚拟机就像一个真实的物理机一样,可以实现不同的操作系统运行在同一物理节点上。
资源管理 弹性资源分配:资源可以在没有关闭容器的情况下添加,数据卷也无需重新分配大小 虚拟机需要重启,虚拟机里边的操作系统需要处理新加入的资源,如磁盘等,都需要重新分区。
远程管理 根据操作系统的不同,可以通过 shell 或者远程桌面进行 远程控制由虚拟化平台提供,可以在虚拟机启动之前连接
缺点 对内核没有控制权限,只有容器的提供者具备升级权限。只有一个内核运行在物理节点上,几乎不能实现不同的操作系统混合。容器提供者一般仅提供少数的几个操作系统 每一台虚拟机都具有更大的负载,耗费更多的资源,用户需要全权维护和管理。一台物理机上能够运行的虚拟机非常有限
配置 快速,基本上是一键配置 配置时间长
启动时间 秒级 分钟级
硬盘使用 MB GB
性能 接近原生态 弱于原生态
系统支持数量 单机支持上千个 一般不多于几十个

docker 与传统容器

不同与传统容器,docker 早起基于 LXC,后来基于自研的 libContainer,docker 对于传统容器做了许多优化,如下:

  1. 跨平台的可移植性

  2. 面向应用

  3. 版本控制

  4. 组件复用

  5. 共享性

  6. 工具生态系统

docker 应用场景

  1. 加速本地开发

  2. 自动打包和部署应用

  3. 创建轻量、私有的 PaaS 环境

  4. 自动化测试和持续集成 / 部署

  5. 部署并扩展 Web 应用、数据库和后端服务器

  6. 创建安全沙盒

  7. 轻量级的桌面虚拟化

docker 核心组件

docker 中有三大核心组件:

  • 镜像:镜像是一个只读的静态模版,它保存了容器需要的环境和应用的执行代码,可以将镜像看成是容器的代码,当代码运行起来之后,就成了容器,镜像和容器的关系也类似于程序和进程的关系。

  • 容器:容器是一个运行时环境,是镜像的一个运行状态,它是镜像执行的动态表现。

  • 库:库是一个特定的用户存储镜像的目录,一个用户可以建立多个库来保存自己的镜像。

docker 相关技术

  1. 隔离性

  2. 可度量性

  3. 移植性

  4. 安全性

docker 安装

相对而言,Linux 上安装 Docker 是最容易的,其次是 Mac ,最后是 Windows ,Windows 因此要装的东西比较多,官方也提供了两个不同的安装包,支持不同的 Windows 的不同版本,一个是针对 Win10 的安装引导程序,还有一个是兼容性较好的 Toolbox ,但是在 Windows 上运行 Docker ,后期在虚拟目录等方面还会遇到各种问题,所以这里松哥是非常不建议大家在 Windows 中安装 Docker ,有 Mac 的上 Mac (Mac 上安装 Docker 就像安装普通软件一样),没有 Mac 的装 Linux 虚拟机,再装 Docker 即可,这里我就先以 CentOS 上安装 Docker 为例,来说说 Docker 安装。

分别执行如下安装命令:

  
  
  
  1. # 首先安装 Docker

  2. yum -y install docker


  3. # 然后启动 Docker 服务

  4. service docker start


  5. # 测试安装是否成功

  6. docker -v

安装完成后,看到如下页面,表示安装成功:

总结

本文主要向大家介绍了 Docker 的基本概念以及 Docker 的安装 ,下篇文章我们向大家介绍 Docker 中基本的容器操作。有问题欢迎留言讨论。

参考资料:

[1] 曾金龙,肖新华,刘清.Docker 开发实践 [M]. 北京:人民邮电出版社,2015.

●Spring Boot 中 10 行代码构建 RESTful 风格应用

●Nginx 极简入门教程!

●Spring Boot 一个依赖搞定 session 共享,没有比这更简单的方案了!

●Spring Boot 操作 Redis,三种方案全解析!

●面试干货 | Java 能否自定义一个类叫 java.lang.System?

●一文读懂 Spring Boot 配置文件 application.properties !

●这一次,我连 web.xml 都不要了,纯 Java 搭建 SSM 环境

●没有一条路是容易的,特别是转行计算机这条路

●Spring Boot + Vue 前后端分离开发,权限管理的一点思路

●Spring Boot + Vue 前后端分离开发,前端网络请求封装与配置


你点的每个赞,我都认真当成了喜欢

本文分享自微信公众号 - 江南一点雨(a_javaboy)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与 “OSC 源创计划”,欢迎正在阅读的你也加入,一起分享。

167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo

167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo

docker构建nginx容器系列问题


background : 最近为小伙伴们筹划docker系列的技术分享,研究了一会docker相关技术, 在此记录一下构建nginx容器时候的坑

1.nginx服务器根目录问题

docker 官方镜像提供的nginx基于debian/jessie平台,其文件结构和ubuntu中的nginx中并不相同

eg:

run一个niginx容器

<span>//80端口被占用,so...</span>
$ sudo docker run <span>-it</span><span>-p</span><span>800</span>:<span>800</span> nginx
$ sudo docker ps 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                   NAMES
<span>1801</span>a32aab54        nginx               <span>"nginx -g ''daemon off"</span><span>2</span> minutes ago       Up <span>2</span> minutes        <span>80</span>/tcp, <span>443</span>/tcp, <span>0.0</span><span>.0</span><span>.0</span>:<span>800</span><span>-&gt;</span><span>800</span>/tcp   berserk_kare
登录后复制

进入容器内部

<span>$ </span>sudo docker exec -it <span>1801</span>a32aab54 /bin/bash
root<span>@1801a32aab54</span><span>:/</span><span># </span>
登录后复制

查看nginx目录

<span># cd /etc/nginx/</span>
conf<span>.d</span>/         koi-utf         mime<span>.types</span>      nginx<span>.conf</span>      uwsgi_params    
fastcgi_params  koi-win         modules/        scgi_params     win-utf  
登录后复制

可以看到不仅没有熟悉的 /sites-available,也没有 /sites-enabled

继续查看nginx配置

<span># cat /conf.d/default.conf</span><span>server</span> {
    listen       <span>80</span>;
    server_name  localhost;

    <span>#charset koi8-r;</span><span>#access_log  /var/log/nginx/log/host.access.log  main;</span>    location / {
        root   /usr/share/nginx/html;
        <span>index</span><span>index</span>.html <span>index</span>.htm;
    }

    <span>#error_page  404              /404.html;</span><span># redirect server error pages to the static page /50x.html</span><span>#</span>
    error_page   <span>500</span><span>502</span><span>503</span><span>504</span>  /<span>50</span>x.html;
    location = /<span>50</span>x.html {
        root   /usr/share/nginx/html;
    }
    <span>#...省略php-fpm配置,好长..</span>
}
登录后复制

根目录配置: root /usr/share/nginx/html;

测试

<span># cd /usr/share/nginx/html</span><span># touch index.html</span><span># echo "test nginx in docker" &gt;index.html</span>
登录后复制

php-fpm配置相关

'').addClass(''pre-numbering'').hide(); $(this).addClass(''has-numbering'').parent().append($numbering); for (i = 1; i '').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了167 docker docker构建nginx容器系列问题,包括了docker,nginx方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Docker 17.03系列教程(一)Docker EE/Docker CE简介与版本规划

Docker 17.03系列教程(一)Docker EE/Docker CE简介与版本规划

近日,Docker发布了Docker 17.03。进入Docker 17时代后,Docker分成了两个版本:Docker EE和Docker CE,即:企业版(EE)和社区版(CE)。那么这两个版本有什么区别呢?不仅如此,Docker进入17.03后,版本命名方式跟之前完全不同,以后Docker又会有怎样的版本迭代计划呢?本文将为您一一解答。

版本区别

Docker EE

Docker EE由公司支持,可在经过认证的操作系统和云提供商中使用,并可运行来自Docker Store的、经过认证的容器和插件。

Docker EE提供三个服务层次:

服务层级 功能
Basic 包含用于认证基础设施的Docker平台 Docker公司的支持 经过认证的、来自Docker Store的容器与插件
Standard 添加高级镜像与容器管理 LDAP/AD用户集成 基于角色的访问控制(Docker Datacenter)
Advanced 添加Docker安全扫描 连续漏洞监控

大家可在该页查看各个服务层次的价目:https://www.docker.com/pricing 。

Docker CE

Docker CE是免费的Docker产品的新名称,Docker CE包含了完整的Docker平台,非常适合开发人员和运维团队构建容器APP。事实上,Docker CE 17.03,可理解为Docker 1.13.1的Bug修复版本。因此,从Docker 1.13升级到Docker CE 17.03风险相对是较小的。

大家可前往Docker的RELEASE log查看详情https://github.com/docker/docker/releases 。

Docker公司认为,Docker CE和EE版本的推出为Docker的生命周期、可维护性以及可升级性带来了巨大的改进。

版本迭代计划

Docker从17.03开始,转向基于时间的YY.MM 形式的版本控制方案,类似于Canonical为Ubuntu所使用的版本控制方案。

Docker CE有两种版本:

edge版本每月发布一次,主要面向那些喜欢尝试新功能的用户。

stable版本每季度发布一次,适用于希望更加容易维护的用户(稳定版)。

edge版本只能在当前月份获得安全和错误修复。而stable版本在初始发布后四个月内接收关键错误修复和安全问题的修补程序。这样,Docker CE用户就有一个月的窗口期来切换版本到更新的版本。举个例子,Docker CE 17.03会维护到17年07月;而Docker CE 17.03的下个稳定版本是CE 17.06,这样,6-7月这个时间窗口,用户就可以用来切换版本了。

Docker EE和stable版本的版本号保持一致,每个Docker EE版本都享受为期一年的支持与维护期,在此期间接受安全与关键修正。

Docker版本演进图

总结

  • Docker从17.03开始分为企业版与社区版,社区版并非阉割版,而是改了个名称;企业版则提供了一些收费的高级特性。
  • EE版本维护期1年;CE的stable版本三个月发布一次,维护期四个月;另外CE还有edge版,一个月发布一次。

参考文档

  1. https://blog.docker.com/2017/03/docker-enterprise-edition/

版权说明

本文采用 CC BY 3.0 CN协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。

关注我

关注我

博客:http://www.itmuch.com

微信公众号:

公众号

Docker in Docker(实际上是 Docker outside Docker): /var/run/docker.sock

Docker in Docker(实际上是 Docker outside Docker): /var/run/docker.sock

在 Docker 容器里面使用 docker run/docker build

Docker 容器技术目前是微服务/持续集成/持续交付领域的第一选择。而在 DevOps 中,我们需要将各种后端/前端的测试/构建环境打包成 Docker 镜像,然后在需要的时候,Jenkins 会使用这些镜像启动容器以执行 Jenkins 任务。

为了方便维护,我们的 CI 系统如 Jenkins,也会使用 Docker 方式部署。 Jenkins 任务中有些任务需要将微服务构建成 Docker 镜像,然后推送到 Harbor 私有仓库中。 或者我们所有的 Jenkins Master 镜像和 Jenkins Slave 镜像本身都不包含任何额外的构建环境,执行任务时都需要启动包含对应环境的镜像来执行任务。

我们的 Jenkins Master、Jenkins Slaves 都是跑在容器里面的,该如何在这些容器里面调用 docker run 命令启动包含 CI 环境的镜像呢? 在这些 CI 镜像里面,我们从源码编译完成后,又如何通过 docker build 将编译结果打包成 Docker 镜像,然后推送到内网仓库呢?

答案下面揭晓。

一、原理说明:/var/run/docker.sock

Docker 采取的是 Client/Server 架构,我们常用的 docker xxx 命令工具,只是 docker 的 client,我们通过该命令行执行命令时,实际上是在通过 client 与 docker engine 通信。

我们通过 apt/yum 安装 docker-ce 时,会自动生成一个 systemd 的 service,所以安装完成后,需要通过 sudo systemctl enable docker.service 来启用该服务。 这个 Docker 服务启动的,就是 docker engine,查看 /usr/lib/systemd/system/docker.service,能看到有这样一条语句:

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

默认情况下,Docker守护进程会生成一个 socket(/var/run/docker.sock)文件来进行本地进程通信,因此只能在本地使用 docker 客户端或者使用 Docker API 进行操作。 sock 文件是 UNIX 域套接字,它可以通过文件系统(而非网络地址)进行寻址和访问。

因此只要以数据卷的形式将 docker 客户端和上述 socket 套接字挂载到容器内部,就能实现 "Docker in Docker",在容器内使用 docker 命令了。具体的命令见后面的「示例」部分。

要记住的是,真正执行我们的 docker 命令的是 docker engine,而这个 engine 跑在宿主机上。所以这并不是真正的 "Docker in Docker".

二、示例

在容器内部使用宿主机的 docker,方法有二:

  1. 命令行方式:将 /usr/bin/docker 映射进容器内部,然后直接在容器内部使用这个命令行工具 docker
    • 需要的时候,也可以将 /etc/docker 文件夹映射到容器内,这样容器内的 docker 命令行工具也会使用与宿主机同样的配置。
  2. 编程方式:在容器内部以编程的方式使用 docker
    • 通过 python 使用 docker: 在 Dockerfile 中通过 pip install docker 将 docker client 安装到镜像中来使用

容器的启动方式也有两种,如下:

1. 直接通过 docker 命令启动

示例命令如下:

docker run --name <name> \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /usr/bin/docker:/usr/bin/docker \
    --user root \
    <image-name>:<tag>

**必须以 root 用户启动!(或者其他有权限读写 /var/run/docker.sock 的用户)**然后,在容器内就能正常使用 docker 命令,或者访问宿主机的 docker api 了。

2. 使用 docker-compose 启动

docker-compose.yml 文件内容如下:

version: ''3.3''
services:
  jenkins-master:
    image: jenkinsci/blueocean:latest
    container_name: jenkins-master
    environment:
      - TZ=Asia/Shanghai  # 时区
    ports:
      - "8080:8080"
      - "50000:50000"
    volumes:
      - ./jenkins_home:/var/jenkins_home  # 将容器中的数据映射到宿主机
      - /usr/bin/docker:/usr/bin/docker  # 为容器内部提供 docker 命令行工具(这个随意)
      - /var/run/docker.sock:/var/run/docker.sock  # 容器内部通过 unix socket 使用宿主机 docker engine
    user: root  # 必须确保容器以 root 用户启动!(这样它才有权限读写 docker.socket)
    restart: always

然后通过 docker-compose up -d 即可后台启动容器。

Docker 中的 uid 与 gid

通过上面的操作,我们在容器内执行 docker ps 时,还是很可能会遇到一个问题:权限问题

如果你容器的默认用户是 root,那么你不会遇到这个问题,因为 /var/run/docker.sock 的 onwer 就是 root.

但是一般来说,为了限制用户的权限,容器的默认用户一般都是 uid 和 gid 都是 1000 的普通用户。这样我们就没有权限访问 /var/run/docker.sock 了。

解决办法:

方法一(不一定有效):在构建镜像时,最后一层添加如下内容:

# docker 用户组的 id,通常都是 999
RUN groupadd -g 999 docker \
    && usermod -aG docker <your_user_name>

这样我们的默认用户,就能使用 docker 命令了。

P.S. 999 不一定是 docker 用户组,所以上述方法某些情况下可能失效。这时还是老老实实通过 docker run -u root 启动容器吧。(或者在 docker-compose.yml 中添加 user: root 属性)

参考

  • Docker in Docker - 王柏元

Docker 从入门到进阶七:DockerFile 与 Docker Compose

Docker 从入门到进阶七:DockerFile 与 Docker Compose

在这里插入图片描述

文章目录

    • Dockerfile
      • Dockerfile 是什么
      • Dockerfile 规则
      • Dockerfile 构建镜像示例
      • Dockerfile 保留字
    • 虚悬镜像
    • Docker Compose 容器编排
      • Docker Compose 是什么?
      • 下载安装 compose
      • compose 使用步骤
      • compose 常用命令

Dockerfile

Dockerfile 是什么

Dockerfile 是用来 构建 Docker 镜像 的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。

就拿我之前几次虚拟机崩溃的例子来说吧,别的咱也不说。由于我的虚拟机上部署着我毕设的一大堆环境,每次崩溃我都要一个一个去给它们下载回来,那时候我就在想,我能不能搞个一键安装的 shell 脚本,放那儿自己运行,我一觉醒来啥都配好了。

现在上容器了,一两个镜像咱自己安装就好了,但是原生 Linux 系统那是真的要啥没啥啊,还手动一个个安装吗?能确保一个不落吗?还是直接给我来个清单一键安装吧。


Dockerfile 规则

FROM:定制的镜像都是基于 FROM 的镜像。
RUN:用于执行后面跟着的命令行命令。

RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。

・1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数
・2:指令按照从上到下,顺序执行
・3:# 表示注释
・4:每条指令都会创建一个新的镜像层并对镜像进行提交,所以过多无意义的层,会造成镜像膨胀过大。

以下两种写法高下立判:

FROM centos
RUN yum -y install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz

以上执行会创建 3 层镜像。可简化为以下格式:


FROM centos
RUN yum -y install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && tar -xvf redis.tar.gz

如上,以 && 符号连接命令,这样执行后,只会创建 1 层镜像。


Dockerfile 构建镜像示例

在 Dockerfile 文件的存放目录下,执行构建动作:

mkdir myfile
cd myfile
vim Dockerfile
FROM ubuntu
MAINTAINER wlf<lion@qq.com>
 
ENV MYPATH /usr/local
WORKDIR $MYPATH
 
#安装vim编辑器
#安装ifconfig命令查看网络IP
#安装java8及lib库
RUN apt install net-tools && install vim && glibc.i686 && mkdir /usr/local/java

#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
 
EXPOSE 80
 
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

构建:docker build -t 新镜像名字:TAG .

在这里插入图片描述

Dockerfile 保留字

    FROM- 镜像从那里来

    MAINTAINER- 镜像维护者信息

    RUN- 构建镜像执行的命令,每一次RUN都会构建一层

    CMD- 容器启动的命令,如果有多个则以最后一个为准,也可以为ENTRYPOINT提供参数

    VOLUME- 定义数据卷,如果没有定义则使用默认

    USER- 指定后续执行的用户组和用户

    WORKDIR- 切换当前执行的工作目录

    HEALTHCHECH- 健康检测指令

    ARG- 变量属性值,但不在容器内部起作用

    EXPOSE- 暴露端口

    ENV- 变量属性值,容器内部也会起作用

    ADD- 添加文件,如果是压缩文件也解压

    COPY- 添加文件,以复制的形式

    ENTRYPOINT- 容器进入时执行的命令

虚悬镜像

・仓库名、标签都是的镜像,俗称 dangling image。

from ubuntu
CMD echo ''action is success''

喏,这个就可以构建出来一个,瞅一眼。

查看所有当前虚悬镜像:

docker image ls -f dangling=true

删除所有虚悬镜像:

docker image prune

留着也没用。


Docker Compose 容器编排

Docker Compose 是什么?

Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件
docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动 / 关闭这些容器

Docker-Compose 是 Docker 官方的开源项目, 负责实现对 Docker 容器集群的快速编排。


下载安装 compose

官网:https://docs.docker.com/compose/

下载命令:

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

compose 使用步骤

·编写Dockerfile定义各个微服务应用并构建出对应的镜像文件
·使用 docker-compose.yml 定义一个完整业务单元,安排好整体应用中的各个容器服务。
·最后,执行docker-compose up命令 来启动并运行整个应用程序,完成一键部署上线

关于 yml 文件教程:待补全。


compose 常用命令

Compose常用命令
docker-compose -h                           # 查看帮助
docker-compose up                           # 启动所有docker-compose服务
docker-compose up -d                        # 启动所有docker-compose服务并后台运行
docker-compose down                         # 停止并删除容器、网络、卷、镜像。
docker-compose exec  yml里面的服务id                 # 进入容器实例内部  docker-compose exec docker-compose.yml文件中写的服务id /bin/bash
docker-compose ps                      # 展示当前docker-compose编排过的运行的所有容器
docker-compose top                     # 展示当前docker-compose编排过的容器进程
docker-compose logs  yml里面的服务id     # 查看容器输出日志
docker-compose config     # 检查配置
docker-compose config -q  # 检查配置,有问题才有输出
docker-compose restart   # 重启服务
docker-compose start     # 启动服务
docker-compose stop      # 停止服务

本文同步分享在 博客 “看,未来”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与 “OSC 源创计划”,欢迎正在阅读的你也加入,一起分享。

今天关于Docker 入门及安装 [Docker 系列 - 1]docker安装教程的介绍到此结束,谢谢您的阅读,有关167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、Docker 17.03系列教程(一)Docker EE/Docker CE简介与版本规划、Docker in Docker(实际上是 Docker outside Docker): /var/run/docker.sock、Docker 从入门到进阶七:DockerFile 与 Docker Compose等更多相关知识的信息可以在本站进行查询。

本文标签:

上一篇Spring Boot 邮件发送的 5 种姿势!(springboot发送邮件的步骤)

下一篇Spring Security 工作原理概览(spring security详解)