Docker基础之四: Docker入门
Docker入门
(对Docker感兴趣的朋友可以加我的微信ghostcloud2016,然后我把你加到我们的一个Docker爱好者群组里面。)
首先我们检查docker是否安装成功:
root@gctest:~# docker info Containers: 3 Images: 18 Server Version: 1.9.0 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 24 Dirperm1 Supported: false Execution Driver: native-0.2 Logging Driver: json-file Kernel Version: 3.13.0-32-generic Operating System: Ubuntu precise (12.04.5 LTS) CPUs: 1 Total Memory: 979.2 MiB Name: gctest ID: 5RZM:ZIIU:OVNC:AS2Y:P6YZ:ZQBU:PUF2:7DR5:D3Y7:L6M5:X5RF:LQ6P WARNING: No swap limit support
如果安装成功,会显示容器数量、镜像数量、docker版本等信息。可能的失败原因有:
docker: command not found
这个是安装失败,参考上一节。
/var/lib/docker/repositories: permission denied
这个可能是用户没有添加到docker组,参考上一节。
$ docker info Cannot connect to the Docker daemon. Is the docker daemon running on this host?
这个是Daemon没有启动成功。
1 下载一个镜像
# Download an ubuntu image $ docker pull Ubuntu
剖析:
- 该命令首先检查本地有没有ubuntu镜像,如果没有默认会从Docker Hub进行拉取
- 当下载成功会出现539c0211cd76: Download complete
- 这个ID是一个缩写的ID,完整的ID可以通过下面的命令获取docker inspect 或者docker images –no-trunc=true
2 运行一个可交互的shell终端
$ docker run -i -t ubuntu /bin/bash
剖析:
- -i 表示启动一个可交互的容器
- –t表示使用pseudo-TTY,关联到容器的stdin和stdout
- 在终端中,如果输入exit命令将会停止当前容器;因此如果只是取消关联,可以键入ctrl-p或者ctrl-q
- 你可以在其他终端通过docker ps –a查看已经运行的容器列表
3 运行一个长时间的程序
# Start a very useful long-running process $ JOB=$(docker run -d ubuntu /bin/sh -c "while true; do echo Hello world; sleep 1; done") # Collect the output of the job so far $ docker logs $JOB # Kill the job 稍微延迟点运行 $ docker kill $JOB
剖析:
- 本例启动了一个容器,而该容器会每隔1秒输出Helo World
- –d 表示在后台运行
- docker logs $JOB表示查看该容器的日志,就是查看标准输出stdout
- docker kill $JOB表示停掉这个容器
4 查看容器
$ docker ps # 查看运行中的容器 $ docker ps -a # 查看所有容器
5 容器操作
# 创建并启动容器 $ JOB=$(docker run -d ubuntu /bin/sh -c "while true; do echo Hello world; sleep 1; done") # 停止一个容器 $ docker stop $JOB # 启动一个已经创建的容器 $ docker start $JOB # 重启一个容器 $ docker restart $JOB # 停止一个容器 $ docker kill $JOB # 删除一个容器 $ docker stop $JOB # 必须先停止 $ docker rm $JOB
6 导出服务端口
# 将4444端口从容器导出,在容器内部通过nc监听到4444端口(nc是一个简单的监听器,可以接收用户的输入) $ JOB=$(docker run -d -p 4444 ubuntu:12.10 /bin/nc -l 4444) # 通过docker port可以查看主机上哪一个端口映射到了容器的 4444端口(docker默认使用nat映射方式) $ PORT=$(docker port $JOB 4444 | awk -F: '{ print $2 }') # 向主机的端口,发送hello world $ echo hello world | nc 127.0.0.1 $PORT # 确认容器收到了hello world $ echo "Daemon received: $(docker logs $JOB)"
剖析:
- nc是一个简单的监听指定端口的程序
- -p表示导出容器的指定端口,由于没有指定主机端口,因此是随机分配的
- 外部程序可以通过主机的端口,间接访问容器的4444端口
7 提交(保存)容器到image
# Commit your container to a new named image $ docker commit <container> <some_name> # List your images $ docker images
剖析:
容器运行一个Image时,是不会对image做修改的,而是在原始image上通过UnionFS增加了一个文件层用于读写,因此如果我们要想复用容器,就需要将容器commit成一个镜像。很多初学者会误以为启动一个容器后,原始镜像就会随之改变。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Docker基础之三: 安装docker+HelloWorld
安装Docker (提示:对Docker感兴趣的朋友可以加我的微信ghostcloud2016,然后我把你加到我们的一个Docker爱好者社群里面。) Docker最核心的程序是Docker Engine,根据参数,它既可以作为后台daemon运行,也可以作为命令行工具使用。 1 Linux上安装 Docker本身是基于linux内核的,因此只要内核版本足够新,一般大于3.10左右,就可以运行。各种系统的安装方式基本相同,只是针对各系统的进程管理或者目录结构略有不同。下面是docker在linux系统下的物理逻辑结构: 2 Ubuntu上安装Docker 在所有系统中,Docker对ubuntu的支持是最好的,因此如果使用docker,我推荐都适用ubuntu系统。Ubuntu系统的可视化、安装以及内核的更新,我认为都是最好的。Docker支持的Ubuntu系统: Ubuntu Wily 15.10 Ubuntu Vivid 15.04 Ubuntu Trusty 14.04 (LTS) Ubuntu Precise 12.04 (LTS) 环境要求: 64位系统 3.10以上linu...
- 下一篇
Docker基础之五: 使用Docker容器
使用Docker容器 (对Docker感兴趣的朋友可以加我的微信ghostcloud2016,然后我把你加到我们的一个Docker爱好者群组里面。) 这一节我们将从运行一个简单的Hello world入手,来讲解如何使用容器。 1 运行Hello World root@shev:~# docker run ubuntu:14.04 echo hello-world hello-world root@shev:~# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0cef7fa7468d ubuntu:14.04 "echo hello-world" 3 seconds ago Exited (0) 2 seconds ago condescending_visvesvaraya 剖析: 本条命令启动ubuntu:14.04版本的镜像,并在其中运行打印hello world的命令; 由于我们的命令是一个简单的语句,并不会持续很长时间,当命令执行完毕时,容器就退出了 因此,我们通过docker ps –a...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7设置SWAP分区,小内存服务器的救世主