抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

一、容器使用

1.获取镜像

如果我们本地没有 ubuntu 镜像,我们可以使用 docker pull 命令来载入 ubuntu 镜像:

1
docker pull ubuntu

2.启动容器

以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:

1
docker run -it ubuntu /bin/bash

Untitled

参数说明:

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

要退出终端,直接输入 exit:

1
root@a66766153195:/# exit

3启动已停止运行的容器

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

1
docker ps -a

Untitled

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

1
docker start 59d7601fde38

4后台运行

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

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

注:加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec(下面会介绍到)。

5停止一个容器

1
docker stop <容器 ID>

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

1
docker restart <容器 ID>

6进入容器

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

  • docker attach
  • docker exec:推荐大家使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止。
1
2
docker exec -it d162c8a4d084 /bin/bash
docker attach ****-it d162c8a4d084 /bin/bash

7导出和导入容器

a导出容器

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

1
docker export 1e560fca3906 > ubuntu.tar

Untitled

这样将导出容器快照到本地文件。

b导入容器快照

可以使用 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

8删除容器

删除容器使用 docker rm 命令:

1
docker rm -f 1e560fca3906

总结

镜像,容器命令关系图如下图所示

324235235235

二、运行一个web应用

前面我们运行的容器并没有一些什么特别的用处。

接下来让我们尝试使用 docker 构建一个 web 应用程序。

我们将在docker容器中运行一个 Python Flask 应用来运行一个web应用。

1
2
docker pull training/webapp
C:\Users\xiaow>docker run -d -P training/webapp python app.py

Untitled

这里多了端口信息。

1
0.0.0.0:32768->5000/tcp   adoring_hopper

Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上。

这时我们可以通过浏览器访问WEB应用

Untitled

1 查看 WEB 应用程序日志查看 WEB 应用程序日志

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

Untitled

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

从上面,我们可以看到应用程序使用的是 5000 端口并且能够查看到应用程序的访问日志。

2 查看WEB应用程序容器的进程

我们还可以使用 docker top 来查看容器内部运行的进程

Untitled

3.检查 WEB 应用程序

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

Untitled

三、Docker镜像使用

1.列出镜像列表

1
docker images

Untitled

各个选项说明:

  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签
  • IMAGE ID:镜像ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小

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

所以,我们如果要使用版本为15.10的ubuntu系统镜像来运行容器时,命令如下:

1
2
C:\Users\xiaow>docker run -it ubuntu:15.10 /bin/bash
root@d162c8a4d084:/#

参数说明:

  • i: 交互式操作。
  • t: 终端。
  • ubuntu:15.10: 这是指用 ubuntu 15.10 版本镜像为基础来启动容器。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

2.获取一个新的镜像

当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。

1
2
3
4
5
6
7
8
docker pull ubuntu:15.10
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

下载完成后,我们可以直接使用这个镜像来运行容器。

3查找镜像

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

我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个 httpd 的镜像来作为我们的 web 服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。

Untitled

4 拖取镜像

我们决定使用上图中的 httpd 官方版本的镜像,使用命令 docker pull 来下载镜像。

1
2
3
4
5
6
7
8
9
10
11
12
C:\Users\xiaow>docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
e1caac4eb9d2: Pull complete
87b0fe460fd9: Pull complete
4f4fb700ef54: Pull complete
9cebd3e3b523: Pull complete
e9304da947c5: Pull complete
b60d4b66b268: Pull complete
Digest: sha256:104f07de17ee186c8f37b9f561e04fbfe4cf080d78c6e5f3802fd08fd118c3da
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest

下载完成后,我们就可以使用这个镜像了。

1
docker run httpd

5 删除镜像

镜像删除使用 docker rmi 命令,比如我们删除 hello-world 镜像:

1
docker rmi hello-world

6 创建镜像

当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

  • 1、从已经创建的容器中更新镜像,并且提交这个镜像
  • 2、使用 Dockerfile 指令来创建一个新的镜像

a 更新镜像

更新镜像之前,我们需要使用镜像来创建一个容器。

1
2
C:\Users\xiaow>docker run -it ubuntu:15.10 /bin/bash
root@ff61c4fac64f:/# apt -get update

在运行的容器内使用 apt-get update 命令进行更新。

在完成操作之后,输入 exit 命令来退出这个容器。

此时 ID 为 ff61c4fac64f的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit 来提交容器副本。

1
2
C:\Users\xiaow>docker commit -m="has update" -a="Sn0wm1an" ff61c4fac64f Sn0wm1an/ubuntu:v2    
sha256:ae1d6cfe0a7c2fde9d8a490435ebc947821288c877faade9a5e7d403d08bd352

各个参数说明:

  • m: 提交的描述信息
  • a: 指定镜像作者
  • e218edb10161:容器 ID
  • runoob/ubuntu:v2: 指定要创建的目标镜像名

我们可以使用 docker images 命令来查看我们的新镜像 Sn0wm1an**/ubuntu:v2**:

Untitled

使用我们的新镜像 Sn0wm1an**/ubuntu** 来启动一个容器

四、进阶使用方法

1.Docker 容器连接

前面我们实现了通过网络端口来访问运行在 docker 容器内的服务。

容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射。

下面我们来实现通过端口连接到一个 docker 容器。

a.端口映射

我们创建了一个 python 应用的容器。

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

另外,我们可以指定容器绑定的网络地址,比如绑定 127.0.0.1。

我们使用 -P 绑定端口号,使用 docker ps 可以看到容器端口 5000 绑定主机端口 32768。

我们也可以使用 -p 标识来指定容器端口绑定到主机端口。

两种方式的区别是:

  • P :是容器内部端口随机映射到主机的端口。
  • p : 是容器内部端口绑定到指定的主机端口。
1
docker run -d -p 5000:5000 training/webapp python app.py

bDocker 容器互联

端口映射并不是唯一把 docker 连接到另一个容器的方法。

docker 有一个连接系统允许将多个容器连接在一起,共享连接信息。

docker 连接会创建一个父子关系,其中父容器可以看到子容器的信息。

容器命名

当我们创建一个容器的时候,docker 会自动对它进行命名。另外,我们也可以使用 –name 标识来命名容器,例如:

1
docker run -d -P --name Sn0wm1an training/webapp python app.py

新建网络

下面先创建一个新的 Docker 网络。

1
docker network create -d bridge test-net

Untitled

参数说明:

  • d:参数指定 Docker 网络类型,有 bridge、overlay。

其中 overlay 网络类型用于 Swarm mode,在本小节中你可以忽略它。

连接容器

运行一个容器并连接到新建的 test-net 网络:

1
docker run -itd --name test1 --network test-net ubuntu /bin/bash

打开新的终端,再运行一个容器并加入到 test-net 网络:

1
$ docker run -itd --name test2 --network test-net ubuntu /bin/bash

c 配置 DNS

我们可以在宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS:

1
2
3
4
5
6
{
"dns" : [
"114.114.114.114",
"8.8.8.8"
]
}

设置后,启动容器的 DNS 会自动配置为 114.114.114.114 和 8.8.8.8。

配置完,需要重启 docker 才能生效。

查看容器的 DNS 是否生效可以使用以下命令,它会输出容器的 DNS 信息:

评论