Docker 简单使用

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

这里记录下使用 docker 常用到的命令,方便用时查询。

镜像使用

查看本地 Docker 镜像

1
2
3
4
kekemao@kekemaodeMacBook-Pro ~ % docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 87a94228f133 3 weeks ago 133MB
docker/getting-started latest 083d7564d904 4 months ago 28MB

表格各列说明:

  • REPOSITORY: 表示镜像的仓库源

  • TAG: 镜像的标签

  • IMAGE ID: 镜像ID

  • CREATED: 镜像创建时间

  • SIZE: 镜像大小

查找镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
kekemao@kekemaodeMacBook-Pro ~ % docker search nginx

NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 15763 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 2091 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 818 [OK]
jc21/nginx-proxy-manager Docker container for managing Nginx proxy ho… 273
linuxserver/nginx An Nginx container, brought to you by LinuxS… 159
tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp… 143 [OK]
jlesage/nginx-proxy-manager Docker container for Nginx Proxy Manager 143 [OK]
alfg/nginx-rtmp NGINX, nginx-rtmp-module and FFmpeg from sou… 110 [OK]
nginxdemos/hello NGINX webserver that serves a simple page co… 76 [OK]
privatebin/nginx-fpm-alpine PrivateBin running on an Nginx, php-fpm & Al… 60 [OK]
nginx/nginx-ingress NGINX and NGINX Plus Ingress Controllers fo… 55
nginxinc/nginx-unprivileged Unprivileged NGINX Dockerfiles 54
staticfloat/nginx-certbot Opinionated setup for automatic TLS certs lo… 25 [OK]
nginxproxy/nginx-proxy Automated Nginx reverse proxy for docker con… 24
nginx/nginx-prometheus-exporter NGINX Prometheus Exporter for NGINX and NGIN… 22
schmunk42/nginx-redirect A very simple container to redirect HTTP tra… 19 [OK]
centos/nginx-112-centos7 Platform for running nginx 1.12 or building … 15
centos/nginx-18-centos7 Platform for running nginx 1.8 or building n… 13
flashspys/nginx-static Super Lightweight Nginx Image 11 [OK]
mailu/nginx Mailu nginx frontend 9 [OK]
sophos/nginx-vts-exporter Simple server that scrapes Nginx vts stats a… 7 [OK]
ansibleplaybookbundle/nginx-apb An APB to deploy NGINX 3 [OK]
wodby/nginx Generic nginx 1 [OK]
arnau/nginx-gate Docker image with Nginx with Lua enabled on … 1 [OK]
centos/nginx-110-centos7 Platform for running nginx 1.10 or building … 0
kekemao@kekemaoMacBook-Pro ~ %
  • NAME: 镜像仓库源的名称

  • DESCRIPTION: 镜像的描述

  • OFFICIAL: 是否 docker 官方发布

  • stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。

  • AUTOMATED: 自动构建。

拉取一个新的镜像

1
docker pull nginx

删除镜像

1
docker rmi hello-world

容器使用

查看 docker 所有的命令

1
docker

使用 docker pull --help 可了解 pull 指令的用方法

如果本地没有 ubuntu 镜像,我们可以使用 docker pull 来拉取远程的 ubuntu 镜像

1
docker pull ubuntu

启动容器

1
docker run -it ubuntu  /bin/bash

参数说明:

-i: 交互式操作。
-t: 终端。
ubuntu: ubuntu 镜像。
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
要退出终端,直接输入 exit:

启动已停止运行的容器

查看所有的容器命令如下:

1
docker ps -a

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

1
docker start b750bbbcfd88

后台运行

在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。

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

注: 加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec (下文有使用实例)

停止一个容器

1
docker stop <容器 ID>

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

1
docker restart <容器 ID>

进入容器

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

docker attach: 如果从这个容器退出,会导致容器的停止。

docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。

exec 命令

1
docker exec -it 243c32535da7 /bin/bash

注意: 如果从这个容器退出,容器不会停止,这就是为什么推荐大家使用 docker exec 的原因。

导出和导入容器

导出容器

如果要导出本地某个容器,可以使用 docker export 命令。

1
docker export 1e560fca3906 > ubuntu.tar

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

导入容器快照

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

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

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

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

删除容器

删除容器使用 docker rm 命令:

1
docker rm -f 1e560fca3906

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

1
docker container prune
-------------------本文结束 感谢您的阅读-------------------