Docker容器的创建、启动、和停止的方法

1、容器是独立运行的一个或一组应用,及他们的运行环境。容器是Docker中的一个重要的概念。

2、docker容器的启动有三种方式

a.交互方式,基于镜像新建容器并启动

例如我们可以启动一个容器,打印出当前的日历表

[root@rocketmq-nameserver4 ~]# docker run my/python:v1 cal ##my/python:v1为镜像名和标签

我们还可以通过指定参数,启动一个bash交互终端。

[root@rocketmq-nameserver4 ~]# docker run -it my/python:v1 /bin/bash

参数-t让Docker分配一个伪终端并绑定在容器的标准输入上,-i让容器的标准输入保持打开。

使用docker run命令来启动容器,docker在后台运行的标准操作包括

1.检查本地是否存在指定的镜像,不存在则从公有仓库下载
2.使用镜像创建并启动容器
3.分配一个文件系统,并在只读的镜像层外面挂载一层可读可写层
4.从宿主主机配置的网桥接口中桥接一个虚拟接口道容器中去
5.从地址池分配一个ip地址给容器
6.执行用户指定的应用程序
7.执行完毕之后容器被终止

my/sinatra:v2基于training/sinatra镜像进行修改后的镜像,training/sinatra为公有仓库上的镜像。

b、短暂方式,直接将一个已经终止的容器启动运行起来

可以使用docker start命令,直接将一个已经终止的容器启动运行起来。

[root@rocketmq-nameserver4 ~]# docker run my/python:v1 /bin/echo hello test
hello test

命令执行完,控制台会打印"hello test",container就终止了,不过并没有消失,可以用"docker ps -n 5 "看一下最新前5个的container,第一个就是刚刚执行过的container,可以再次执行一遍:docker start container_id

不过这次控制台看不到”hello test”了,只能看到ID,用logs命令才能看得到:docker logs container_id。可以看到两个”hello test”了,因为这个container运行了两次。

c、daemon方式,守护态运行

即让软件作为长时间服务运行,这就是SAAS啊!

例如我们启动centos后台容器,每隔一秒打印当天的日历。

$ docker run -d centos /bin/sh -c "while true;do echo hello docker;sleep 1;done"

启动之后,我们使用docker ps -n 5查看容器的信息

要查看启动的centos容器中的输出,可以使用如下方式:

$ docker logs $CONTAINER_ID ##在container外面查看它的输出
$ docker attach $CONTAINER_ID ##连接上容器实时查看:

3、终止容器

使用docker stop $CONTAINER_ID来终止一个运行中的容器。并且可以使用docker ps -a来看终止状态的容器。

终止状态的容器,可以使用docker start来重新启动。

使用docker restart命令来重启一个容器。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Docker能否成为下一个“Linux”?

    Linux操作系统在过去的20年里给数据中心带来了革命性的变化,今天它是应用程序托管平台无可争议的领导者.很难想象,将任何关键任务的生产工作负载部署到Linux以外的任何平台. 当Docker使Linux容器流行起来,这与几年前在打包.部署和托管应用程序方面开始的革命何其相似.此后,整个行业的容器使用呈指数级增长,并且与日俱增. 正如我们无法想象将任何关键应用程序部署到非Linux操作系统上一样,容器也是如此:任何应用程序都必须是容器,以满足未来Web规模的需求(即安全性.可伸缩性.平台无关性和

  • android设备不识别awk命令 缺少busybox怎么办

    android设备不识别awk命令,缺少busybox 一.什么是BusyBox ? BusyBox 是标准 Linux 工具的一个单个可执行实现.BusyBox 包含了一些简单的工具,例如 cat 和 echo,还包含了一些更大.更复杂的工具,例如 grep.find.mount 以及 telnet.有些人将 BusyBox 称为 Linux 工具里的瑞士军刀.简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令.(摘自百度百科) 二.下载BusyBox 下载B

  • docker私库Harbor的架构与组件说明

    这篇文章来了解一下harbor架构的组成和运行时各个组件的使用方式. 架构 容器信息 [root@liumiao harbor]# docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------------------------------------------------ harbor-adminse

  • Docker-compose一键部署gitlab中文版的方法步骤

    一.gitlab介绍 gitlab官方地址:https://about.gitlab.com/ GitLab是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目.它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释.可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库.团队成员可以利用内置的简单聊天程序(Wall)进行交流.它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需

  • Docker 的健康检测机制

    对于容器而言,最简单的健康检查是进程级的健康检查,即检验进程是否存活.Docker Daemon会自动监控容器中的PID1进程,如果docker run命令中指明了restart policy,可以根据策略自动重启已结束的容器.在很多实际场景下,仅使用进程级健康检查机制还远远不够.比如,容器进程虽然依旧运行却由于应用死锁无法继续响应用户请求,这样的问题是无法通过进程监控发现的. 通常我们为了防止容器断电或异常关闭后不能自动开机,我们可以加上 --restart=always 例如 [root@a

  • Docker利用busybox创建基础镜像(base image)

    Docker镜像的首行从FROM alpine之类的镜像开始,但是最初的基础镜像是如何创建的,本文使用一个busybox创建一个基础镜像,相信在此过程中会对docker一些相关的概念有进一步的理解. 什么是基础镜像(base image) 简单来说,基础镜像就是没有From或者FROM scratch开头的Dockerfile所构建出来的镜像.比如alpine,这个很小的linux镜像目前只有4M左右 [root@kong ~]# docker images |grep alpine docke

  • Alpine镜像中telnet转移至busybox-extras

    Alpine镜像中的telnet在3.7版本后被转移至busybox-extras包中,需要使用apk单独安装. 现象 Alpine版本为3.8, 不再有指向busybox的telent ~ # cat /etc/alpine-release 3.8.0 ~ # ~ # ls /usr/bin/ |grep -w busybox |grep telnet ~ # 原因 确认了相关的issue发现,在Alpine3.7时就已经有了这个变化:https://github.com/gliderlabs

  • Docker如何实现修改Docker0网桥默认网段

    1. 背景 Docker 服务启动后默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络. Docker 默认指定了 docker0 接口 的 IP 地址和子网掩码,让主机和容器之间可以通过网桥相互通信,它还给出了 MTU(接口允许接收的最大传输单元),通常是 1500 Bytes,或宿主主机网络路由上支持的默认值.这些值都可以在服务启动的时候进行配置. 2. 环境 [root@iZ2ze

  • 基于Docker的Etcd分布式部署的方法步骤

    一 环境准备 1.1 基础环境 ntp配置:略 #建议配置ntp服务,保证时间一致性 etcd版本:v3.3.9 防火墙及SELinux:关闭防火墙和SELinux 名称 地址 主机名 备注 etcd1 172.24.8.71 etcd1.example.com 用于保存相关IP信息 docker01 172.24.8.72 docker01.example.com   docker02 172.24.8.73 docker02.example.com   # hostnamectl set-h

  • Docker容器化部署尝试——多容器通信(node+mongoDB+nginx)

    原因是这样的 想要部署一个mocker平台,就在朋友的推荐下选择了 api-mocker 这个现成的项目 该项目分为服务端node.客户端vue.以及数据库mongoDB 在尝试直接部署的时候发现需要装一大堆的环境,node.mongo.nginx啊,特别的麻烦,之前简单的使用过docker,就在想能不能用docker免环境直接部署呢?于是就有了这次的尝试 多容器通信 该项目分为3个部分,于是就要建立3个容器(node.mongo.nginx) 那容器之间怎么实现通信呢? # 通过link指令建

随机推荐