Docker是什么?
- Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。
Docker 架构
- Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
- Docker 容器通过 Docker 镜像来创建。
- 容器与镜像的关系类似于面向对象编程中的对象与类。
Docker | 面向对象 |
---|---|
容器 | 对象 |
镜像 | 类 |
MacOS Docker 安装
- macOS 我们可以使用 Homebrew 来安装 Docker。
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew cask install docker
- 手动下载安装
镜像加速
- 鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决,我使用的是网易的镜像地址:http://hub-mirror.c.163.com。
- 在任务栏点击 Docker for mac 应用图标 -> Perferences… -> Daemon -> Registry mirrors。在列表中填写加速器地址即可。修改完成之后,点击 Apply & Restart 按钮,Docker 就会重启并应用配置的镜像地址了。
- 之后我们可以通过
docker info
来查看是否配置成功。
Docker 容器使用
- 接下来让我们尝试使用 docker 构建一个 web 应用程序。
- 我们将在docker容器中运行一个 Python Flask 应用来运行一个web应用。
$ docker pull training/webapp
# 载入镜像
*$ docker run -d -P training/webapp python app.py
- 查看 WEB 应用容器
- 使用 docker ps 来查看我们正在运行的容器:
runoob@runoob:~# docker ps
CONTAINER ID IMAGE COMMAND ... PORTS
d3d5e39ed9d3 training/webapp "python app.py" ... 0.0.0.0:32769->5000/tcp
- 这里多了端口信息。
- 这时我们可以通过浏览器访问WEB应用
- 我们也可以通过 -p 参数来设置不一样的端口:
$ docker run -d -p 5000:5000 training/webapp python app.py
docker ps
查看正在运行的容器- 容器内部的 5000 端口映射到我们本地主机的 5000 端口上。
- 使用 docker ps 来查看我们正在运行的容器:
- 查看 WEB 应用程序日志
docker logs [ID或者名字]
可以查看容器内部的标准输出。
- 查看WEB应用程序容器的进程
- 我们还可以使用
docker top
来查看容器内部运行的进程
- 我们还可以使用
Docker 镜像使用
- 列出镜像列表
- 我们可以使用
docker images
来列出本地主机上的镜像。
- 我们可以使用
- 查找镜像
- 比如我们需要一个httpd的镜像来作为我们的web服务。我们可以通过
docker search
命令搜索 httpd 来寻找适合我们的镜像。 $ docker search httpd
- 比如我们需要一个httpd的镜像来作为我们的web服务。我们可以通过
- 构建镜像
- 我们使用命令
docker build
, 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。 $ cat Dockerfile
docker build -t runoob/centos:6.7 .
- 使用
docker images
查看创建的镜像已经在列表中存在,镜像ID为860c279d2fec
- 我们使用命令
- 设置镜像标签
- 我们可以使用
docker tag
命令,为镜像添加一个新的标签。 $ docker tag 860c279d2fec runoob/centos:dev
- 我们可以使用