Docker基础之四: Docker入门

简介: Docker入门 首先我们检查docker是否安装成功: root@gctest:~# docker info Containers: 3 Images: 18 Server Version: 1.9.0 Storage Driver: aufs Root Dir: /var/lib

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成一个镜像。很多初学者会误以为启动一个容器后,原始镜像就会随之改变。

目录
相关文章
|
30天前
|
关系型数据库 MySQL Java
Docker Compose详细教程(从入门到放弃)
Docker Compose详细教程(从入门到放弃)
126 0
|
4月前
|
Kubernetes 关系型数据库 MySQL
Docker Compose入门:打造多容器应用的完美舞台
Docker Compose 是一个强大的工具,它允许开发者通过简单的 YAML 文件定义和管理多容器的应用。本文将深入讨论 Docker Compose 的基本概念、常用命令以及高级应用场景,并通过更为丰富和实际的示例代码,助您轻松掌握如何通过 Docker Compose 打造复杂而高效的多容器应用。
|
2月前
|
运维 虚拟化 开发者
Docker-全面详解(学习总结---从入门到深化)
Docker-全面详解(学习总结---从入门到深化)
47 1
|
3月前
|
大数据 数据管理 Docker
【Datahub系列教程】Datahub入门必学——DatahubCLI之Docker命令详解
【Datahub系列教程】Datahub入门必学——DatahubCLI之Docker命令详解
207 0
|
7天前
|
存储 Ubuntu 关系型数据库
Docker从入门到精通:ubuntu系统安装docker
本文介绍了Docker的安装过程。首先,文章简述了Docker的组成部分:镜像(如模板用于创建容器服务)、容器(运行应用的独立实体)和仓库(存储镜像的库)。接着,针对Ubuntu系统,详细阐述了卸载旧版本Docker、更新软件包、安装依赖、添加Docker官方GPG密钥和软件源、安装Docker以及配置用户组的步骤。最后,通过启动Docker、验证安装是否成功(运行`hello-world`镜像)和查看Docker版本来确认安装完成。
40 12
|
15天前
|
Ubuntu Linux Shell
docker学习笔记3,从入门到精通
docker学习笔记3,从入门到精通
|
15天前
|
应用服务中间件 Shell nginx
docker学习笔记2,入门到精通
docker学习笔记2,入门到精通
|
15天前
|
Ubuntu 网络协议 Docker
docker学习笔记1,入门到精通
docker学习笔记1,入门到精通
|
2月前
|
Java Linux Docker
Docker入门到实战
Docker入门到实战、Centos7安装Docker
|
2月前
|
IDE 数据中心 Docker
使用PyCharm与Docker容器进行开发:从入门到精通
使用PyCharm与Docker容器进行开发:从入门到精通
295 0