注:本文大部分来自菜鸟教程,发表此篇只是把我常用的一些命令放在一篇文章中,方便查阅。另外Docker推出了Docker Desktop软件,支持图形化操作。

Docker启动

启动容器 run

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

  • docker Docker的二进制执行文件
  • run 与前面的docker组合来运行一个容器
  • ubuntu:15.10 指定要运行的镜像,如果不存在则docker hub上下载
  • /bin/echo “Hello world” 在启动的容器里执行的命令

整个解释为:Docker以ubuntu15.10镜像创建一个新容器,然后在容器里执行bin/echo “Hello world”,然后输出结果。

C:\Users\74672>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!

运行交互式容器 -i -t

docker run -i -t ubuntu:15.10 /bin/bash

C:\Users\74672>docker run -i -t ubuntu:15.10 /bin/bash
root@917c924778d4:/#
  • -t 在新容器内指定一个伪终端或终端
  • -i 允许你对容器内的标准输入(STDIN)进行交互

利用cat/proc/version和ls查看版本和当前目录文件列表

root@917c924778d4:/# cat /proc/version
Linux version 5.4.72-microsoft-standard-WSL2 (oe-user@oe-host) (gcc version 8.2.0 (GCC)) #1 SMP Wed Oct 28 23:40:43 UTC 2020
root@917c924778d4:/# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
root@917c924778d4:/#

exit退出

启动容器(后台模式) -d

#创建一个以进程方式运行的容器
C:\Users\74672>docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1;done"
6151b58a50bf82e17194c321ec7d30eae73a02d326e1beee1f3c16a9a842e2e0

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

查看容器 ps

通过docker ps查看容器

C:\Users\74672>docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
6151b58a50bf   ubuntu:15.10   "/bin/sh -c 'while t…"   3 minutes ago   Up 3 minutes             exciting_rosalind

输出详情介绍:

CONTAINER ID

容器ID

IMAGE

使用的镜像

COMMAND

启动容器时运行的命令

CREATE

容器的创建时间

STATUS

容器状态

**状态(STATUS)**有7种:

created

已创建

restarting

重启中

running或up

运行中

removing

迁移中

paused

暂停

exited

停止

dead

死亡

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

NAMES 自动分类的容器名称

查看容器内的输出 logs

使用docker logs,查看容器内的标准输出:

id和name都可以

docker logs 6151b58a50bf

或者docker logs exciting_rosalind

停止容器 stop

id和name都可以

docker stop 6151b58a50bf或exciting_rosalind

C:\Users\74672>docker stop 6151b58a50bf
6151b58a50bf

Docker容器使用

查看docker所有命令 docker

docker

了解指定命令 xx --help

更深入的了解指定的Docker命令使用方法。

docker command --help

C:\Users\74672>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

下载某个镜像 pull xx

docker pull ubuntu

启动<交互>容器 run -it

docker run -it ubuntu /bin/bash

C:\Users\74672>docker run -it ubuntu /bin/bash
root@b525a45c7d02:/#
  • -i 交互式操作
  • -t 终端
  • ubuntu ubuntu镜像
  • /bin/bash 放在镜像名后的是命令,这里我们希望有个交互Shell,因此用的是/bin/bash

查看所有容器(包括停止) ps -a

C:\Users\74672>docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED       STATUS                      PORTS     NAMES
b525a45c7d02   ubuntu         "/bin/bash"              3 hours ago   Exited (0) 15 seconds ago             sweet_jepsen
6151b58a50bf   ubuntu:15.10   "/bin/sh -c 'while t…"   3 hours ago   Exited (137) 3 hours ago              exciting_rosalind
917c924778d4   ubuntu:15.10   "/bin/bash"              3 hours ago   Exited (0) 3 hours ago                festive_perlman
8e91b2df1b6c   ubuntu:15.10   "/bin/echo 'Hello wo…"   3 hours ago   Exited (0) 3 hours ago                sweet_mclaren

启动停止的容器 start id/name

C:\Users\74672>docker start b525a45c7d02
b525a45c7d02

后台运行 -d

C:\Users\74672>docker run -itd --name ubuntu-test ubuntu /bin/bash
584d32a8b4824d57d5be301d586ace6f81b1b0a6944e82c2919b7f89efd0aaa8

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

命名容器 --name xx

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

停止容器 stop id

重启容器 restart id

进入容器 attach/exec

使用-d参数时,容器启动后会进入后台。有两种方式进入容器:

attach

退出会导致容器停止

docker attach 1e560fca3906

exec

推荐,因为此退出容器终端,不会导致容器的停止

docker exec -it 243c32535da7 /bin/bash

导出和导入容器

导出:

docker export 1e560fca3906 > ubuntu.tar

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

导入:

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

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

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

删除容器 rm

docker rm -f 1e560fca3906

C:\Users\74672>docker rm -f 8e91b2df1b6c
8e91b2df1b6c

清理所有终止容器

docker container prune

运行一个 web 应用

目前暂时用不到,详情请看https://www.runoob.com/docker/docker-container-usage.html

Docker镜像使用

列出本机镜像列表 images

C:\Users\74672>docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
ubuntu       latest    4dd97cefde62   9 days ago    72.9MB
ubuntu       15.10     9b9cb95443b5   4 years ago   137MB
  • REPOSITORY 表示镜像的仓库源
  • TAG 镜像的标签
  • IMAGE ID 镜像ID
  • CREATED 镜像创建时间
  • SIZE 镜像大小

同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本,我们使用EPOSITORY:TAG来定义不同的镜像。

默认使用最新版本(latest)镜像。

使用特定版本镜像 ubuntu:15.10

docker run -t -i ubuntu:15.10 /bin/bash

查找镜像 search

我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/

也可以用searchdocker search httpd

C:\Users\74672>docker search httpd
NAME                                    DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
httpd                                   The Apache HTTP Server Project                  3403      [OK]
centos/httpd-24-centos7                 Platform for running Apache httpd 2.4 or bui…   37
centos/httpd                                                                            33                   [OK]
polinux/httpd-php                       Apache with PHP in Docker (Supervisor, CentO…   4                    [OK]
salim1983hoop/httpd24                   Dockerfile running apache config                2                    [OK]
publici/httpd                           httpd:latest                                    1                    [OK]
manageiq/httpd                          Container with httpd, built on CentOS for Ma…   1                    [OK]
solsson/httpd-openidc                   mod_auth_openidc on official httpd image, ve…   1                    [OK]
inanimate/httpd-ssl                     A play container with httpd, ssl enabled, an…   1                    [OK]
hypoport/httpd-cgi                      httpd-cgi                                       1                    [OK]
dockerpinata/httpd                                                                      1
dariko/httpd-rproxy-ldap                Apache httpd reverse proxy with LDAP authent…   1                    [OK]
clearlinux/httpd                        httpd HyperText Transfer Protocol (HTTP) ser…   1
lead4good/httpd-fpm                     httpd server which connects via fcgi proxy h…   1                    [OK]
jonathanheilmann/httpd-alpine-rewrite   httpd:alpine with enabled mod_rewrite           1                    [OK]
appertly/httpd                          Customized Apache HTTPD that uses a PHP-FPM …   0                    [OK]
amd64/httpd                             The Apache HTTP Server Project                  0
manasip/httpd                                                                           0
interlutions/httpd                      httpd docker image with debian-based config …   0                    [OK]
centos/httpd-24-centos8                                                                 0
trollin/httpd                                                                           0
manageiq/httpd_configmap_generator      Httpd Configmap Generator                       0                    [OK]
itsziget/httpd24                        Extended HTTPD Docker image based on the off…   0                    [OK]
ysli/httpd                              Httpd for DeepWeb                               0                    [OK]
e2eteam/httpd                                                                           0
  • NAME 镜像仓库源的名称
  • DESCRIPTION 镜像的描述
  • OFFICIAL 是否 docker 官方发布
  • stars 类似 Github 里面的 star,表示点赞、喜欢的意思
  • AUTOMATED 自动构建

获取一个新的镜像 pull

docker pull ubuntu:13.10

docker run httpd

删除镜像 rmi

docker rmi hello-world

创建镜像

目前暂时用不到,详情请看https://www.runoob.com/docker/docker-image-usage.html