Docker使用

基本部署

Docker允许你在容器内部运行应用程序,使用docker run命令来在容器内运行一个应用程序。

输出 Hello world

docker run ubuntu:15.10 /bin/echo "Hello world"

参数分析:

  • docker: Docker的二进制执行文件
  • run:与前面的docker组合来运行一个容器
  • ubuntu:15.10:指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,然后不存在,Docker就会从镜像仓库Docker Hub下载公共镜像。
  • /bin/echo "Hello world":启动的容器里面执行的命令。
    以上命令完整的意思是:Docker以ubuntu 15.10镜像创建一个新容器,然后在容器里面执行bin/echo "Hello world",然后输出结果。

运行交互式的容器

我们通过docker的两个参数 -i -t,让docker运行的容器实现“对话”能力:

runoob@runoob:~$ docker run -i -t ubuntu:15.10 /bin/bash
root@0123ce188bd8:/#

参数分析:

  • -t:在新的容器内指定一个伪终端或终端;
  • -i:允许你对容器内的标准输入(STDIN)进行交互;
    注意第二行root@0123ce188bd8:/#,此时我们已进入一个ubuntu15.10系统的容器
    我们尝试在容器中运行命令cat/proc/versionls分别查看当前系统的版本信息和当前目录下的文件列表;
root@0123ce188bd8:/#  cat /proc/version
Linux version 4.4.0-151-generic (buildd@lgw01-amd64-043) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10) ) #178-Ubuntu SMP Tue Jun 11 08:30:22 UTC 2019
root@0123ce188bd8:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@0123ce188bd8:/# 

可以通过运行exit命令或者使用CTRL+D来退出容器

root@0123ce188bd8:/#  exit
exit
root@runoob:~#

启动容器(后台模式)

使用以下命令创建一个进程方式运行容器

docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63

在输出中我们能看到一长串字符串:2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
这个字符串叫做容器ID,对每个容器来说都是唯一的,我们可以通过容器ID来查看对应的容器发生了什么。
首先,我们需要确认容器有在运行,可以通过docker ps来查看:

runoob@runoob:~$ docker ps
CONTAINER ID        IMAGE                  COMMAND              ...  
5917eac21c36        ubuntu:15.10           "/bin/sh -c 'while t…"    ...

参数分析:

  • CONTAINER ID:容器ID
  • IMAGE:使用的镜像
  • COMMAND:启动容器时运行的命令
  • CREATED:容器的创建时间
  • PORTS:容器的端口信息和使用的连接类型(tcp\udp)
  • NAMES:自动分配的容器名称
  • STATUS:容器状态
    状态有七种:
  • created(已创建)
  • restaring(重启中)
  • running或Up(运行中)
  • removing(迁移中)
  • paused(暂停)
  • exited(停止)
  • dead(死亡)
    在宿主机内使用docker logs命令,查看容器内的标准输出:
docker logs 2b1b7a428627

停止容器

使用docker stop命令来停止容器

docker stop 2b1b7a428627

使用

获取镜像

如果我们本地没有Ubuntu镜像,我们可以通关docker pull命令来载入Ubuntu镜像:

docker pull ubuntu

启动容器

以下命令使用ubuntu镜像启动一个容器:

docker run -it ubuntu /bin/bash

参数说明:

  • -i:交互式操作
  • -t:终端
  • ubuntu:ubuntu镜像
  • /bin/bash:放在镜像名后的是命令,这里我们希望有一个交互式shell,因此用的是/bin/bash。

启动已经停止的容器

查看所有的容器:

docker ps -a

使用docker start启动一个已经停止的容器

docker start 2b1b7a428627(容器ID)

后台运行

docker run -itd --name ubuntu-test ubuntu /bin/bash

停止一个容器

docker ps -a
docker stop <容器ID>

停止的容器可以通过docker restart重启

docker restart <容器ID>

进入容器

在使用-d参数时,容器会自动进入后台,此时想要进入容器,可以通过以下指令进入:

  • docker attach
  • docker exec(推荐):以此命令进入后,退出时不会导致容器的停止。
    attach命令
docker attach <容器ID>

注意:如果从这个容器中退出会导致容器的停止。
exec命令

docker exec -it <容器ID> /bin/bash

注意:如果从这个容器中退出不会导致容器的停止。

导出和导入容器

导出容器

导出容器快照到本地文件ubuntu.tar。

docker export <ID> > ubuntu.tar

导入容器

将快照文件ubuntu.tar导入到镜像test/ubuntu:v1:

cat docker/ubuntu.tar | docker import - test/ubuntu:v1

此外,也可以通过URL或者某个目录来导入:

docker import http://example.com/exampleimage.tgz example/imagerepo

删除容器

删除容器使用docker rm命令

docker rm -f <ID>

清理掉所有处于停止状态的容器

docker container prune

运行一个web应用

整起docker容器中运行一个Python Flask应用来运行一个web应用

docker pull training/webapp    # 载入镜像
docker run -d -P training/webapp python app.py

参数说明:

  • -d:让容器在后台运行
  • -P:将容器内部使用的网络端口随记映射到我们使用的主机上。

查看web应用容器

使用docker ps查看我们正在运行的容器会发现多了PORTS(端口信息)

PORTS
0.0.0.0:32769->5000/tcp

Docker开放了5000端口,映射到主机端口32769上,这时我们可以通过浏览器访问Web应用:192.168.239.130:32769

我们也可以通过 -P 参数来设置不一样的端口:

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

再次使用 docker ps 来查看正在运行的容器,会发现端口设置成功:

PORTS
0.0.0.0:5000->5000/tsp

查看网络端口的设置情况

docker port <ID>

查看web应用程序日志

docker logs -f <ID>

-f:让 docker logs 像使用tail -f 一样来输出容器内部的标准输出

查看web应用程序的进程

docker top <ID>
posted @ 2022-02-28 21:02  vetra  阅读(84)  评论(0)    收藏  举报