docker用来解决什么样的问题?
当你在自己的计算机上实现了一个炫酷的功能,想发给你远方的小伙伴得瑟一下,却发现他的电脑因为操作系统的不同、配置环境有异或必要的软件、库、插件等缺失,小伙伴根本运行不起来你的代码。
这可怎么办呢?
别怕!docker来帮你!
docker为每一个应用提供了完全隔离的运行环境
镜像IMAGE
容器CONTAINER
仓库REPOSITORY,可以上传push自己做好环境的Docker上去,也可以下载pull云端的镜像到本地。
以ubuntu15.10镜像创建一个新容器 ,-t 表示在新容器内指定一个伪终端或终端;-i 表示允许你对容器内的标准输入 (STDIN) 进行交互。回车后我们进入ubuntu15.10的系统容器。
[*** ~]$ sudo docker run -i -t ubuntu15.10 /bin/bash
进入容器后,查看当前系统的版本信息,显示出linux version ....(gcc version ....)
root@*****/# cat /proc/version
查看当前目录下文件列表
root@*****/# ls
exit命令退出容器
root@*****/# exit
下面以一个进程的方式运行容器,-d 表示后台运行容器,并返回容器的ID,此时输出的一串字符为容器的ID,具有唯一性。用ps命令查看容器运行情况发现容器已经在运行中。若查不到,则尝试ps -a命令查看所有容器,可看到容器已经建立,此时说明容器建立成功但未运行。-l:查询最后以此创建的容器。
ps命令的输出为CONTAINER ID:容器ID;IMAGE:使用的镜像; COMMAND:启动容器运行的命令;CREATED:容器的创建时间; STATUS:容器状态(created已创建;restarting重启中;running/up运行中;removing迁移中;paused暂停;exited停止;dead死亡);PARTS:容器端口信息和使用的连接类型(tcp/udp);NAMES:自动分配的容器名称。
[*** ~]$ sudo docker run -d ubuntu15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
用stop来停止容器工作,运行结束后再用ps查看容器的运行情况时发现此容器已经停止运行了。
root@*****/# docker stop ***
启动容器run
进入容器attach退出会导致容器停止/exec退出不会导致容器停止
退出容器ctrl+P+Q/exit
停止容器stop
root@*****/# docker run -it containerID /bin/bash
root@*****/# docker restart containerID
root@*****/# docker attach containerID
root@*****/# docker exec -it containerID /bin/bash
root@*****/# docker stop containerID
导出容器,把容器快照到本地文件ubuntu.tar
导入容器,从容器快照文件ubuntu.tar中再导入为镜像test/ubuntu:v1;也可以指定一个URL或目录。
root@*****/# docker export containerName > ubuntu.tar
root@*****/# cat docker/ubuntu.tar | docker import - test/ubuntu:v1
root@*****/# docker import http://****
删除容器,-f:强制删除
root@*****/# docker rm -f containerName
运行一个web应用,尝试使用docker创建一个web应用程序,我们在docker容器中运行一个Python Flask应用来运行一个web应用。-P:将容器内部使用的网络端口随机映射到我们使用的主机上。
root@*****/# docker pull training/webapp
root@*****/# docker run -d -P training/webapp python app.py
-p 主机端口 > 容器端口
容器的端口映射到主机上
访问容器中程序时用主机ip地址:端口号
也可以用-p设置端口的映射关系,容器内部的5000端口映射到主机的3245端口上。port指令可以查看制定容器的某个确定端口映射到主机的端口号
root@*****/# docker run -d -p 3245:5000 training/webapp python app.py
root@*****/# docker port containerName
查看容器内部运行程序
root@*****/# docker top containerName
使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。
容器名字在创建时会自动命名,也可以使用--name标识来命名容器--name SetName