运行一个web应用
docker pull training/webapp
docker run -d -P training/webapp python app.py
-d是后台运行容器并打印容器ID
-P是将容器内部使用的网络端口随机映射到主机端口
-p则是要带参数的,指定端口的映射方法。下面是可以带的几种参数:
- 端口到端口:比如32769:5000就是容器的5000端口映射到主机的32769端口。
- 网址到端口:比如127.0.0.1:5001:5000,这样就可以通过访问127.0.0.1:5001访问容器的5000端口了
- 绑定UDP端口:比如127.0.0.1:5000:5000/udp
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
docker attach 容器ID/Names
docker exec 容器ID/Names
推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
查看当前运行的容器
Container ID和Names指的是同一个东西,所以每次指定容器时,二者任选一即可。
Docker开放了端口5000(默认的Python Flask端口),映射到主机端口32768上。那么打开http://0.0.0.0:32768可以看到一行Hello world!
关闭某个容器
用names也可以
docker stop 45f65defa26b
指定端口映射
比如让容器的5000端口映射到主机的32769
pxy@pxy-pc:~$ docker run -d -p 32769:5000 training/webapp python app.py
06e16346ffc8755625ae4c285a51376100853de014671a5272692900111031a7
pxy@pxy-pc:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
06e16346ffc8 training/webapp "python app.py" 4 seconds ago Up 3 seconds 0.0.0.0:32769->5000/tcp mystifying_mcclintock
此时需要访问http://0.0.0.0:32769/
查看容器的端口映射情况
如果带了端口号,也可以只看某一个端口的映射情况。比如最后一个就是容器内部的5000端口映射到主机的127.0.0.1:5000。
pxy@pxy-pc:~$ docker port 06e16346ffc8
5000/tcp -> 0.0.0.0:32769
pxy@pxy-pc:~$ docker port mystifying_mcclintock
5000/tcp -> 0.0.0.0:32769
pxy@pxy-pc:~/Desktop$ docker port funny_williams 5000
127.0.0.1:5000
查看日志
pxy@pxy-pc:~$ docker logs -f mystifying_mcclintock
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
172.17.0.1 - - [14/Dec/2020 08:53:25] "GET / HTTP/1.1" 200 -
^C
-f 是让docker logs像使用tail -f 文件名一样输出容器内部的标准输出(即:会把文件最尾部的内容显示在屏幕上,并且不断刷新。只要该文件还在刷新就一直可以看到最新内容)。
查看容器内部运行的进程
pxy@pxy-pc:~$ docker top mystifying_mcclintock
UID PID PPID C STIME TTY TIME CMD
root 5329 5307 0 16:52 ? 00:00:00 python app.py
导出容器的配置和状态信息
docker inspect mystifying_mcclintock > info.txt
实际上info.txt是一个json文件。
导出容器
如果要导出本地某个容器,可以使用 docker export 命令。
$ docker export 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 -f 1e560fca3906
下面的命令可以清理掉所有处于终止状态的容器。
$ docker container prune
查询最近一次创建的容器
docker ps -l
查看所有容器
docker ps -a
这里包括exited的容器。
重启容器
docker start mystifying_mcclintock
正在运行的容器可以用restart重启。