Docker及Docker-Compose的实例用法

Docker是一个开源的容器引擎,它有助于更快地交付应用。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的任务,在Docker容器的处理下,只需要数秒就能完成。

架构

  • Docker daemon( Docker守护进程):Docker daemon是一个运行在宿主机( DOCKER-HOST)的后台进程。可通过 Docker客户端与之通信。
  • Client( Docker客户端):Docker客户端是 Docker的用户界面,它可以接受用户命令和配置标识,并与 Docker daemon通信。图中, docker build等都是 Docker的相关命令。
  • Images( Docker镜像):Docker镜像是一个只读模板,它包含创建 Docker容器的说明。它和系统安装光盘有点像,使用系统安装光盘可以安装系统,同理,使用Docker镜像可以运行 Docker镜像中的程序。
  • Container(容器):容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。可通过 Docker API或者 CLI命令来启停、移动、删除容器。
  • Registry:Docker Registry是一个集中存储与分发镜像的服务。构建完 Docker镜像后,就可在当前宿主机上运行。但如果想要在其他机器上运行这个镜像,就需要手动复制。此时可借助Docker Registry来避免镜像的手动复制。一个 Docker Registry可包含多个 Docker仓库,每个仓库可包含多个镜像标签,每个标签对应一个 Docker镜像。这跟 Maven的仓库有点类似,如果把 Docker Registry比作Maven仓库的话,那么 Docker仓库就可理解为某jar包的路径,而镜像标签则可理解为jar包的版本号。Docker Registry可分为公有Docker Registry和私有Docker Registry。 最常用的DockerRegistry莫过于官网的Docker Hub, 这也是默认的Docker Registry。 Docker Hub上存放着大量优秀的镜像, 我们可使用Docker命令下载并使用。

安装

按照菜鸟的步骤,使用yum安装即可。

常用命令

镜像相关

  • docker search java:在Docker Hub(或阿里镜像)仓库中搜索关键字(如java)的镜像
  • docker pull java:8:从仓库中下载镜像,若要指定版本,则要在冒号后指定
  • docker images:列出已经下载的镜像
  • docker rmi java:删除本地镜像
  • docker build:构建镜像

容器相关

  • docker run -d -p 91:80 nginx :在后台运行nginx,若没有镜像则先下载,并将容器的80端口映射为宿主机的91端口。
  • -d:后台运行
  • -P:随机端口映射
  • -p:指定端口映射
  • -net:网络模式
  • docker ps:列出运行中的容器
  • docker ps -a :列出所有的容器
  • docker stop 容器id:停止容器
  • docker kill 容器id:强制停止容器
  • docker start 容器id:启动已停止的容器
  • docker inspect 容器id:查看容器的所有信息
  • docker container logs 容器id:查看容器日志
  • docker top 容器id:查看容器里的进程
  • docker exec -it 容器id /bin/bash:进入容器
  • exit:退出容器
  • docker rm 容器id:删除已停止的容器
  • docker rm -f 容器id:删除正在运行的容器

所有命令

  • docker
  • docker COMMAND --help

构建镜像

  • 确定镜像模板:如java、nginx
  • 新建Dockerfile文件
  • 使用Dockerfile的指令完善Dockerfile的内容
  • 在Dockerfile文件的所在路径执行docker build -t imageName:tag .,-t指定镜像名称,末尾的点标识Dockerfile文件的路径
  • 执行docker run -d -p 92:80 imageName:tag即可

备注:RUN命令在 image 文件的构建阶段执行,执行结果都会打包进入 image 文件;CMD命令则是在容器启动后执行。另外,一个 Dockerfile 可以包含多个RUN命令,但是只能有一个CMD命令。注意,指定了CMD命令以后,docker container run命令就不能附加命令了,否则它会覆盖CMD命令。

Docker Compose

Docker Compose是 docker 提供的一个命令行工具,用来定义和运行由多个容器组成的应用。使用 compose,我们可以通过 YAML 文件声明式的定义应用程序的各个服务,并由单个命令完成应用的创建和启动。

以上就是本次介绍的全部相关知识点,如果有任何补充可以联系我们小编。

(0)

相关推荐

  • docker-compose ports和expose的区别详解

    docker-compose中有两种方式可以暴露容器的端口:ports和expose. ports ports暴露容器端口到主机的任意端口或指定端口,用法: ports: - "80:80" # 绑定容器的80端口到主机的80端口 - "9000:8080" # 绑定容器的8080端口到主机的9000端口 - "443" # 绑定容器的443端口到主机的任意端口,容器启动时随机分配绑定的主机端口号 不管是否指定主机端口,使用ports都会将端口暴

  • docker-compose的安装和使用详解

    Docker Compose 是一个用来定义和运行复杂应用的 Docker 工具. 使用 Docker Compose 不再需要使用 shell 脚本来启动容器.(通过 docker-compose.yml 配置) Docker Compose的安装 Github源 sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr

  • 详解如何使用Docker-Compose命令

    你可以通过多种方式来管理和部署Docker容器.你可以直接使用Docker命令.借助众多GUI工具中的一款(基于Web的工具和面向桌面客户端的工具),也可以选择走docker-compose这条路. Docker Compose是什么东东?Docker Compose用于创建容器及容器之间的连接.然而,docker-compose命令的用途实际上广泛得多.使用此命令可以:构建映像.扩展容器.修复容器.查看容器的输出.列出容器的公共端口等等. 那么如何使用docker-compose呢?不妨一探究

  • Python实现程序的单一实例用法分析

    本文实例讲述了Python实现程序的单一实例用法.分享给大家供大家参考.具体如下: 这里先使用win32ui.FindWindow查找窗口名字,如果不存在则会抛出一个异常 import wx import win32ui import win32con try: # 首先查找该程序是否已经运行 win = win32ui.FindWindow(None, '窗口名字') try: if win: win.ShowWindow(win32con.SW_SHOWNORMAL) except: pas

  • Docker 7 docker在阿里云的使用详解

    在传统模式中,开发团队在开发环境中完成软件开发,自己做了一遍单元测试, 测试通过,ᨀ交到代码版本管理库.运维把应用部署到测 试环境, QA 进行测试,没问题后通知部署人员发布到生产环境. 在上述过程中涉及到至少三个环境:开发.测试和生产.现实情况是,开发自测 没问题,但到了测试或者生产环境程序无法运行,让开发团队排查,经过长时间 排查最后发现是测试环境的一个第三方库过时了.这样的现象在软件开发中很普 遍,已经不适用如今的快速开发和部署.docker可以满足你的需求. 阿里云容器hub开发者平台,

  • Python面向对象之类和实例用法分析

    本文实例讲述了Python面向对象之类和实例用法.分享给大家供大家参考,具体如下: 类 虽然 Python 是解释性语言,但是它是面向对象的,能够进行对象编程.至于何为面向对象,在此就不详说了.面向对象程序设计本身就很值得深入学习,如要了解,请参阅网上其他的资料. 面向对象最重要的概念就是类(Class)和实例(Instance),牢记 类 是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的"对象",每个对象都拥有相同的方法,但各自的数据可能不同. 以Studen

  • C++ const关键字的实例用法

    C++中的const更像编译阶段的#define const int m = 10; int n = m; 变量是要占用内存的,即使被const修饰也不例外.m,n两个变量占用不同的内存,int n = m:表示将m的值赋给n. 在C语言中,编译器会先到m所在的内存取出一份数据,再将这份数据赋给n: 在C++中,编译器会直接将10赋给m,没有读取内存的过程,和int n = 10效果一样. 在C++中的常量更类似于#define命令,是一个值替换的过程,只不过#define是在预处理阶段替换,而

  • python3中sys.argv的实例用法

    sys.argv就是一个从程序外部获取参数的,这个外部指的是我们执行python文件时后面追加的参数,例如:python3 test.py test1 test2 从外部获取的参数可以是单个也可以是多个,获取的是一个列表(list),也就是说sys.argv其实可以看做是一个列表,能用[]提取到其中的元素,第一个元素是程序本身,其次才是外部追加的参数 import sysprint(sys.argv[0]) 执行这个python文件 D:\Python36\python.exe F:/老男孩Py

  • Flask中sqlalchemy模块的实例用法

    一.安装 $ pip install flask-sqlalchemy 二.配置 配置选项列表 : SQLALCHEMY_NATIVE_UNICODE | 可以用于显式禁用原生 unicode 支持.当使用 不合适的指定无编码的数据库默认值时,这对于 一些数据库适配器是必须的(比如 Ubuntu 上某些版本的 PostgreSQL ).| | SQLALCHEMY_POOL_SIZE | 数据库连接池的大小.默认是引擎默认值(通常 是 5 ) | | SQLALCHEMY_POOL_TIMEOU

  • python time()的实例用法

    顾名思义,本期内容肯定是涉及编程时间,那在操作python要怎么用time这个方法呢?一起来看下吧~ 时间模块的定义与使用: 时间模块time是python自带的模块,它内部封装了一些获取时间戳和字符串形式时间的函数. 导入方法如下: import time 获取时间戳: tiem.time():获取当前时间戳. 时间戳是指从计算机元年到现在经过的秒数. 计算机元年是指1970年1月1日0时0分0秒. 另外在python中时间戳表示为秒数,在java中表示为毫秒数. 返回值: 浮点数,内容是计算

  • Python3中FuzzyWuzzy库实例用法

    万事万物都有自身存在的道理,虽然在python中有些代码我们并不常见.经常会觉得不是常用,就可以避之,但是大家好像都遗忘了一件事情,就是"真理都掌握在少数人手中",往往最不起眼的库,经常能给我们带来高效率,最适宜的使用过程,好啦,下面就给大家讲下FuzzyWuzzy库啦~ 前置条件 Python3 python-Levenshtein 安装方法: 通过Pip安装 pip install fuzzywuzzy 导入库: fromfuzzywuzzy import fuzz 做个简单的测试

  • Python中return函数返回值实例用法

    在学习return函数时候,还是要知道了解它最主要的函数作用,比如,怎么去实现返回一个值,另外还有就是我们经常会用到的使用return能够进行多值输出,这才是我们需要抓住知识的重点,针对上述所提及的内容,都可以来往下看文章,答案都在文章内容获取哦~ return 添加返回值 return 显示返回对象 返回值接受:value = func() 例子:计算学成最高分 listv = [90,80,88,77,66] # 分数计算return高分 def scoreCalculate(values)

  • python中reload重载实例用法

    当我们想对python中原有的模块进行覆盖,又不希望退出当前的程序,就需要用到重载的概念.这样既能使模块得到更新,又不影响解释器的使用.在导入的模块上,也是对之前原有模块的一次覆盖,包括最初导入时所加载的各种过程.下面我们学习reload的一些基础内容,在实例中体会加载功能. 1.装载MyModule语法演示: from imp import reload reload(MyModule) 2.参数 module -- 模块对象. 3.返回值 返回模块对象. 4.实例 当前目录下有一个test.

随机推荐