Docker示例

时间:2022-03-26 00:45:27
运行一个Hello world

 
zane@zane-V:~$ docker run ubuntu /bin/echo 'Hello world'
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu b3e1c725a85f: Pull complete
4daad8bdde31: Pull complete
63fe8c0068a8: Pull complete
4a70713c436f: Pull complete
bd842a2105a8: Pull complete
Digest: sha256:7a64bc9c8843b0a8c8b8a7e4715b7615e4e1b0d8ca3c7e7a76ec8250899c397a
Status: Downloaded newer image for ubuntu:latest
Hello world
zane@zane-V:~$ docker run ubuntu /bin/echo 'Hello world'
Hello world
  • docker run 运行了一个容器
  • Ubuntu 是你运行的image,不如说是Ubuntu 操作系统的image
    • 如果本地没有Ubuntu image,则从Docker Hub上下载。
  • /bin/echo 是新容器的里的命令
 
当容器被创建,docker创建了 新的Ubuntu的环境,然后再内部执行/bin/echo,然后输出 Hello world.
 
容器是有周期的,上面的例子中,一旦命令被执行,容器就停止。
 
运行一个交互的容器

 
zane@zane-V:~$  docker run -t -i ubuntu /bin/bash
root@cc3ab8154346:/#
  • docker run 运行一个容器
  • Ubuntu 是你想运行的image
  • -t 标志, 在新容器中分配一个终端
  • -i 标志,允许和容器的标准输入有一个交互性的连接
  • /bin/bash 在容器内部发起一个 Bash shell
 
容器中交互接口相当于又一个虚拟机拉。
root@cc3ab8154346:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@cc3ab8154346:/# pwd
/ root@cc3ab8154346:/# exit
exit
zane@zane-V:~$
exit 退出Bash shell,容器也随之结束。
 
 
开启守护进程 Hello world

 
创建一个守护进程的容器
zane@zane-V:~$  docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
2513c80cd509ac0b61b84c2db9504d3d6b9c378841d40275b207785b137a1e66
  • -d 标志,在后台中运行容器(用来守护它)
  • 输出的一串字符串,是容器ID。且它是唯一的,用来识别容器的。让我们可以使用容器
    • 这段字符串十分长,我们可以用短ID 替换它还可以命名它,更方便使用
docker ps 查看容器十分正在运行。
zane@zane-V:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2513c80cd509 ubuntu "/bin/sh -c 'while tr" minutes ago Up minutes infallible_banach
  • 2513c80cd509 是比较短的容器ID
  • infallible_banach 容器的名字
    • docker 为启动的容器自动生成名字
    • 当然我们也可以自己制定容器的名字
为了看到后台运行的容器,正在干啥我们使用 docker logs
 
zane@zane-V:~$ docker logs infallible_banach | head
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
守护进程是在工作的,而类似这样在后台运行的,就是在Docker上运行的应用。 
 
停止这个应用
zane@zane-V:~$ docker stop infallible_banach
infallible_banach
 
已经停止了
zane@zane-V:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
运行一个简单的应用

 
学习Dcoker客户端
# Usage: [sudo] docker [subcommand] [flags] [arguments] ..
# Example:
$ docker run -i -t ubuntu /bin/bash zane@zane-V:~$ docker version
Client:
Version: 1.12.
API version: 1.24
Go version: go1.6.4
Git commit: 7392c3b
Built: Fri Dec ::
OS/Arch: linux/amd64 Server:
Version: 1.12.
API version: 1.24
Go version: go1.6.4
Git commit: 7392c3b
Built: Fri Dec ::
OS/Arch: linux/amd64
 
获得docker命令的帮助信息
$ docker --help
获取指定命令的帮助信息
zane@zane-V:~$ docker kill --help

Usage:    docker kill [OPTIONS] CONTAINER [CONTAINER...]

Kill one or more running containers

Options:
--help Print usage
-s, --signal string Signal to send to the container (default "KILL") 更多关于命令的细节以及实例: command reference
在docker中运行一个web应用
在docker中运行一个Python Flask web应用。
zane@zane-V:~$ docker run -d -P training/webapp python app.py
Unable to find image 'training/webapp:latest' locally
latest: Pulling from training/webapp e190868d63f8: Already exists
909cd34c6fd7: Already exists
0b9bfabab7c1: Already exists
a3ed95caeb02: Pull complete
10bbbc0fc0ff: Pull complete
fca59b508e9f: Pull complete
e7ae2541b15b: Pull complete
9dd97ef58ce9: Pull complete
a4c1b0cb7af7: Pull complete
Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d
Status: Downloaded newer image for training/webapp:latest
7a434a95f401d54586d97c2ae5c6d05f93f12a76adb5b83ec29f7aa929b97e7d
  • -d, 在后台中运行容器
  • -P, 在容器中任何需要的网络端口都映射到主机
    • 让你可以浏览web 应用程序
  • training/webapp,image,包含一个简单的Python Flask 应用
  • 剩余的参数组成在容器内部运行的命令。
    • python app.py 命令启动这个应用
 
查看web 应用程序容器
zane@zane-V:~$ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7a434a95f401 training/webapp "python app.py" minutes ago Up minutes 0.0.0.0:->/tcp elated_volhard
-l, 显示最近启动的容器。
 
PORTS
0.0.0.0:32768->5000/tcp
-P,传送到docker run,Docker将容器的所有端口映射到主机。
 
在这个例子中,Docker将5000端口(Flask 默认端口)映射到32768端口。
 
-p, 指定端口:
zane@zane-V:~$ docker run -d -p : training/webapp python app.py
93964cbb6941206ee011b98c5cbf806d1a285a005b96db69024febd742afaa49
zane@zane-V:~$ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93964cbb6941 training/webapp "python app.py" seconds ago Up seconds 0.0.0.0:->/tcp stupefied_wilson
这就将容器中的5000端口映射到本机的80端口;
 
验证:32768,80端口已经正常可以访问,而没有指定的8080则不能访问。
Docker示例
 
Docker示例
Docker示例
 
这样一个web 应用就已经运行在docker中。
 
设置网络端口的捷径
通过docker port 可以指定容器ID或者名字,来指定你需要对应的端口
zane@zane-V:~$ docker port elated_volhard
0.0.0.0:
  • elated_volhard,容器名称
  • 5000,容器内部的端口
  • 0.0.0.0:32768,与容器内部端口对应的外部端口
 
列出容器所有的内部端口。
zane@zane-V:~$ docker port elated_volhard
/tcp -> 0.0.0.0:
观察web应用程序的日志
zane@zane-V:~$ docker logs -f elated_volhard
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
172.17.0.1 - - [/Dec/ ::] "GET / HTTP/1.1" -
172.17.0.1 - - [/Dec/ ::] "GET /favicon.ico HTTP/1.1" -
172.17.0.1 - - [/Dec/ ::] "GET /favicon.ico HTTP/1.1" -
172.17.0.1 - - [/Dec/ ::] "GET / HTTP/1.1" -
172.17.0.1 - - [/Dec/ ::] "GET /favicon.ico HTTP/1.1" -
-f,类似tail -f ,支持不断的观察日志文件,有没有更新。
 
查看Web应用程序容器的进程
zane@zane-V:~$ docker top elated_volhard
UID PID PPID C STIME TTY TIME CMD
root : ? :: python app.py
这里只有python app.py这一个进程。
 
检查web应用的容器
放回一个json文件包含指定容器的 配置文件,状态信息等。
zane@zane-V:~$ docker inspect elated_volhard
[
{
"Id": "7a434a95f401d54586d97c2ae5c6d05f93f12a76adb5b83ec29f7aa929b97e7d",
"Created": "2016-12-27T02:39:16.61167403Z",
"Path": "python",
"Args": [
"app.py"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": ,
"ExitCode": ,
"Error": "",
"StartedAt": "2016-12-27T02:39:16.922921212Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
停止web应用容器
zane@zane-V:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93964cbb6941 training/webapp "python app.py" minutes ago Up minutes 0.0.0.0:->/tcp stupefied_wilson
zane@zane-V:~$ docker stop stupefied_wilson
stupefied_wilson
zane@zane-V:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
重启web应用容器
zane@zane-V:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
zane@zane-V:~$ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93964cbb6941 training/webapp "python app.py" minutes ago Exited () minutes ago stupefied_wilson
zane@zane-V:~$ docker start stupefied_wilson
stupefied_wilson
zane@zane-V:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93964cbb6941 training/webapp "python app.py" minutes ago Up seconds 0.0.0.0:->/tcp stupefied_wilson
重启
zane@zane-V:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93964cbb6941 training/webapp "python app.py" minutes ago Up About a minute 0.0.0.0:->/tcp stupefied_wilson
zane@zane-V:~$ docker restart stupefied_wilson
stupefied_wilson
zane@zane-V:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93964cbb6941 training/webapp "python app.py" minutes ago Up seconds 0.0.0.0:->/tcp stupefied_wilson
 
移除web应用容器
 
zane@zane-V:~$ docker rm stupefied_wilson
Error response from daemon: You cannot remove a running container 93964cbb6941206ee011b98c5cbf806d1a285a005b96db69024febd742afaa49. Stop the container before attempting removal or use -f 要先stop,才能remove
zane@zane-V:~$ docker stop stupefied_wilson
stupefied_wilson
zane@zane-V:~$ docker rm stupefied_wilson
stupefied_wilson
 
总结

  1. 容器的周期性
    • 运行一个交互的容器
      • docker run -t -i ubuntu /bin/bash
        • docker run 运行一个容器
        • Ubuntu 是你想运行的image
        • -t 标志, 在新容器中分配一个终端
        • -i 标志,允许和容器的标准输入有一个交互性的连接
        • /bin/bash 在容器内部发起一个 Bash shell
    • 运行一个后台运行容器
      • docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
      • 查看后台进程运行情况:
        • docker logs a3d5f155a6a2(容器ID)
  2. 查看命令
    • docker run --help
    • docker --help
  3. Docker将容器的所有端口映射到主机
    • docker run  使用-P参数
  4. 指定本地端口与容器端口的对应关系
    • docker run 使用-p参数
  5. 查看容器进程
    • docker top 容器ID
  6. 容器的操作
    • 查看
      • docker  ps 查看活动的容器
      • docker ps -a 查重所有容器
    • 启动
      • docker start 容器ID
    • 停止
      • docker stop  容器ID
    • 重启
      • docker restart 容器ID
    • 删除
      • docker rm 容器ID

Docker示例的更多相关文章

  1. java操作docker示例(docker-java)

    1.首先要修改docker服务器的 /usr/lib/systemd/system/docker.service,加入紫色框的配置 2.下载docker-java 的github源码 git clon ...

  2. Flask+SQLAlchemy+graphene+docker示例

    搭建一个利用docker启动服务的Flask的小demo 定义数据库 # -*- coding: utf-8 -*- from sqlalchemy import * from sqlalchemy. ...

  3. 简单docker示例

    创建spring boot工程 工程目录 Controller.java 类说明 主要是接收界面请求,直接返回传入的参数 在启动工程,查看工程运行效果 右键SampleApplication.java ...

  4. Docker示例命令

    1.docker run -t -i -v /root/workspace/node:/home/exam:rw docker.io/node bin/sh    -t 给容器挂载一个伪终端    - ...

  5. 使用docker发布spring cloud应用

    本文涉及到的项目: cloud-simple-docker:一个简单的spring boot应用 Docker是一种虚拟机技术,准确的说是在linux虚拟机技术LXC基础上又封装了一层,可以看成是基于 ...

  6. Docker快速入门(一)

    Docker是Go语言开发实现的容器.2013年发布至今,备受推崇.相关文档.学习资料十分详尽.近期公司docker项目要推进,得重新学习一下.博客以笔记. 1 容器诞生背景及优势 (1)软件开发和运 ...

  7. Docker 入门(Mac环境)- part 2 容器(container)

    part-2 容器(container) 简介 Docker架构有三个层面,从高到低如下: stack(栈) services(服务) containers(容器) 现在接触的这些在容器这一层里,类似 ...

  8. 大型网站技术学习-3. 容器Docker与kubernetes

    大型网站技术基石篇-容器Docker与kubernetes   Docker和Kubernetes的关系就如Xen与OpenStack. Docker是一种容器技术,和Hypervisor(KVM/X ...

  9. 使用Visual Studio 2017构建.Net Core的Docker镜像

    1 Docker  镜像优化 微软在为开发人员生成 Docker 镜像时,提供以下三种主要方案: 用于开发 .NET Core 应用的 镜像 用于构建生成 .NET Core 应用的 镜像 用于运行 ...

随机推荐

  1. Python 基础 - 对文本的处理

    Python 对文本文件的处理. 对文本操作之前,必须要先open 这个文件,open完成之后需要close . # -*- coding: utf-8 -*- f=open('test.txt',' ...

  2. [CareerCup] 6.1 Find Heavy Bottle 寻找重瓶子

    6.1 You have 20 bottles of pills. 19 bottles have 1.0 gram pills, but one has pills of weight 1.1 gr ...

  3. 使用IntersectionObserver更高效的监视某个页面元素是否进入了可见窗口

    比如说,你想跟踪 DOM 树里的一个元素,当它进入可见窗口时得到通知. 也许想实现即时延迟加载图片功能,或者你需要知道用户是否真的在看一个广告 banner. 你可以通过绑定 scroll 事件或者用 ...

  4. UVA 10054 The Necklace(欧拉回路,打印路径)

    题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  5. linux下删除修改时间为某天之前的文件

    time_file #新建一个标识文件,修改时间为2014年4月9日0点0分 find . ! -cnewer time_file | xargs rm #删除最后修改时间在上述标识文件之前的所有文件

  6. nginx安装(正式)

    一.安装说明 系统环境:CentOS Linux release 7.2.1511 (Core) 系统内核:3.10.0-327.el7.x86_64软件:nginx-1.10.1.tar.gz其他所 ...

  7. leetcode_question_115 Distinct Subsequences

    Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...

  8. django学习之Model(二)

    继续(一)的内容: 1-跨文件的Models 在文件头部import进来,然后用ForeignKey关联上: from django.db import models from geography.m ...

  9. MOSFET与MOSFET驱动电路原理及应用(转)

    源:http://www.micro-bridge.com/news/news.asp?id=258 在使用MOS管设计开关电源或者马达驱动电路的时候,大部分人都会考虑MOS的导通电阻,最大电压等,最 ...

  10. IDEA 单元测试testng入门及testng.xml

    直接进入正题: 1.TestNG的运行方式如下: With a testng.xml file 直接run as test suite With ant 使用ant From the command ...