docker安装与使用
1.安装
centOS7
安装gcc
[root@localhost ~]# yum -y install gcc
安装gcc-c++
[root@localhost ~]# yum -y install gcc-c++
验证gcc是否安装成功[root@localhost ~]#gcc -v
————————————————
https://blog.csdn.net/li1325169021/article/details/90780627
如果已安装docker,需要先卸载旧版本
1 | yum remove docker \ |
安装所需要的软件包
1 | yum install -y yum-utils \ |
添加软件源信息
1 | yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo |
更新并安装 Docker-CE
1 | 更新yum软件包索引 |
开启Docker服务
1 | service docker start |
2.Docker hello world
使用docker run 在容器内启动一个应用程序
1 | docker run ubuntu:15.10 /bin/echo "Hello world" |
- docker: Docker 的二进制执行文件。
- run: 与前面的 docker 组合来运行一个容器。
- ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
- /bin/echo “Hello world”: 在启动的容器里执行的命令
运行交互式容器
1 | docker run -i -t ubuntu:15.10 /bin/bash |
启动容器(后台模式)
使用以下命令创建一个以进程方式运行的容器
1 | runoob@runoob:~$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done" |
在输出中,我们没有看到期望的 “hello world”,而是一串长字符
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
这个长字符串叫做容器 ID,对每个容器来说都是唯一的,我们可以通过容器 ID 来查看对应的容器发生了什么。
首先,我们需要确认容器有在运行,可以通过 docker ps 来查看:
1 | runoob@runoob:~$ docker ps |
输出详情介绍:
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
状态有7种:
- created(已创建)
- restarting(重启中)
- running(运行中)
- removing(迁移中)
- paused(暂停)
- exited(停止)
- dead(死亡)
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称。
常用命令:
1 | 在容器内使用 docker logs 命令,查看容器内的标准输出 |
导出和导入容器
导出容器
如果要导出本地某个容器,可以使用 docker export 命令。
1 | $ docker export 1e560fca3906 > ubuntu.tar |
导出容器 1e560fca3906 快照到本地文件 ubuntu.tar。
这样将导出容器快照到本地文件。
导入容器快照
可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:
1 | $ cat docker/ubuntu.tar | docker import - test/ubuntu:v1 |
此外,也可以通过指定 URL 或者某个目录来导入,例如:
1 | $ docker import http://example.com/exampleimage.tgz example/imagerepo |
删除容器
删除容器使用 docker rm 命令:
1 | $ docker rm -f 1e560fca3906 |
下面的命令可以清理掉所有处于终止状态的容器。
$ docker container prune
运行一个 web 应用
前面我们运行的容器并没有一些什么特别的用处。
接下来让我们尝试使用 docker 构建一个 web 应用程序。
我们将在docker容器中运行一个 Python Flask 应用来运行一个web应用。
1 | runoob@runoob:~# docker pull training/webapp # 载入镜像 |
参数说明:
- -d:让容器在后台运行。
- -P:将容器内部使用的网络端口映射到我们使用的主机上。
查看 WEB 应用容器
使用 docker ps 来查看我们正在运行的容器:
1 | runoob@runoob:~# docker ps |
这里多了端口信息。
1 | PORTS |
Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上。
这时我们可以通过浏览器访问WEB应用
我们也可以通过 -p 参数来设置不一样的端口:
1 | runoob@runoob:~$ docker run -d -p 5000:5000 training/webapp python app.py |
docker ps查看正在运行的容器
1 | runoob@runoob:~# docker ps |
容器内部的 5000 端口映射到我们本地主机的 5000 端口上。
网络端口的快捷方式
通过 docker ps 命令可以查看到容器的端口映射,docker 还提供了另一个快捷方式 docker port,使用 docker port 可以查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号。
上面我们创建的 web 应用容器 ID 为 bf08b7f2cd89 名字为 wizardly_chandrasekhar。
我可以使用 docker port bf08b7f2cd89 或 docker port wizardly_chandrasekhar 来查看容器端口的映射情况。
1 | runoob@runoob:~$ docker port bf08b7f2cd89 |
查看 WEB 应用程序日志
docker logs [ID或者名字] 可以查看容器内部的标准输出。
1 | runoob@runoob:~$ docker logs -f bf08b7f2cd89 |
-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。
从上面,我们可以看到应用程序使用的是 5000 端口并且能够查看到应用程序的访问日志。
查看WEB应用程序容器的进程
我们还可以使用 docker top 来查看容器内部运行的进程
1 | runoob@runoob:~$ docker top wizardly_chandrasekhar |
检查 WEB 应用程序
使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。
1 | runoob@runoob:~$ docker inspect wizardly_chandrasekhar |
停止 WEB 应用容器
1 | runoob@runoob:~$ docker stop wizardly_chandrasekhar |
重启WEB应用容器
已经停止的容器,我们可以使用命令 docker start 来启动。
1 | runoob@runoob:~$ docker start wizardly_chandrasekhar |
docker ps -l 查询最后一次创建的容器:
1 | # docker ps -l |
正在运行的容器,我们可以使用 docker restart 命令来重启。
移除WEB应用容器
我们可以使用 docker rm 命令来删除不需要的容器
1 | runoob@runoob:~$ docker rm wizardly_chandrasekhar |
删除容器时,容器必须是停止状态,否则会报如下错误
1 | runoob@runoob:~$ docker rm wizardly_chandrasekhar |