Hello World

docker run ubuntu:15.10 /bin/echo "Hello world"
  • docker 是命令二进制文件
  • run 运行一个容器
  • ubuntu:15.10 镜像名称,通过是名字加版本号
  • 后面是容器里执行的任务

交互式,进入镜像内部

 docker run -i -t ubuntu:15.10 /bin/bash
  • -t:在新容器内指定一个伪终端或终端。
  • -i:允许你对容器内的标准输入 (STDIN) 进行交互。

后台运行

# docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
6e42dee957d59d818d0d21bbf0ff8b2bc84d1006baa2696e81f33e023d3e2c04 # docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e42dee957d5 ubuntu:15.10 "/bin/sh -c 'while t…" 2 seconds ago Up 1 second sad_villani # docker logs 6e42dee957d5
hello world
hello world
hello world

停止运行

# docker stop  6e42dee957d5
6e42dee957d5

容器

载入镜像

 docker pull training/webapp

运行应用

# docker run -d -P training/webapp python app.py

# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c99a63cd5cb3 training/webapp "python app.py" 4 seconds ago Up 3 seconds 0.0.0.0:32769->5000/tcp jovial_elion # curl localhost:32769
Hello world!
  • -d:让容器在后台运行。
  • -P:将容器内部使用的网络端口映射到我们使用的主机上。本地端口是32769,映射内部端口5000.

指定端口映射

[root@bigdata-base-001 ~]# docker run -d -p 5000:5000 training/webapp python app.py
458bb7a6520a46e74137032770f846a5faf9afb43b6ba324667d4b1936566ea0
[root@bigdata-base-001 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
458bb7a6520a training/webapp "python app.py" 4 seconds ago Up 3 seconds 0.0.0.0:5000->5000/tcp wizardly_babbage
c99a63cd5cb3 training/webapp "python app.py" About a minute ago Up About a minute 0.0.0.0:32769->5000/tcp jovial_elion
[root@bigdata-base-001 ~]# curl localhost:5000
Hello world!

可以发现运行两个应用,但对应本地不同的端口

查看日志

# docker logs 458bb7a6520a
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
172.17.0.1 - - [03/Jan/2019 14:13:38] "GET / HTTP/1.1" 200 -

tail日志

# docker logs -f 458bb7a6520a
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
172.17.0.1 - - [03/Jan/2019 14:13:38] "GET / HTTP/1.1" 200 -

查看应用的进程

# docker top 458bb7a6520a
UID PID PPID C STIME TTY TIME CMD
root 14801 14765 0 22:13 ? 00:00:00 python app.py

登入镜像内部

docker exec  -it 458bb7a6520a /bin/bash

移除容器

docker rm c99a63cd5cb3

查看最近一次创建的容器

# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
458bb7a6520a training/webapp "python app.py" 20 minutes ago Exited (137) About a minute ago wizardly_babbage

镜像

查看本地镜像

docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 90d5884b1ee0 5 days ago 188 MB
php 5.6 f40e9e0f10c8 9 days ago 444.8 MB

拉取镜像

docker pull ubuntu:13.10

查找镜像

docker search httpd

更新镜像

首先进入镜像

docker run -t -i ubuntu:15.10 /bin/bash
root@e218edb10161:/# apt-get update

更新后,提交副本

# docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
sha256:70bf1840fd7c0d2d8ef0a42a817eb29f854c1af8f7c59fc03ac7bdee9545aff8
  • -m:提交的描述信息
  • -a:指定镜像作者
  • e218edb10161:容器ID
  • runoob/ubuntu:v2:指定要创建的目标镜像名

构建镜像

使用docker build通过Dockerfile构建镜像。

一个示例Dockerfile

FROM    centos:6.7
MAINTAINER Fisher "fisher@sudops.com" RUN /bin/echo 'root:123456' |chpasswd
RUN useradd runoob
RUN /bin/echo 'runoob:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D

构建

$ docker build -t runoob/centos:6.7 .
Sending build context to Docker daemon 17.92 kB
Step 1 : FROM centos:6.7
---> d95b5ca17cc3
Step 2 : MAINTAINER Fisher "fisher@sudops.com"
---> Using cache
---> 0c92299c6f03
Step 3 : RUN /bin/echo 'root:123456' |chpasswd
---> Using cache
---> 0397ce2fbd0a
Step 4 : RUN useradd runoob
......
  • -t :指定要创建的目标镜像名
  • . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
# docker images | grep run
runoob/centos 6.7 b9f70b080d42 12 seconds ago 191MB

使用镜像来创建容器

# docker run -t -i runoob/centos:6.7  /bin/bash

设置镜像标签

# docker tag b9f70b080d42  runoob/centos:dev

# docker images | grep run
runoob/centos 6.7 b9f70b080d42 3 minutes ago 191MB
runoob/centos dev b9f70b080d42 3 minutes ago 191MB

镜像标签可以理解为版本号。比如我们项目demo的版本是1.5.1,那么标签可以是:

-- 构建一个镜像,名称是ryan/demo, tag是1.5.1
docker build -t ryan/demo:1.5.1 . -- 因为这个镜像是最新的,将指针latest 指向这个
docker tag ryan/demo:1.5.1 latest -- 对于版本1来说,这也是最新的
docker tag ryan/demo:1.5.1 1

也就是说,tag可以有多个对应的是同一个镜像。

Docker学习笔记1 -- 刚入手docker时的几个命令的更多相关文章

  1. Docker学习笔记之常用的 Docker Compose 配置项

    0x00 概述 与 Dockerfile 一样,编写 Docker Compose 的配置文件是掌握和使用好 Docker Compose 的前提.编写 Docker Compose 配置文件,其本质 ...

  2. docker学习笔记(2)——docker常用命令

    参考博客: 1.官网教程:https://docs.docker.com/reference/ 可以一边敲命令一边对照官网学习,也可以通过阅读docker --help来学习 2..视频教程:http ...

  3. Docker学习笔记【四】Docker 仓库

    访问仓库,仓库是集中从存放镜像的地方.类似Maven. Docker Hub 目前由Docker官方维护的一个公共仓库,其中包括15000的镜像. 注册 在 https://hub.docker.co ...

  4. docker学习笔记(6)——docker场景问题汇总(centos7 由于内核版本低带来的一系列问题,docker彻底卸载,安装、启动日志报错分析)

    参考资料: https://nachuan.blog.csdn.net/article/details/96041277 https://www.cnblogs.com/xzkzzz/p/962765 ...

  5. docker学习笔记(5)——docker场景问题汇总(docker权限问题、docker文件目录、查看docker历史日志文件)

    参考资料: 1.博客1:https://www.jianshu.com/p/d645e2ed4bb1 使用docker的时候有一些常见问题: docker权限问题:一般输入docker命令前面都要加s ...

  6. docker学习笔记4:利用docker hub上的mysql镜像创建mysql容器

    docker hub上有官方的mysql镜像,我们可以利用它来创建mysql容器,作为一个服务容器使用. 1.下载mysql镜像 docker pull mysql 2.创建镜像 docker run ...

  7. Docker学习笔记 - Docker容器内部署redis

    Docker学习笔记(2-4)Docker应用实验-redist server 和client的安装使用 一.获取redis容器(含客户端和服务端) 二.创建服务端容器 1.在终端A中运行redis- ...

  8. Docker学习笔记之一,搭建一个JAVA Tomcat运行环境

    Docker学习笔记之一,搭建一个JAVA Tomcat运行环境 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序 ...

  9. Docker学习笔记总结

    Docker学习笔记 https://yeasy.gitbooks.io/docker_practice/content/   一 环境搭建 Ubuntu安装 .添加软件源的GPG密钥 curl -f ...

随机推荐

  1. P1220 关路灯 区间dp

    题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了给村 ...

  2. 040 Http与RPC

    一直在说,但是没有系统的文档理解过. 1.本质 目前有很多Java的RPC框架,有基于Json的,有基于XML,也有基于二进制对象的. 他们最本质的区别,就是RPC主要是基于TCP/IP协议的,而HT ...

  3. 爬虫之xpath用法

    导包用: from lxml import etree

  4. phpstorm自定义代码片段

    右上角file--settings--Editor--Live Templates---+

  5. selenium设置chrome和phantomjs的请求头信息

    selenium设置chrome和phantomjs的请求头信息   出于反爬虫也好-跳转到手机端页面也好都需要设置请求头,那么如何进行呢? 目录 一:selenium设置phantomjs请求头: ...

  6. HDU 3416 Marriage Match IV 【最短路】(记录路径)+【最大流】

    <题目链接> 题目大意: 给你一张图,问你其中没有边重合的最短路径有多少条. 解题分析: 建图的时候记得存一下链式后向边,方便寻找最短路径,然后用Dijkstra或者SPFA跑一遍最短路, ...

  7. A - Character Encoding HDU - 6397 - 方程整数解-容斥原理

    A - Character Encoding HDU - 6397 思路 : 隔板法就是在n个元素间的(n-1)个空中插入k-1个板,可以把n个元素分成k组的方法 普通隔板法 求方程 x+y+z=10 ...

  8. PHP foreach 循环

    foreach (array_expression as $value)    statementforeach (array_expression as $key => $value)    ...

  9. Jmeter压测过程报错the target server failed to respond

    失败事务报错信息如下, Socket closed Non HTTP response code: org.apache.http.NoHttpResponseException (the targe ...

  10. [jzoj]1417.数学题

    Link https://jzoj.net/senior/#main/show/1417 Problem 当Alice在浏览数学书时,看到一个等式A=S,奇怪的是A和S并不相等.Alice发现可以通过 ...