docker快速入门系列
Docker hello world
hello world
1 | $ docker run ubuntu:15.10 /bin/echo "Hello world" |
docker
docker的二进制可执行文件run
与前面的docker组合来运行一个容器ubuntu:15.10
指定要运行的镜像,docker首先从本地查找镜像是否存在,如果不存在,Docker就会从镜像仓库hub下载公共镜像/bin/echo "hello world"
在启动的容器执行的命令
以上命令完整的意思就是可以解释为:Docker 以ubuntu15.10镜像创建一个新容器,然后在容器执行 bin/echo “hello world”
运行交互式容器
通过docker 的两个参数 -i -t
,让docker运行的容器实现对话的能力
1 | [cjt@VM_0_2_centos ~]$ docker run -it ubuntu:15.10 /bin/bash |
-i
允许宿主机和容器内的标准输入(STDIN)进行交互-t
在新容器内指定一个伪终端或终端
注意第二行
root@0c5c933112b9:/#
,此时我们已进入一个 ubuntu15.10 系统的容器
exit 命令或者使用 CTRL+D 来退出容器
启动容器
使用以下命令创建一个以进程方式运行的容器
1 | $ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done" |
在输出中,输出了一串长字符。这个长字符叫做容器ID,对每个容器来说都是唯一的,我们可以通过容器ID来查看对应的容器发生了什么。
需要确认容器有在运行,可以通过 docker ps 来查看:
1 | $ docker ps |
- CONTAINER ID: 容器 ID
- IMAGE: 使用的镜像
- COMMAND: 启动容器时运行的命令
- CREATED: 容器的创建时间
- STATUS: 容器状态,状态有7种:
- created(已创建)
- restarting(重启中)
- running(运行中)
- removing(迁移中)
- paused(暂停)
- exited(停止)
- dead(死亡)
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)
NAMES: 自动分配的容器名
在宿主主机内使用 docker logs 命令,查看容器内的标准输出:
1 | $ docker logs 04bba |
停止容器
使用docker stop
来停止容器
1 | docker stop ID/name |
Docker 容器使用
docker客户端
docker客户端非常的简单,我们可以直接输入docker命令来查看docker客户端的所有命令选项
1 | docker |
可以通过命令 docker commmand --help
更深入的了解指定的Docker命令使用方法
比如 docker stats --help
1 | $ docker stats --help |
容器使用
获取镜像
使用docker pull命令来加载镜像
1 | docker pull <image name> |
启动容器
1 | docker run -it ubuntu /bin/bash |
参数说明:
-i
: 交互式操作-t
: 终端ubuntu: ubuntu
镜像/bin/bash
:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash
退出终端,直接输入exit 或者 ctrl+D
启动已停止运行的容器
查看所有容器命令
1 | docker ps -a |
使用docker start启动一个已停止的容器
1 | docker start <ID> |
后台运行
很多时候,我们希望docker的服务是在后台运行的,可以通过 -d
指定容器的运行模式
1 | $ docker run -itd --name ubuntu-test ubuntu /bin/bash |
加了 -d
参数默认不会进入容器,想要进入容器需要使用指令docker exec
停止一个容器
1 | docker stop <ID> |
停止之后,也可以使用restart重启容器
1 | docker restart <ID> |
进入容器
在使用 -d
参数时,容器启动后会进入后台,此时想要进入容器,可以通过以下指令进入:
1 | docker attach <ID> |
1 | docker attach df09 |
1 | docker exec -it e456 /bin/bash |
导出和导入容器
导出容器
导出本地容器,使用docker export命令
1 | $ docker export e456 > ubuntu.tar |
导入容器快照
使用docker import从容器快照文件中再导入为镜像,以下实例将快照文件ubuntu.tar导入到镜像test/ubuntu:v1
1 | docker import ubuntu.tar test/ubuntu:v1 |
删除容器
使用docker rm
-f
是强制删除
1 | docker rm -f <ID> |
下面的命令可以清理掉所有处于终止状态的容器。
1 | $ docker container prune |
运行web应用
尝试使用docker构建一个web应用程序,接下来将在docker容器中运行一个python flash应用来运行一个web应用
1 | $ docker pull training/webapp |
若未指定版本,docker会自动下载latest版本
参数说明:
-d
让容器在后台运行-P
将容器内部使用的网络端口映射到我们使用的主机上
查看web应用容器
docker ps 来查看我们正在运行的容器:
1 | runoob@runoob:~# docker ps |
这里多了端口信息。
1 | PORTS |
Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32768上。这时我们可以通过浏览器访问WEB应用
1 | IP:32768 |
也可以通过 -p 参数来设置不一样的端口:
1 | runoob@runoob:~$ docker run -d -p 5000:5000 training/webapp python app.py |
网络端口的快捷方式
通过 docker ps 命令可以查看到容器的端口映射,docker 还提供了另一个快捷方式 docker port,使用 docker port 可以查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号
1 | $ docker port e35 |
查看 WEB 应用程序日志
docker logs [ID或者名字] 可以查看容器内部的标准输出。
1 | $ docker logs -f e35 |
-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出
查看web应用程序
使用docker inspect来查看docker底层信息。会返回一个json文件记录着docker容器的配置和状态信息
1 | $ docker inspect e35 |
停止 WEB 应用容器
1 | $ docker stop e35 |
重启web应用容器
1 | $ docker restart e35 |
移除web应用容器
1 | $ docker rm -f e35 |
Docker镜像使用
当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载
本节主要会学习:
- 管理和使用本地Docker主机镜像
- 创建镜像