初识Docker

Docker是什么?

  Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从Apache2.0协议开源。

  Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

  容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。

Docker与传统虚拟化的不同之处

  Docker与传统虚拟化的不同之处在于:传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

Docker的优势

  Docker的五大优势为:

  • 持续集成
  • 版本控制
  • 可移植性
  • 隔离性
  • 安全性

关于其说明,具体可参考网址:http://dockone.io/article/389

Docker的安装

  本文以Mac系统为例,讲解Docker的安装,其它系统的安装方式可参考:安装 Docker

使用 Homebrew 安装

  Homebrew 的 Cask 已经支持 Docker for Mac,因此可以很方便的使用 Homebrew Cask 来进行安装:

brew cask install docker
手动下载安装

  如果需要手动下载,可以通过这个链接下载:https://download.docker.com/mac/stable/Docker.dmg 。如同 MacOS 其它软件一样,安装也非常简单,双击下载的 .dmg 文件,然后将鲸鱼图标拖拽到 Application 文件夹即可。

启动Docker

  从应用中找到 Docker 图标并点击,即可启动Docker,启动后在最上侧的菜单栏状态如下:

  启动终端后,通过命令可以检查安装后的 Docker 版本:

$ docker --version
Docker version 18.09.1, build 4c52b90

  接着我们运行docker中的hello world来验证docker是否安装且启动成功:

Dockerhub账号注册

  为了方便展示以及后续的docker使用,我们最好在DockerHub上注册一个自己的账号。 DockerHub,类似于代码管理的Github,可以简单高效地管理我们的docker项目。

  DockerHub的注册地址为:https://hub.docker.com/signup,界面如下:

  注册完DockerHub后,我们登录个人账号。点击Create Repository +按钮新建Docker仓库,名字为dockertest。如下:

再点击Create按钮即可。创建后的dockertest项目如下:

  至此,我们已经在DockerHub上创建了一个自己的账号,并且新建的一个dockertest仓库,尽管这个仓库里面没有任何东西。

  下一步,我们往dockertest这个仓库里面装点什么。

Docker使用实例:hello world

  首先,我们需要用docker在本地打包一个docker镜像,然后对其打标签(tag),然后将其推送(push)至个人的dockerhub账号中的dockertest仓库,最后将该镜像拉下来,并运行。

镜像打包
  1. 新建mydocker文件夹
$ tree mydocker
mydocker
├── src
│   └── test_docker.py
└── test_docker.build
  1. test_docker.py代码:
print "hello world from python!"
print "this is from docker!"
  1. test_docker.build代码(利用Dockerfile打包镜像):
FROM centos:7.2.1511

#环境变量硬编码及时区
ENV ENVIRONMENT DOCKER_PROD
RUN cd / && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 拷贝并so加密代码
COPY src /root/src # 工作目录
WORKDIR /root/src/

这里,我们不再过多讲述上述Dockerfile中的命令,有兴趣的同学可移步:http://blog.51cto.com/wutengfei/2156797 , 笔者也会在后续的文章中给出Dockerfile命令的详细讲述。

  1. 命令行打包镜像:
cd ./mydocker
docker build -f test_docker.build -t hub.docker.com/dockertest:test.1111 .

列出镜像

  在打包完镜像后,我们可以列出docker的镜像,查看镜像的ID,方便后续操作。命令为docker images,如下:

由此可知,我们新打包的docker镜像的ID为be236e996983。

推送镜像
  1. 打标签(tag)
docker tag be236e996983 jclian91/dockertest:hello_world_test_19.01.31.1100

镜像ID可通过docker images查看。

  1. 登录dockerhub账号
docker login

再输入自己的账号、密码即可。

  1. 推送(push)镜像
docker push jclian91/dockertest:hello_world_test_19.01.31.1100

所有命令的界面如下:

此时,我们去dockerhub的dockertest仓库中去查看,发现已经上传一个镜像了,如下:

运行镜像

  1. 为了运行新上传的镜像,我们先删除本地打包的镜像:
$ docker rmi -f be236e996983
Untagged: jclian91/dockertest:hello_world_test_19.01.31.1100
Untagged: jclian91/dockertest@sha256:c2ac02cb725a8256c2d752461133004cc05a6060390220b15a0aaefefc7c95e7
Untagged: hub.docker.com/dockertest:test.1111
Deleted: sha256:be236e996983339318796f588fd5acda1da5f942289a2559f948a4811d68428d
Deleted: sha256:5c46baa463a1e86d0924c493bb0e12888fc6aaefdcaf128d8193406eb0ef4ed1
Deleted: sha256:f76e87a3e84bf1a03e81dfdc53a569a7adce6cfc80bb56d7d2040e118e2848f7
  1. 拉取(pull)新上传的镜像
docker pull jclian91/dockertest:hello_world_test_19.01.31.1100
  1. 运行(run)该镜像
docker run -it be236e996983 bash

参数说明:其中 -i:交互式操作, -t:终端,如存在-d参数,-d:后台运行。

这样我们就能进入到这台用docker创建好的虚拟机内部了,我们在该Linux虚拟机内部运行命令,如下:

[root@ca9070ce82e1 src]# ls
test_docker.py
[root@ca9070ce82e1 src]# python test_docker.py
hello world from python!
this is from docker!

总结

   hello world是所有编程语言的入门例子,在本文中,我们用docker自己创建了一个hello world的例子,用来展示docker的基本用法,希望能给初入门的同学一个明显直观的例子。

   后续的文章将会更多地介绍docker方面的知识,欢迎大家关注,如有任何疑问,请在留言区留言。

注意:本人现已开通微信公众号: Python爬虫与算法(微信号为:easy_web_scrape), 欢迎大家关注哦~~

参考文献:

  1. Docker —— 从入门到实践: https://yeasy.gitbooks.io/docker_practice/content/install/

  2. Docker基本介绍和操作:http://blog.51cto.com/wutengfei/2156381

  3. Docker 教程: http://www.runoob.com/docker/docker-tutorial.html

  4. 《第一本Docker书 修订版》 詹姆斯·特恩布尔 人民邮电出版社

Docker入门(一)用hello world入门docker的更多相关文章

  1. Docker 学习新手笔记:从入门到放弃

    本文记录的是作为一个新手,从了解 Docker 是什么.Docker 技术包含哪些概念到上手使用.安装以及发布 Docker 镜像的整个过程.作者在学习过程中参阅了诸多文档和教程,在此一并感谢,与此同 ...

  2. Docker入门 第一课 --.Net Core 使用Docker全程记录

    微服务架构无疑是当前最火热的开发架构,而Docker作为微服务架构的首选工具,是我们必须要了解掌握的. 我通过一天的时间,网上查文档,了解基础概念,安装Docker,试验Docker命令,通过Dock ...

  3. Docker学习系列(二):Docker三十分钟快速入门(上)

    一.背景 ​ 最近,Docker技术真是一片火热,它的出现也弥补了虚拟机资源消耗过高的问题,直接让虚拟化技术有了质的飞跃.那么本文我们来聊一聊Docker,和大家一起认识Docker,简单入门Dock ...

  4. Terraform入门教程,示例展示管理Docker和Kubernetes资源

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 最近工作中用到了Terraform,权当学习记录一下,希望能帮助到其它人. Terraform系列文章如下: T ...

  5. Docker入门系列之五:15个 Docker 命令

    在这篇文章中,我们将学习15个Dockers CLI命令.如果你还不了解Docker,请查看这个系列的其他部分进行学习,Docker概念,生态系统,Dockerfile,Docker镜像. Docke ...

  6. Identity Server 4 从入门到落地(十一)—— Docker部署

    前面的部分: Identity Server 4 从入门到落地(一)-- 从IdentityServer4.Admin开始 Identity Server 4 从入门到落地(二)-- 理解授权码模式 ...

  7. Docker入门篇(一)安装docker

    Docker入门篇(一)安装docker Docker的来源 由dotCloud公司首创及正式命名,但是企业规模小,影响力不够,所以在快要坚持不住的时候,开始吃百家饭--开源了.不开则已,一开惊人.越 ...

  8. Docker系列一之基础快速入门企业实战

    1.1什么是LXC LXC为Linux Container的简写.Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚 ...

  9. Docker 学习1 容器技术基础入门

    一.虚拟化 1.主机级别虚拟化(两种) a.类型一虚拟化:在硬件上直接安装hyper-ver,然后再安装虚拟机 1).操作系统就两棵树:进程树,文件系统树. 2).一个内核只能有一个root b.类型 ...

  10. Docker 入门到实践(三)Docker 安装

    注意:不要在没有配置 Docker APT 源的情况下直接使用 apt 命令安装 Docker. 一.准备工作 系统要求 Docker CE 支持一下版本的 Ubuntu 操作系统 Cosmic 18 ...

随机推荐

  1. h5直接分享的实现方案

    首先得知道,h5是无法直接通过js跳转到微信或QQ等软件进行分享, 参照新浪的分享方式,在uc浏览器和QQ浏览器等主流浏览器中是可以直接分享的, 原因是uc浏览器和QQ浏览器这样的主流浏览器是自带分享 ...

  2. 封装ajax原理

    封装ajax原理 首先处理 用户如果不传某些参数,设置默认值 type默认get 默认url为当前页 默认async方式请求 data数据默认为{} 处理用户传进来的参数对象 遍历,拼接成key=va ...

  3. iview安装使用

    iView 是一套基于 Vue.js 的开源 UI 组件库,主要服务于 PC 界面的中后台产品. 安装 cd 项目 cnpm install iview -S 在项目中引入iview 在入口文件mai ...

  4. 小测D

    就是二分查找就够了,找到符合条件的那个最小值 不会二分可以去学一下,可以看看这个:https://www.cnblogs.com/wzl19981116/p/9354012.html #include ...

  5. kvm虚拟机克隆

    1.先关闭被克隆的虚拟机: 2.克隆命令 virt-clone -o 192.168.0.242_sw_web -n 192.168.0.163_nginx -f /data/kvm/images/1 ...

  6. Java精确测量代码运行时间

    Java精确测量代码运行时间: --------------- long startTime = System.nanoTime(); //開始時間 for(int i = 0;i<10000; ...

  7. Atlas实现MySQL大表部署读写分离

    序章 Atlas是360团队弄出来的一套基于MySQL-Proxy基础之上的代理,修改了MySQL-Proxy的一些BUG,并且优化了很多东西.而且安装方便.配置的注释写的蛮详细的,都是中文.英文不好 ...

  8. [Bash]LeetCode193. 有效电话号码 | Valid Phone Numbers

    Given a text file file.txt that contains list of phone numbers (one per line), write a one liner bas ...

  9. PHP算法之冒泡排序

    //冒泡排序 //①思路,先比较出第一次,找一个最大的值,排到最后; //②重复count遍之后,就能得到排序; //③优化,每一次循环之后不需要再次全部重复; $array = [11,5,4,58 ...

  10. js使用面向对象编写下拉菜单

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...