有镜像才能创建容器,这是根本的前提

下面我们以下载一个centos镜像来做演示。

[root@t-docker chenzx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@t-docker chenzx]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
256b176beaff: Already exists
Digest: sha256:6f6d986d425aeabdc3a02cb61c02abb2e78e57357e92417d6d58332856024faf
Status: Downloaded newer image for centos:latest
[root@t-docker chenzx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5182e96772bf 3 weeks ago 200MB

以交互式方式启动容器

功能:新建并启动容器

参数

 --name='容器新名字':为容器指定一个别名;
-d:后台运行容器,并返回容器ID,也就是启动守护式容器;
-i:以交互式模式运行容器,通常与-t同时使用;
-t:tty,为容器重新分配一个伪终端,通常与-i同时使用;
-P:随机端口映射;
-p:指定端口映射,有以下四种格式:
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort

运行一个容器

[root@t-docker chenzx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5182e96772bf 3 weeks ago 200MB
[root@t-docker chenzx]#
[root@t-docker chenzx]# docker run -it 5182e96772bf ##这句话就是说我以centos镜像为模板,生成一个23c6bc378d16这样的一个容器
[root@23c6bc378d16 /]#
[root@23c6bc378d16 /]# ls ##这时已经进入容器的centos里面了
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

再开另外一个窗口,在宿主机上执行如下命令,看到启动的容器:

[root@t-docker chenzx]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7da6063256a0 centos "/bin/bash" 6 seconds ago Up 5 seconds practical_ardinghelli

[root@t-docker chenzx]# docker run -it --name mycentos0115 centos

[root@ 0ecd4b9f8895 /]# #看到我们又生成了一个以centos镜像为模板,id为 0ecd4b9f8895的新容器。

画外音:一个镜像可以生成多个容器

[root@t-docker chenzx]# docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

0ecd4b9f8895        centos              "/bin/bash"         3 minutes ago       Up 3 minutes                            mycentos0115

docker ps

功能:查看有哪些容器在跑,在宿主机上执行该命令。

参数:

-a:列出当前所有正在运行的容器+历史上运行过的;
-l:last,显示最近创建的容器;
-n:显示最近n个创建的容器;
-q:静默模式,只显示容器编号
--no-trunc:不截断输出 [root@t-docker chenzx]# docker ps ##不加任何参数,表示当前正在运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7da6063256a0 centos "/bin/bash" 6 seconds ago Up 5 seconds practical_ardinghelli

退出容器

exit:容器停止退出

ctrl+P+Q:容器不停止退出

启动容器

先查出最近启动的容器,看到它们是关闭的状态:

[root@t-docker chenzx]# docker ps -n 2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ecd4b9f8895 centos "/bin/bash" 7 minutes ago Exited (137) 16 seconds ago mycentos0115
7da6063256a0 centos "/bin/bash" 23 minutes ago Exited (130) 4 minutes ago practical_ardinghelli

启动容器

[root@t-docker chenzx]# docker start 0ecd4b9f8895  ##注意加的是上面ps查出的容器id
0ecd4b9f8895
[root@t-docker chenzx]# docker ps #查看当前正在运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ecd4b9f8895 centos "/bin/bash" 8 minutes ago Up 5 seconds mycentos0115

重启容器

[root@t-docker chenzx]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ecd4b9f8895 centos "/bin/bash" 10 minutes ago Up 2 minutes mycentos0115
[root@t-docker chenzx]# docker restart 0ecd4b9f8895
0ecd4b9f8895

停止容器

[root@t-docker chenzx]#  docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ecd4b9f8895 centos "/bin/bash" 12 minutes ago Up About a minute mycentos0115
[root@t-docker chenzx]#
[root@t-docker chenzx]# docker stop 0ecd4b9f8895
0ecd4b9f8895

强制停止容器

[root@t-docker chenzx]#  docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ecd4b9f8895 centos "/bin/bash" 13 minutes ago Up 2 seconds mycentos0115
[root@t-docker chenzx]#
[root@t-docker chenzx]# docker kill 0ecd4b9f8895
0ecd4b9f8895

删除已经停止的容器

docker rm:删除容器

docker rmi: 删除镜像

[root@t-docker chenzx]#  docker ps -n 2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ecd4b9f8895 centos "/bin/bash" 15 minutes ago Exited (137) About a minute ago mycentos0115
7da6063256a0 centos "/bin/bash" 31 minutes ago Exited (130) 11 minutes ago practical_ardinghelli
[root@t-docker chenzx]# docker rm 0ecd4b9f8895 删除已经关闭的容器
0ecd4b9f8895
[root@t-docker chenzx]# docker rm -f 0ecd4b9f8895 强制删除正在运行中的容器
0ecd4b9f8895

一次性删除多个容器:

docker rm -rf $(docker ps -a -q)

docker ps -a -q |xargs docker rm

以守护式方式启动容器

命令格式:docker run -d 容器名

参数说明:

-d:以守护式方式启动容器:

-it:以交互式方式启动容器;

[root@t-docker chenzx]# docker run -d centos
fa80295c878acdf30531ecbf58be87b00427e4f941d10edf93b5d066ba40d000
[root@t-docker chenzx]# docker ps 没有输出,奇怪吗
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

问题:上面我们看到通过docker run -d ceonts方式(即守护式启动容器)启动容器后,再通过docker ps -a进行查看,会发现容器已经退出。很重要的说明一点: Docker容器后台运行,就必须有一个前台进程。

容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。

这个是docker机制的问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务只需要启动相应的service即可。例如service nginx start。但是,这样做,nginx为后台模式运行,就导致docker前台没有运行的应用,这样的容器后台启动后,会立即自杀因为他觉得他没事情可做了。所以, 最佳的解决方案是,将你要运行的程序以前台进程的形式运行。

[root@t-docker chenzx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest 690cb3b9c7d1 7 days ago 463MB
centos latest 5182e96772bf 3 weeks ago 200MB
[root@t-docker chenzx]#
[root@t-docker chenzx]# docker run -it centos
[root@50fffecec77f /]# exit
exit
[root@t-docker chenzx]# docker run -it centos /bin/bash ##这个表示使用镜像centos:latest以交互式模式启动一个容器,并在容器内执行/bin/bash命令
[root@4eeeb44eef56 /]# exit
exit
[root@t-docker chenzx]# docker run -it centos /bin/bash

上面例子是用-it以交互式启动的容器。

那么你可能要问了,用-d以守护式启动容器有什么用呢。

查看容器日志

命令格式:docker logs -f -t --tail 容器id

参数说明:

-t是加入时间戳

-f是跟随最新的日志打印

--tail是Linux命令,表示显示最后多少条

[root@t-docker chenzx]# docker run -d centos /bin/sh  -c "while true;do echo hello zzyy;sleep 2;done"
b118747a68bbfc6698f9ef9e5d817c037c6ecb9835b86964f6a8b90683dcd178
[root@t-docker chenzx]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b118747a68bb centos "/bin/sh -c 'while t…" 5 seconds ago Up 4 seconds elegant_euclid

说明:上面命令的意思是用-d以后台方式运行容器centos,并在容器里面运行命令/bin/bash -c "while true;do echo hello zzyy;sleep 2;done"。最后我们通过docker ps看status是up状态,说明我们虽然以后台的方式启动了,但是这次容器并没有退出。

通过如下日志可以证明后台-d方式运行的容器没有停止:

[root@t-docker chenzx]# docker logs -t -f --tail 3 b118747a68bb
2018-08-30T01:47:55.198597337Z hello zzyy
2018-08-30T01:47:57.199661966Z hello zzyy
2018-08-30T01:47:59.200811444Z hello zzyy
2018-08-30T01:48:01.202114367Z hello zzyy
2018-08-30T01:48:03.203363568Z hello zzyy

查看容器内的进程

命令格式:docker top 容器id

[root@t-docker chenzx]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b118747a68bb centos "/bin/sh -c 'while t…" 8 minutes ago Up 8 minutes elegant_euclid
[root@t-docker chenzx]# docker top b118747a68bb
UID PID PPID C STIME TTY TIME CMD
root 2952 2934 0 09:43 ? 00:00:00 /bin/sh -c while true;do echo hello zzyy;sleep 2;done
root 3410 2952 0 09:52 ? 00:00:00 sleep 2

查看容器内的细节

命令格式:docker inspect 容器id

该命令会以json形式返回

[root@t-docker chenzx]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b118747a68bb centos "/bin/sh -c 'while t…" 13 minutes ago Up 13 minutes elegant_euclid
[root@t-docker chenzx]# docker inspect b118747a68bb
[
{
"Id": "b118747a68bbfc6698f9ef9e5d817c037c6ecb9835b86964f6a8b90683dcd178",
"Created": "2018-08-30T01:43:24.433793568Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true;do echo hello zzyy;sleep 2;done"
.....

进入正在运行的容器并以命令行交互

重新进入容器的两个命令:

docker exec -it 容器id bash shell

docker attach 容器id

上面两个命令的区别:

attach:直接进入容器启动命令的终端,不会启动新的进程;

exec:是在容器中打开新的终端,并且可以启动新的进程。

[root@t-docker chenzx]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@t-docker chenzx]# docker run -it centos
[root@3d6cf42834fa /]# 启动一个容器实例并进入容器里面
[root@3d6cf42834fa /]# pwd
/
[root@3d6cf42834fa /]# exit
exit
[root@t-docker chenzx]# docker run -it centos /bin/bash
[root@3cb3babb797f /]# pwd
/

说明:docker run -it centos和docker run -it centos /bin/bash是一样的。也就是说docker run -it centos,就等价于

docker run -it centos /bin/bash。

继续我们的实验

[root@t-docker chenzx]# docker run -it centos
[root@04b568f7ee84 /]# ctrl+P+Q:容器不停止退出
[root@t-docker chenzx]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
04b568f7ee84 centos "/bin/bash" 29 seconds ago Up 28 seconds
[root@t-docker chenzx]# docker attach 04b568f7ee84
[root@04b568f7ee84 /]# ls /tmp
ks-script-Lu6hIQ yum.log
[root@t-docker chenzx]# docker exec -it f188fac12d4f ls /tmp
ks-script-Lu6hIQ yum.log
说明: -t表示--tty 

上面我们的实验,可以看到以attch方式进入运行中的容器,是需要在容器里面的命令行里面执行ls /tmp操作;而exec方式进入运行中的容器,是直接在exec命令后面写ls /tmp的操作,并把结果返回到宿主机的界面上。不好意思,表达的可能有点绕,看上面例子就会明白。

不过,exec也有进入容器执行命令的功能(和attach功能一样),如下:

[root@t-docker chenzx]# docker exec -it f188fac12d4f /bin/bash
[root@f188fac12d4f /]# ls /tmp
ks-script-Lu6hIQ yum.log

所以,exec的功能比attach功能强大,建议只学exec的方式进入容器。

从容器内拷贝文件到宿主机上

应用场景:当我们以前台交互式方式运行容器后,如果在容器里面执行exit操作,容器就会停止,此时容器中运行的数据也就没有了。这时我们就需要把运行中的容器数据拷贝到宿主机上来保留。

命令格式:docker cp 容器id或容器名:容器内路径 目的宿主机路径

[root@t-docker tmp]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f188fac12d4f centos "/bin/bash" 25 minutes ago Up 25 minutes heuristic_nightingale
[root@t-docker tmp]# docker cp f188fac12d4f:/tmp/yum.log /tmp/
[root@t-docker tmp]# ls
yum.log 

从宿主机上拷贝文件到容器内

命令格式:docker cp 宿主机路径  容器id或容器名:容器内路径

容器的导入和导出

[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
726de1ae4720 centos "/bin/bash" 39 minutes ago Exited (0) 25 seconds ago mycentos0115
ba507e4553aa 1e "/bin/bash" 45 minutes ago Up 32 minutes practical_burnell

#将镜像导出到文件

[root@localhost ~]# docker export ba507e4553aa > centosm.tar

# 创建一个新镜像从导出的文件导入

[root@localhost ~]# docker import - centosm < centosm.tar
sha256:4555525043489ebeaab1976d4d6a7cfdaf1bb7f50d131707e8f3a0ce1cf24038
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centosm latest 455552504348 8 seconds ago 202MB
centos latest 1e1148e4cc2c 2 months ago 202M 

其他容器命令

还有其他一些docker容器常用命令,比如diff等等,平时基本不用,就先不学了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28916011/viewspace-2213013/,如需转载,请注明出处,否则将追究法律责任。

docker 9 docker的容器命令的更多相关文章

  1. docker的使用 一容器命令

    Docker容器命令 前提 执行容器的前提是有镜像 . #创建并启动容器 docker run [options] images [command][args] // option 的说明 --nam ...

  2. docker初识-docker安装、基于docker安装mysql及tomcat、基本命令

    一.docker是什么 用go语言开发,开源的应用容器引擎,容器性能开销极低 二.整体架构图 Docker 包括三个基本概念: 镜像(Image):Docker 镜像(Image),就相当于是一个 r ...

  3. Docker镜像与容器命令(转)

    Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机).bare metal. ...

  4. 通过运行一个tomcat容器来记录下初学docker常用的几个命令---容器篇

    1.查看容器列表 显示正在运行的容器: [root@localhost HMK]# docker ps 显示所有容器,包括未运行的: [root@localhost HMK]# docker ps - ...

  5. docker(3)容器管理命令

    接着上一篇,今天说一下Docker 有关容器的常用命令.算是比较详细了吧. docker run  命令: 注:此命令作用是使用一个镜像运行启动一个容器. 在启动运行的时候 会检查docker 中是否 ...

  6. docker(三) 镜像和容器常用命令

    一.镜像操作 1.搜索镜像 可以直接在Docker Hub 直接搜索镜像,当然也可以使用命令来搜索. docker search 名称 docker search tomcat 2.拉取镜像 dock ...

  7. Docker系列教程05 容器常用命令

    https://mp.weixin.qq.com/s?__biz=MzI4ODQ3NjE2OA==&mid=2247483890&idx=1&sn=2721f08624e6de ...

  8. Docker容器命令

    ★根本前提:本地主机有镜像才能创建容器 ⒈docker run [Options] 镜像名称或镜像ID [Command] [Arg...] 用途:利用镜像创建容器实例 Options说明(常用):注 ...

  9. Docker学习总结(4)——Docker镜像与容器命令

    Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机).bare metal. ...

随机推荐

  1. WePY - 小程序敏捷开发实践丨掘金开发者大会

    声明:内容转载他处,如有侵权,可协商下架 本主题虽然在其它地方讲了很多次,但还是有非常多新内容.因为很多东西正在做或者想要做.本次分享主要分为以下几个部分: WePY 的介绍 WePY 的用户 上面展 ...

  2. jquery网页日历显示控件calendar3.1使用详解

    关于日历插件,我做了好多次尝试,一直致力于开发一款简单易用的日历控件.我的想法是争取在引用这个控件后,用一行js代码就能做出一个日历,若在加点参数,就能自定义外观和功能丰富多彩的日历.Calendar ...

  3. Linux上Simplescalar/ARM的安装和运行文档

    本文是基于ARM的simplescalar在ubuntu下的安装说明 1.1 软件下载  *********************文件下载地址:http://yunpan.cn/cw2n7dAyfG ...

  4. UOJ#310. 【UNR #2】黎明前的巧克力(FWT)

    题意 题目链接 Sol 挂一个讲的看起来比较好的链接 然鹅我最后一步还是没看懂qwq.. 坐等SovietPower大佬发博客 #include<bits/stdc++.h> using ...

  5. cf1121F. Compress String(后缀自动机)

    题意 题目链接 Sol 居然出个SAM板子也是没谁了233 #include<bits/stdc++.h> #define Pair pair<int, int> #defin ...

  6. IIS搭建Web服务器,外网可以访问,但无法加载视频

    错误提示如下: 可能原因: IIS的MIME中未注册MP4.ogg.webm相关类型,导致IIS无法识别 解决方法: 在IIS中注册MP4.ogg.webm类型,以下以MP4为例,ogg和webm以此 ...

  7. MMU学习总结

    待完善 一.MMU主要完成哪些事务? 二.PowerPC上的BAT.LAW是做什么用的? 三.

  8. Android 消息异步处理之AsyncTask

    Android提供了异步处理消息的方式大致有两种,第一种是handler+Thread,之前已经对于这种方式做过分析,第二种就是AsyncTask,这是Android1.5提供的一种轻量级的工具类,其 ...

  9. 使用VSTS的Git进行版本控制(四)——在Visual Studio中管理分支

    使用VSTS的Git进行版本控制(四)--在Visual Studio中管理分支 可以从web版Team Services Git repo 的Branches视图中管理工作.定制视图来跟踪最关注的分 ...

  10. web前端(2)—— 前端技术介绍

    前端技术 前文了解了什么是前端,那么前端技术到底有哪些呢?最核心的就这三个: html/html5 css/css3 javascript 什么是HTML HyperText Markup Langu ...