Docker容器使用初步教程:客户端、获取镜像、运行WEB程序
Docker客户端
Docker客户端非常简单。我们可以直接输入Docker命令来查看Docker客户端的所有命令选项。
coonote@coonote:~# docker
![]()
您可以通过命令docker command --help来了解如何使用指定的docker命令。
比如我们想看dockerstats命令的具体使用:
coonote@coonote:~# docker stats --help
![]()
容器使用
来获取镜像我们可以使用docker pull命令加载Ubuntu镜像:$ docker pull ubuntu
启动容器
以下命令使用Ubuntu镜像来启动容器。参数为命令行方式进入容器:
$ docker run -it ubuntu /bin/bash
![]()
参数说明:
- -i:交互操作。
- -t:终端。
- ubuntu:ubuntu镜像。
- /bin/bash:命令放在镜像名称后面。这里我们希望有一个交互式的shell,所以使用了/bin/bash。
要退出终端,立即输入exit:
root@ed09e4490c57:/# exit
![]()
启动停止的容器
查看所有容器命令如下:查看大图:
![]()
使用Docker Start 启动一个已停止的容器:
$ docker start b750bbbcfd88
![]()
在后台运行
在大多数场景中,我们希望 Docker 服务在后台运行。我们可以通过-d来指定容器的运行模式。
$ docker run -itd --name ubuntu-test ubuntu /bin/bash
点击图片查看大图:
![]()
![]()
注意:添加的-d参数默认不会包含在容器中。进入容器需要使用命令 docker exec(下面介绍)。 ?然后你就进入后台了。如果此时想进入容器,可以通过以下命令进入:
- docker Attach
- docker exec:建议使用docker exec命令,因为从集装箱码头触发集装箱不会停止。
attach命令
下面展示了Docker Attach命令的用法。
$ docker attach 1e560fca3906
![]()
注意:如果退出此容器,容器将停止。
exec命令
下面展示了Docker exec命令的用法。
docker exec -it 243c32535da7 /bin/bash
![]()
注意:退出此容器不会停止容器,因此建议使用docker exec。
更多参数说明请使用docker exec --help 命令。
导出和导入容器
导出容器
如果要导出本地容器,可以使用命令docker export。
$ docker export 1e560fca3906 > ubuntu.tar
将容器1e560fca3906快照导出到本地文件ubuntu.tar。
![]()
这会将容器快照导出到本地文件。
导入容器快照
您可以使用 docker import 将容器快照文件导入到镜像中。以下示例将快照文件 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 1e560fca3906
![]()
以下命令可以清理所有处于终止状态的容器。
$ docker container prune
运行Web应用程序
我们之前运行的容器没有什么特殊用途。
接下来让我们尝试使用 Docker 构建一个 Web 应用程序。
我们在 Docker 容器中运行 Python Flask 应用程序来运行 Web 应用程序。
coonote@coonote:~# docker pull training/webapp # 载入镜像 coonote@coonote:~# docker run -d -P training/webapp python app.py
![]()
参数说明:
- -d:让容器在后台运行。
- -P: 将容器中使用的网络端口随机映射到我们正在使用的主机上。
查看WEB应用容器
使用Docker ps查看我们正在运行的容器:
coonote@coonote:~# docker ps CONTAINER ID IMAGE COMMAND ... PORTS d3d5e39ed9d3 training/webapp "python app.py" ... 0.0.0.0:32769->5000/tcp
这里有更多端口信息。
PORTS 0.0.0.0:32769->5000/tcp
Docker 打开映射到主机端口 32769 的端口 5000(默认 Python Flask 端口)。
这时候我们就可以通过浏览器访问WEB应用了
![]()
我们还可以通过-p参数设置不同的端口:
coonote@coonote:~$ docker run -d -p 5000:5000 training/webapp python app.py
docker ps查看正在运行的容器00在容器端口被映射到我们本地主机的端口 5000。
网络端口的快捷方式
您可以通过 docker ps 命令查看容器的端口映射。 docker还提供了另一个快捷方式docker端口,使用docker端口,这是主机显示的容器的某个端口名称(或端口名称)。
我们在上面创建的 Web 应用程序容器 ID 为 bf08b7f2cd89,名称为 wizardly_chandrasekhar。
我可以使用 dockerport bf08b7f2cd89 或 dockerport Wizardly_chandrasekhar 来查看容器端口映射。
coonote@coonote:~$ docker port bf08b7f2cd89 5000/tcp -> 0.0.0.0:5000
coonote@coonote:~$ docker port wizardly_chandrasekhar 5000/tcp -> 0.0.0.0:5000
查看WEB应用日志
docker日志 [ID或名称] 可以查看容器中的标准输出。
coonote@coonote:~$ docker logs -f bf08b7f2cd89 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) 192.168.239.1 - - [09/May/2016 16:30:37] "GET / HTTP/1.1" 200 - 192.168.239.1 - - [09/May/2016 16:30:37] "GET /favicon.ico HTTP/1.1" 404 -
-f:让docker log 在容器中输出标准输出,如tail -f。
从上面我们可以看到应用程序正在使用5000端口,并且可以查看应用程序的访问日志。 ?信息。它返回一个JSON文件,记录了Docker容器的配置和状态信息。
coonote@coonote:~$ docker inspect wizardly_chandrasekhar
[
{
"Id": "bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85",
"Created": "2018-09-17T01:41:26.174228707Z",
"Path": "python",
"Args": [
"app.py"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 23245,
"ExitCode": 0,
"Error": "",
"StartedAt": "2018-09-17T01:41:26.494185806Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
......停止WEB应用容器
coonote@coonote:~$ docker stop wizardly_chandrasekhar wizardly_chandrasekhar
重新启动WEB应用容器
我们可以使用Docker Start命令来启动停止的容器。
coonote@coonote:~$ docker start wizardly_chandrasekhar wizardly_chandrasekhar
docker ps -l 提示最后创建的容器:
# docker ps -l CONTAINER ID IMAGE PORTS NAMES bf08b7f2cd89 training/webapp ... 0.0.0.0:5000->5000/tcp wizardly_chandrasekhar
对于正在运行的容器,我们可以使用 docker restart 命令来重新启动。
删除WEB应用容器
我们可以使用Docker rm命令删除不需要的容器
coonote@coonote:~$ docker rm wizardly_chandrasekhar wizardly_chandrasekhar
删除容器时,容器必须处于停止状态,否则会报以下错误
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网