首页 > 技术文章 > docker命令快速入门

XiiX 2021-04-05 17:50 原文

docker快速入门系列

Docker hello world

hello world

$ docker run ubuntu:15.10 /bin/echo "Hello world"
Unable to find image 'ubuntu:15.10' locally
15.10: Pulling from library/ubuntu
7dcf5a444392: Pull complete 
759aa75f3cee: Pull complete 
3fa871dc8a2b: Pull complete 
224c42ae46e7: Pull complete 
Digest: sha256:02521a2d079595241c6793b2044f02eecf294034f31d6e235ac4b2b54ffc41f3
Status: Downloaded newer image for ubuntu:15.10
Hello world
  • docker docker的二进制可执行文件
  • run 与前面的docker组合来运行一个容器
  • ubuntu:15.10 指定要运行的镜像,docker首先从本地查找镜像是否存在,如果不存在,Docker就会从镜像仓库hub下载公共镜像
  • /bin/echo "hello world" 在启动的容器执行的命令

以上命令完整的意思就是可以解释为:Docker 以ubuntu15.10镜像创建一个新容器,然后在容器执行 bin/echo “hello world”

运行交互式容器

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

[cjt@VM_0_2_centos ~]$ docker run -it ubuntu:15.10 /bin/bash
root@0c5c933112b9:/# 
  • -i 允许宿主机和容器内的标准输入(STDIN)进行交互
  • -t 在新容器内指定一个伪终端或终端

注意第二行root@0c5c933112b9:/# ,此时我们已进入一个 ubuntu15.10 系统的容器

exit 命令或者使用 CTRL+D 来退出容器

启动容器

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

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

在输出中,输出了一串长字符。这个长字符叫做容器ID,对每个容器来说都是唯一的,我们可以通过容器ID来查看对应的容器发生了什么。

需要确认容器有在运行,可以通过 docker ps 来查看:

$ docker ps
CONTAINER ID        IMAGE                  COMMAND              ...  
5917eac21c36        ubuntu:15.10           "/bin/sh -c 'while t…"    ...
  • CONTAINER ID: 容器 ID
  • IMAGE: 使用的镜像
  • COMMAND: 启动容器时运行的命令
  • CREATED: 容器的创建时间
  • STATUS: 容器状态,状态有7种:
    • created(已创建)
    • restarting(重启中)
    • running(运行中)
    • removing(迁移中)
    • paused(暂停)
    • exited(停止)
    • dead(死亡)

PORTS: 容器的端口信息和使用的连接类型(tcp\udp)

NAMES: 自动分配的容器名

在宿主主机内使用 docker logs 命令,查看容器内的标准输出:

$ docker logs 04bba
hello world
hello world
hello world
...

停止容器

使用docker stop来停止容器

docker stop ID/name

Docker 容器使用

docker客户端

docker客户端非常的简单,我们可以直接输入docker命令来查看docker客户端的所有命令选项

docker

可以通过命令 docker commmand --help更深入的了解指定的Docker命令使用方法

比如 docker stats --help

$ docker stats --help

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

Display a live stream of container(s) resource usage statistics

Options:
  -a, --all             Show all containers (default shows just running)
      --format string   Pretty-print images using a Go template
      --no-stream       Disable streaming stats and only pull the first result
      --no-trunc        Do not truncate output

容器使用

获取镜像

使用docker pull命令来加载镜像

docker pull <image name>
docker pull ubuntu

启动容器

docker run -it ubuntu /bin/bash

参数说明:

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

退出终端,直接输入exit 或者 ctrl+D

启动已停止运行的容器

查看所有容器命令

docker ps -a

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

docker start <ID>

后台运行

很多时候,我们希望docker的服务是在后台运行的,可以通过 -d指定容器的运行模式

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

加了 -d参数默认不会进入容器,想要进入容器需要使用指令docker exec

停止一个容器

docker stop <ID>

停止之后,也可以使用restart重启容器

docker restart <ID>

进入容器

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

docker attach <ID>

docker exec //推荐使用,此命令推出容器终端,不会导致容器的停止
docker attach df09
root@df09891647ab:/#
docker exec -it e456 /bin/bash
root@e456ea68b87e:/#

导出和导入容器

导出容器

导出本地容器,使用docker export命令

$ docker export e456 > ubuntu.tar
$ ls
ubuntu.tar

导入容器快照

使用docker import从容器快照文件中再导入为镜像,以下实例将快照文件ubuntu.tar导入到镜像test/ubuntu:v1

docker import ubuntu.tar test/ubuntu:v1
sha256:524cf96593ecb4e5d50a1c64311af7c554b97f471a60feaec4fd5fd4b11646e7

删除容器

使用docker rm -f是强制删除

docker rm -f <ID>

下面的命令可以清理掉所有处于终止状态的容器。

$ docker container prune

运行web应用

尝试使用docker构建一个web应用程序,接下来将在docker容器中运行一个python flash应用来运行一个web应用

$ docker pull training/webapp
Using default tag: latest
latest: Pulling from training/webapp
Image docker.io/training/webapp:latest uses outdated schema1 manifest format. Please upgrade to a schema2 imag
e for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema
-v1/
e190868d63f8: Pull complete
909cd34c6fd7: Pull complete
0b9bfabab7c1: Pull complete
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
docker.io/training/webapp:latest

$ docker run -d -P training/webapp python app.py
11ff0a880f2b8ecc59961df30d6d41db6dde603ed14efa3c063a8a86db73e673

若未指定版本,docker会自动下载latest版本

参数说明:

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

查看web应用容器

docker ps 来查看我们正在运行的容器:

runoob@runoob:~#  docker ps
CONTAINER ID        IMAGE               COMMAND             ...        PORTS                 
d3d5e39ed9d3        training/webapp     "python app.py"     ...        0.0.0.0:32768->5000/tcp

这里多了端口信息。

PORTS
0.0.0.0:32768->5000/tcp

Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32768上。这时我们可以通过浏览器访问WEB应用

IP:32768

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

runoob@runoob:~$ docker run -d -p 5000:5000 training/webapp python app.py

网络端口的快捷方式

通过 docker ps 命令可以查看到容器的端口映射,docker 还提供了另一个快捷方式 docker port,使用 docker port 可以查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号

$ docker port e35
5000/tcp -> 0.0.0.0:5000

查看 WEB 应用程序日志

docker logs [ID或者名字] 可以查看容器内部的标准输出。

$ docker logs -f e35
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

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

查看web应用程序

使用docker inspect来查看docker底层信息。会返回一个json文件记录着docker容器的配置和状态信息

$ docker inspect e35
[
    {
        "Id": "e35b1e7efab3112941958924dfd2a6815ba7f86239b6b1475247272fa8950872",
        "Created": "2020-05-15T09:40:38.611719555Z",
        "Path": "python",
        "Args": [
            "app.py"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 4938,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2020-05-15T09:40:38.94795368Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        ...

停止 WEB 应用容器

$ docker stop e35
e35

重启web应用容器

$ docker restart e35
e35

移除web应用容器

$ docker rm -f e35
e35

Docker镜像使用

当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载

本节主要会学习:

  • 管理和使用本地Docker主机镜像
  • 创建镜像

推荐阅读