1 Docker初识
Docker可以让开发者打包应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
总结:可以打包应用到容器中,移植性强,且轻量级便于部署。
2 Docker架构
2.1 三个基本概念
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。(容器是独立运行的一个或一组应用,是镜像运行时的实体。
)
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
总结:镜像是静态的概念,容器是镜像动态运行的实例,可以发生状态的改变如创建、删除
3 run命令运行容器
简单的运行
docker run 命令来在容器内运行一个应用程序
runoob@runoob:~$ docker run ubuntu:15.10 /bin/echo “Hello world”
Hello world
3.1 运行交互式的容器
runoob@runoob:~$ docker run -i -t ubuntu:15.10 /bin/bash
root@0123ce188bd8:/# //注意已经进入到容器中了
-t: 在新容器内指定一个伪终端或终端。
-i: 允许你对容器内的标准输入 (STDIN) 进行交互。
可在容器中进行交互,如
root@0123ce188bd8:/# cat /proc/version
Linux version 4.4.0-151-generic (buildd@lgw01-amd64-043) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10) ) #178-Ubuntu SMP Tue Jun 11 08:30:22 UTC 2019
root@0123ce188bd8:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@0123ce188bd8:/#
3.2 启动后台模式的容器
runoob@runoob:~$ docker run -d ubuntu:15.10 /bin/sh -c “while true; do echo hello world; sleep 1; done”
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
可通过docker ps来查看运行的容器
4 容器的使用
4.1 从远端获取镜像
$ docker pull ubuntu
4.2 启动容器
$ docker run -it ubuntu /bin/bash
参数说明:
-i: 交互式操作。
-t: 终端。
ubuntu: ubuntu 镜像。
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
要退出终端,直接输入 exit:
4.3 启动一个已经停止的容器
- 首先查看所有容器,包括停止和未停止的
$ docker ps -a - 启动一个已经停止的容器
$ docker start b750bbbcfd88
4.4 指定容器后台运行
在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。
$ docker run -itd --name ubuntu-test ubuntu /bin/bash
注:加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec
4.5 进入容器
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
docker attach
或者
docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
下面演示了使用 docker attach 命令。
$ docker attach 1e560fca3906
当我们使用完容器之后进行exit操作,不仅会从容器中退出,还会停止容器的运行。
下面演示了使用 exec 命令。
docker exec -it 243c32535da7 /bin/bash
当我们使用完容器之后进行exit操作,使用docker ps可查看到刚才的容器。会从容器退出,但不会停止容器。
4.6 停止与重启容器
$ docker stop <容器 ID>
$ docker restart <容器 ID>
4.7 导出与导入容器
导出容器 1e560fca3906 快照到本地文件 ubuntu.tar。
$ docker export 1e560fca3906 > ubuntu.tar
导入容器快照
$ cat docker/ubuntu.tar | docker import - test/ubuntu:v1
4.7 删除容器
$ docker rm -f 1e560fca3906
4.8 下面的命令可以清理掉所有处于终止状态的容器。
$ docker container prune
5 使用Docker部署web应用
5.1 获取镜像并运行web应用
runoob@runoob:~# docker pull training/webapp # 载入镜像
runoob@runoob:~# docker run -d -P training/webapp python app.py
-d:让容器在后台运行。
-P:将容器内部使用的网络端口随机映射到我们使用的主机上。
5.2 查看web应用容器
使用 docker ps 来查看我们正在运行的容器:
这时我们可以通过浏览器访问WEB应用
5.3 查看 web应用程序日志
docker logs [ID或者名字] 可以查看容器内部的标准输出。
runoob@runoob:~$ 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 logs 像使用 tail -f 一样来输出容器内部的标准输出。
从上面,我们可以看到应用程序使用的是 5000 端口并且能够查看到应用程序的访问日志。
5.4 查看web应用程序容器的进程
我们还可以使用 docker top 来查看容器内部运行的进程
5.5 检查 web应用程序
使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。
5.6 停止web应用容器
runoob@runoob:~$ docker stop wizardly_chandrasekhar
5.7 重启web应用容器
停止后重启
runoob@runoob:~$ docker start wizardly_chandrasekhar
已经运行的重启
正在运行的容器,我们可以使用 docker restart 命令来重启。
5.8 移除web应用容器
我们可以使用 docker rm 命令来删除不需要的容器
前提条件是web应用容器必须是关闭状态的