Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 包括三个基本概念:
安装略
安装完成后启动docker:
sudo systemctl start docker
测试是否启动成功:
国内从 DockerHub 拉取镜像有时会特别慢,此时可以配置镜像加速器。
Docker 官方和国内很多云服务商都提供了国内加速器服务,比如:
配置国内加速器镜像:
在/etc/docker/daemon.json文件(如果文件不存在则需要新建)添加如下配置:
- {
- "registry-mirrors":["http://hub-mirror.c.163.com"]
- }
然后重新启动服务:
- systemctl daemon-reload
- systemctl restart docker
docker search hello-world
docker pull hello-world:latest
docker run hello-world
注意:如果在没有镜像的时候直接docker run hello-world也是可以的;它会先检查本地是否有这个镜像,没有的话会先从指定仓库中拉取。
Docker 允许在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。这里同样是个Hello World,不同在于它是在容器内部运行的。
docker run ubuntu:latest /bin/echo "hello world"
各个参数的含义:
以上命令完整的意思可以解释为:Docker 以 ubuntu 最新的(默认是latest) 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。
通过 docker 的两个参数 -i -t,让 docker 运行的容器实现"对话"的能力。
- docker run -i -t ubuntu:latest
- echo 'hello world'
参数解析:
运行 exit 命令或者使用 CTRL+D 来退出容器
查看正在运行的容器:
- docker container ls
- docker ps
显示5.2中执行的程序不在容器中执行,目前没有正则执行的镜像。
需要-d参数,来让容器实例在后台运行:
docker run -d ubuntu:latest /bin/sh -c "while true; do echo hello world; sleep 1; done"
在输出中,没有看到期望的 "hello world",而是一串长字符,这个长字符串叫做容器 ID,对每个容器来说都是唯一的,可以通过容器 ID 来查看对应的容器发生了什么。
再次通过docker ps 来查看目前是否有正在执行的容器:
输出详情介绍:
通过docker logs 命令,查看指定容器内的标准输出:
docker logs 187ec8cbe5b1
关闭正在启动的容器:
docker stop 187ec8cbe5b1