3 Docker 入门

  1. 首先确保docker 已成功安装在Linux 或windows 系统中

    我们可以使用

    docker info

查看docker是否成功安装和正常运行

  1. 运行我们第一个docker 容器
  • 我们使用docker run 命令启动一个容器

      sudo docker run -i -t ubuntu /bin/bash 
    
      docker pull registry.docker-cn.com/library/ubuntu:16.04

其实上面两种方式都是一样的,只不过第一种是先在在本机获取,要是本机没有直接去Docker hub 的镜像源去获取,而第二种方法是去我们指定的镜像源去获取,推荐使用第二种,因为第一种方法获取的,有时候会超时因为是有GFW

随后docker 在文件系统内部用这个镜像创建了一个容器

  1. 使用这个容器
  • 在我们创建一个容器之后,我们将会有一个交互的shell

    [root@localhost ~]# sudo docker run -i -t ubuntu /bin/bash

    root@90580bd2674a:/#

    我们就成功的创建了一个Linux 容器了,我们可以向操作普通Linux 一样操作这个容器的内容

    1 hostname

    2 cat /etc/hosts

    3 ip a

    4 ps -aux

    5 vim a

    6 apt-get update && apt-get install vim

** 当我们想结束容器的时候 输入 exit 就退出这个容器了**

docker ps -a//所有容器
docker ps //当前运行的容器
  1. 容器的命名
  • 给 容器命名

    sudo run --name wsc_container -i -t ubuntu /bin

这样我么就成功的创建可一个我们命名的容器,容器命名的好处有很多,例如一个容器名称只有一个,我们可以通过容器的名称来判断容器的功能。要是创建的容器名称重名的话会创建失败

  1. 重启已经停止的容器

     docker start wsc_container //根据名称
    
     docker start e691305b1375 //根据ID
  2. 附着到容器上

简单来说就是连接到一个已经正在运行的容器中,相当于重新创建一个SHell连接

docker attach wsc_container  //根据名称
docker attach e691305b1375 //根据ID

7.创建守护式容器

守护容器就是一个运行在后台的容器,用于长期的运行。就像我们系统的中的服务一样,在后台默默无闻的工作

 sudo docker run --name daemon_dave -d ubuntu /bin/sh -c "while true : do echo hello world: sleep 1 : done"

-d 参数表示 守护容器 ,我们在容器中运行了一个 while 循环 用于一直打印 hello word

  1. 容器内部都在干什么

获取守护式容器的日志

sudo docker logs daemon_dave

跟踪守护式容器

  docker logs -f daemon_dave

跟踪守护式容器 并输出时间

 docker logs -f daemon_dave
  1. Docker 日志驱动

    可以将docker 容器的日志输出到别的地方

    sudo docker run --log-driver="syslog" --name daemon_dwayne -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

上面的这个会将容器的日志输出到Syslog 中,

  1. 查看容器内的进程

    查看内部的进程

    docker top daemon_dave

11.Docker 统计消息

使用docker status 显示一个或者多个容器的统计信息,并动态显示

docker top daemon_dwayne

12.在容器内部运行进程

我们可以通过命令在容器外部向容器的内部运行程序

sudo docker exec -d daemon_dave touch /etc/new_config_file

获取运行交互式命令

docker exec -t -i daemon_dave /bin/bash 

-t 和 -i 表示进程创建TTY 并捕捉到STDIN
  1. 停止守护进程

    docker stop daemon_dave

    docker stop e691305b1375

  2. 自动重启容器

因为容器会各种原因重启,我们可以通过在创建的时候添加命令,然后使容器在关闭之后任然能重启

sudo docker run  --restart=on-failure:5  --name daemon_restart -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

上面的参数中 --restart=on-failure:5 是指 在容器重启最多5次 我们也可以将标志设置为--restart=always 指 无论docker 怎样 ,容器都会重启

  1. 深入容器

通过命令 inspect 查看更多容器的信息

docker inspect daemon_dave

将会显示下面的这些信息

[root@localhost ~]# docker inspect daemon_dave
[
{
"Id": "6aab43d6f55ad8531329917623d26a1b00139ee9589ce23f84943cb2282a502a",
"Created": "2018-01-14T08:41:49.345208872Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true; do echo hello world; sleep 1; done"
],
"State": {
"Status": "exited",
"Running": false,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 0,
"ExitCode": 0,
"Error": "",
"StartedAt": "2018-01-14T08:41:50.053852791Z",
"FinishedAt": "2018-01-14T08:51:52.032411018Z"
},
"Image": "sha256:00fd29ccc6f167fa991580690a00e844664cb2381c74cd14d539e36ca014f043",
"ResolvConfPath": "/var/lib/docker/containers/6aab43d6f55ad8531329917623d26a1b00139ee9589ce23f84943cb2282a502a/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/6aab43d6f55ad8531329917623d26a1b00139ee9589ce23f84943cb2282a502a/hostname",
"HostsPath": "/var/lib/docker/containers/6aab43d6f55ad8531329917623d26a1b00139ee9589ce23f84943cb2282a502a/hosts",
"LogPath": "",
"Name": "/daemon_dave",
"RestartCount": 0,
"Driver": "devicemapper",
"MountLabel": "system_u:object_r:svirt_sandbox_file_t:s0:c857,c907",
"ProcessLabel": "system_u:system_r:svirt_lxc_net_t:s0:c857,c907",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "journald",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "docker-runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": null,
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DiskQuota": 0,
"KernelMemory": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": -1,
"OomKillDisable": false,
"PidsLimit": 0,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0
},
"GraphDriver": {
"Name": "devicemapper",
"Data": {
"DeviceId": "25",
"DeviceName": "docker-253:0-8727-e5801ce40b05766564430ed8b938a404cbacd96d4a9f2ed70e134e2e2ba408b6",
"DeviceSize": "10737418240"
}
},
"Mounts": [],
"Config": {
"Hostname": "6aab43d6f55a",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/sh",
"-c",
"while true; do echo hello world; sleep 1; done"
],
"Image": "ubuntu",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "42290d6bf35d0bb0aa0e483f2581c4da8f915071f06b4f316d195cf30ecbc087",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": null,
"SandboxKey": "/var/run/docker/netns/42290d6bf35d",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "",
"Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"MacAddress": "",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "c14208a2c1e7fd8e0dd0a8ad05cda943249becbc842857160494222340160c92",
"EndpointID": "",
"Gateway": "",
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": ""
}
}
}
}
]

我们也可以单独的查看容器中的内容信息

	     docker inspect  --format='{{.State.Running }}'   daemon_dave

   docker inspect  --format='{{.Name}}  {{.State.Running }}'   daemon_dave
  1. 删除容器
docker rm stoic_pike

 docker rm thirsty_varahamihira

Docker 入门 之基本命令的更多相关文章

  1. Docker入门教程(二)命令

    Docker入门教程(二)命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第二篇,介绍了Docker的基本命令以及命令的用法和功能. 在Docker ...

  2. Docker入门基础(一)

    Docker入门基础 Linux只存在文件目录,不存在“盘”的概念 Dockers优点:方便部署环境.资源占用少(微服务) Docker的三大概念 镜像:类似虚拟机的镜像.用俗话说就是安装文件.容器: ...

  3. Docker 入门 第二部分: 容器

    目录 Docker 入门 第二部分: 容器 先决条件 介绍 你的新开发环境 使用 Dockerfile 定义一个容器 Dockerfile 应用本身 requirements.txt app.py 构 ...

  4. 【Docker入门】

    目录 Linux容器 Docker的优势 Docker三大概念 安装使用Docker 补充知识 [Docker入门] 发布文章 "qq_41964425" @ *** 所谓Dock ...

  5. Docker入门以及常用命令

    目的: Docker入门 Docker简介 Centos7安装Docker Docker HelloWorld运行原理解析 阿里云镜像仓库配置 Docker常用命令 Docker基本命令 Docker ...

  6. Docker入门篇(一)安装docker

    Docker入门篇(一)安装docker Docker的来源 由dotCloud公司首创及正式命名,但是企业规模小,影响力不够,所以在快要坚持不住的时候,开始吃百家饭--开源了.不开则已,一开惊人.越 ...

  7. 第三章 Docker 入门

    第三章 docker 入门 3.1 确保docker已经就绪 首先查看docker程序是否存在,功能是否正常 [#3#cloudsoar@cloudsoar-virtual-machine ~]$su ...

  8. Docker入门教程(九)10个镜像相关的API

    Docker入门教程(九)10个镜像相关的API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第九篇,重点介绍了镜像相关的Docker Remote ...

  9. Docker入门教程(八)Docker Remote API

    Docker入门教程(八)Docker Remote API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第八篇,重点介绍了Docker Remote ...

随机推荐

  1. ES基本操作

    倒排索引 ElasticSearch使用一种称为倒排索引的结构,它适用于快速的全文搜索.一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表. 查询 # 查看索引配置GE ...

  2. shell 命令 netstat 查看端口占用

    netstat 查看 8888端口的占用情况

  3. springMVC一个Controller处理所有用户请求的并发问题

    有状态和无状态的对象基本概念: 有状态对象(Stateful Bean),就是有实例变量的对象 ,可以保存数据,是非线程安全的.一般是prototype scope. 无状态对象(Stateless ...

  4. Android-HttpURLConnection-Get与Post请求登录功能

    HttpURLConnection 在这请求方式是Java包中的: AndroidManifest.xml配置权限: <!-- 访问网络是危险的行为 所以需要权限 --> <uses ...

  5. 在EF中使用Expression自动生成p=>new Entity(){X="",Y="",..}格式的Lambda表达式灵活实现按需更新

    一.基本介绍      回忆:最早接触Expression是在学校接触到EF的时候,发现where方法里的参数是Expression<Func<T,bool>>这么一个类型,当 ...

  6. boost bind及function的简单实现

    前面在做 http server 的时候,需要做一个回调的接口,要求能够绑定类的函数以及普通的函数到这个回调里,对于这种应用要求,选择 boost 的 bind 和 function 是最合适不过了, ...

  7. JQuery Mobile - html5+CSS 禁止IOS长按复制粘贴实现

    因为在移动端APP需要实现长按执行别的事件,但是在IOS系统有默认的长按选择复制粘贴,禁止此功能在网上找了很多资料,最终整理出目前最好的解决方法.实际测试,也并不是很理想,但是可能没有更好办法了! / ...

  8. ZJOI Round2游记

    虽然一试很惨但是二试还是要来玩一下的 Day 0 到余姚了,然后到余姚边上的宾馆住来下来 顺便一问老师们对边上是不是有什么误解-- 吃完晚饭就回宾馆颓了 话说半夜真刺激--住隔壁那一位手突然骨折了,本 ...

  9. [Ynoi2015]此时此刻的光辉(莫队)

    一道神题...自己写出来以后被卡常了...荣获洛谷最差解... 思路还是比较好想,对于每个数 \(\sqrt{n}\) 分块,对于 \(\sqrt{n}\) 以内的数,我们可以直接求出来.对于 \(\ ...

  10. java的基本数据类型--四类八种

    java的数据类型 1.分为基本数据类型和引用数据类型 基本数据类型的分类:整数型: byte  占用一个字节 范围-128-127 short 占用两个字节  -2^15~2^15-1 int    ...