Docker 入门介绍

Docker 是什么?

一、什么是Docker?

1. Docker 的定义

Docker 是一个开源的应用容器引擎,可以轻松为应用创建一个轻量级、可移植、与外界隔离的容器。

Docker 本身并不是一个容器系统,而是一个基于原有的容器化工具 LXC(Linux Container) 用来创建虚拟环境的工具。类似 LXC 的工具已经在生产环境中使用多年,Docker 则基于此提供了更加友好的镜像管理工具和部署工具。

简单的来说:Docker 是容器管理工具。

docker logo.jpg

2. Docker 和虚拟机的区别

docker和vm的区别.jpg

VM 和 Docker 的框架,直观上来讲 VM 多了一层 Guest OS ,同时Hypervisor会对硬件资源进行虚拟化,Docker 是直接使用硬件资源,所以 VM 的资源利用率相对 Docker 低也是比较容易理解的。

Docker 具有更多的服务能力,是利用宿主机的系统内核,所以可以做到在几秒中之内创建大量的容器。VM 启动一个虚拟机少则几十秒,多则几分钟。

Docker 的能力:
  • 极其轻量:只打包必要的bins/libs。
  • 秒级部署:根据镜像的不同,容器的部署大概在毫秒和秒之间。
  • 易于移植:一次构建,多次部署。
  • 弹性伸缩:Kubernetes、Swam、Mesos这类开源、方便、好使的容器管理平台有着非常强大的弹性管理能力。

3. Docker 组成部分

docker组成部分.jpg
  • Docker Client 客户端
  • Docker Daemon 守护进程
  • Docker Image 镜像
  • Docker Container 容器
  • Docker Registry 仓库

4. Docker核心概念

Docker Image 镜像

镜像就是一个自读模板

例如:一个镜像可以包含一个完整的ubuntu操作系统环境,里面仅安装了tomcat或者用户需要的其他应用程序。

镜像可以用来创建Docker容器。

docker image组成.png
Docker Container 容器

Docker 利用容器来运行应用。

容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。

每个容器都是相互隔离的,保证安全的平台。

可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程控件、用户空间和网络空间等等,和运行在其中的应用程序)。

注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。(写时复制,所有操作都是在可写层进行操作)

docker container组成.png
Docker Registry 仓库

仓库就是集中存放镜像文件的场所。

二、Docker 的安装和常规操作

1. Docker 的安装

Mac OS 参考菜鸟教程就有了MacOS Docker 安装

2. Hello World案例

打开终端,然后输入命令查看Docker是否正常运行。

> docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:fc6a51919cfeb2e6763f62b6d9e8815acbf7cd2e476ea353743570610737b752
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

docker run 命令,运行指定的镜像,如果镜像不在主机系统上,它会尝试从默认的Docker仓库中下载镜像。

3. Docker 镜像常用操作

查看本地镜像列表

# 命令
docker images

查找远端仓库镜像

# 命令
docker search <image_name>
# 例子
docker search hello-world

获取镜像

# 命令
docker pull <域名>/<namespace>/<repo>:<tag>
# 例子
docker pull hello-world

查看镜像信息

# 命令
docker inspect <image_id>
# 例子
docker inspect 7465ad228696

删除镜像

# 命令
docker rmi <image>:<tag>
# 例子
docker rmi hello-world

创建镜像

# 命令
docker commit <options> <container_id> <repository:tag>
# 例子
docker commit -a "potato" -m "test commit" 96cc3a4d3b68 hello-potato

参数说明:

-a,--author:作者信息 -m;--meassage:提交消息;-p,--pause=true:提交时暂停容器运行。

说明:

基于已有的镜像的容器进行创建。

迁出镜像

# 命令
docker save -o <image>.tar <image>:<tag>

载入镜像

# 命令
docker load --input <image>.tar 或者 docker load <image>.tar

上传镜像

# 命令
docker push <域名>/<namespace>/<repo>:<tag>

4. Docker 容器常用操作

创建容器

Docker 的容器十分的轻量级,用户可以随时创建或者删除容器。

# 命令
docker create <image_name>
# 例子
docker create ubuntu

说明:

使用 docker create 命令创建的容器处于停止状态,可以使用 docker start 命令启动它。

创建并启动容器

# 命令
docker run <image_name>
# 例子
docker run ubuntu

说明:

等价于先执行 docker create 命令,再执行 docker start 命令。

docker run背后的故事:
  1. 检查本地是否存在镜像,不存在就从 Docker Hub 仓库下载。
  2. 利用本地镜像创建一个容器。
  3. 分配一个文件系统,并在只读的镜像层外面挂载一个可读写层。
  4. 从宿主机配置的网桥接口桥接一个虚拟接口到容器中去。
  5. 从地址池配置一个ip地址给容器。
  6. 执行用户的制定用户程序。
  7. 执行完毕后容器被终止。

例如:

创建ubuntu容器后,打印'hello'。

docker run ubuntu /bin/echo 'hello'
操作运行的容器
docker run -it ubuntu /bin/bash

-t:让 docker 分配一个伪终端并绑定到容器的标准输入。

-i:让容器的标准输入保持打开。

在交互模式下,用户可以通过所创建的终端来输入命令,exit命令退出容器。

退出后,容器自动处于终止状态。

守护态运行容器:

更多的时候,需要让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添加 -d 参数来实现。

举个例子:

如果不使用 -d 参数运行容器。

docker run ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
hello world
hello world
hello world
hello world

容器会把输出的结果打印到宿主机上面。

如果使用 -d 参数运行容器。

docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

此时容器会在后台运行并不会把输出的结果打印到宿主机上面。(输出结果可以用 docker logs <container_id or name> 查看)

终止容器

可以使用dockerstop命令来终止一个运行中的容器。

# 命令
docker stop <container_id>

注意:

  • 当容器中的应用终结时,容器也会自动停止。
  • 查看所有的容器:docker ps -a
  • 查看运行的容器:docker ps
  • 重新启动容器:docker start <container_id>

进入容器

在使用-d参数时,容器启动后会进入后台,用户无法看到容器中的信息。

# 命令
docker exec <options> <container_id> <command>
# 例子
docker exec -it 96cc3a4d3b68 bash

Exec可以直接在容器内部运行命令。

删除容器

可以使用 docker rm 命令删除终止状态的容器。

如果删除正在运行的容器,可以使用 docker rm –f 命令。

# 命令
docker rm <container_id>
docker rm -f <container_id>
# 例子
docker rm 96cc3a4d3b68
docker rm -f 96cc3a4d3b68

导入和导出容器

导出容器是指导出一个已经创建的容器到一个文件,不管容器是否处于运行状态。可以使用 docker export 命令。

# 命令
docker export <container_id> > <name.tar>
# 例子
docker export 96cc3a4d3b68 > hello.tar

导出的文件又可以使用 docker import 命令导入,成为镜像。

cat hello.tar | docker import - hello:laster

三、介绍总结

1. Docker 是容器管理工具。

2. Docker 的组成部分。

  • Docker Client 客户端
  • Docker Daemon 守护进程
  • Docker Image 镜像
  • Docker Container 容器
  • Docker Registry 仓库

3. Docker 的镜像操作。

功能 命令 例子
查看本地镜像列表 docker images docker images
查找远端仓库镜像 docker search <image_name> docker search hello-world
获取镜像 docker pull <域名>/<namespace>/<repo>:<tag> docker pull hello-world
查看镜像信息 docker inspect <image_id> docker inspect 7465ad228696
删除镜像 docker rmi <image>:<tag> docker rmi hello-world

4. Docker 的容器操作。

功能 命令 例子
创建容器 docker create docker create ubuntu
创建并启动容器 docker run <image_name> docker run ubuntu
终止容器 docker stop <container_id> docker stop 7465ad228696
进入容器 docker exec <options> <container_id> <command> docker exec -it 7465ad228696 bash
删除容器 docker rm <container_id> docker rm 7465ad228696
导出容器 docker export <container_id> <name.tar> docker export 96cc3a4d3b68 > hello.tar
导入容器 docker import -
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,026评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,655评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,726评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,204评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,558评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,731评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,944评论 2 314
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,698评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,438评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,633评论 2 247
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,125评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,444评论 3 255
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,137评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,103评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,888评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,772评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,669评论 2 271

推荐阅读更多精彩内容