初识 Docker
Docker 是什么?
Docker 是一个开源的应用容器引擎, 基于 Go 语言并遵从 Apache2.0 协议开源.
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级, 可移植的容器中, 然后发布到任何流行的 Linux 机器上, 也可以实现虚拟化.
容器是完全使用沙箱机制, 相互之间不会有任何接口, 更重要的是容器性能开销极低.
Docker 与传统虚拟化的不同之处
Docker 与传统虚拟化的不同之处在于: 传统虚拟机技术是虚拟出一套硬件后, 在其上运行一个完整操作系统, 在该系统上再运行所需应用进程; 而容器内的应用进程直接运行于宿主的内核, 容器内没有自己的内核, 而且也没有进行硬件虚拟. 因此容器要比传统虚拟机更为轻便.
Docker 的优势
Docker 的五大优势为:
持续集成
版本控制
可移植性
隔离性
安全性
关于其说明, 具体可参考网址: http://dockone.io/article/389 .
Docker 的安装
本文以 Mac 系统为例, 讲解 Docker 的安装, 其它系统的安装方式可参考: 安装 Docker .
使用 Homebrew 安装
Homebrew http://brew.sh/ 的 Cask https://caskroom.github.io/ 已经支持 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 仓库, 最后将该镜像拉下来, 并运行.
镜像打包
新建 mydocker 文件夹
- $ tree mydocker
- mydocker
├── src
│ └── test_docker.py
└── test_docker.build
test_docker.py 代码:
- print "hello world from python!"
- print "this is from docker!"
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 命令的详细讲述.
命令行打包镜像:
- cd ./mydocker
- docker build -f test_docker.build -t hub.docker.com/dockertest:test.1111 .
列出镜像
在打包完镜像后, 我们可以列出 docker 的镜像, 查看镜像的 ID, 方便后续操作. 命令为 docker images, 如下:
由此可知, 我们新打包的 docker 镜像的 ID 为 be236e996983.
推送镜像
打标签(tag)
docker tag be236e996983 jclian91/dockertest:hello_world_test_19.01.31.1100
镜像 ID 可通过 docker images 查看.
登录 dockerhub 账号
docker login
再输入自己的账号, 密码即可.
推送 (push) 镜像
docker push jclian91/dockertest:hello_world_test_19.01.31.1100
所有命令的界面如下:
此时, 我们去 dockerhub 的 dockertest 仓库中去查看, 发现已经上传一个镜像了, 如下:
运行镜像
为了运行新上传的镜像, 我们先删除本地打包的镜像:
- $ 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
拉取 (pull) 新上传的镜像
docker pull jclian91/dockertest:hello_world_test_19.01.31.1100
运行 (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), 欢迎大家关注哦~~
参考文献:
Docker -- 从入门到实践: https://yeasy.gitbooks.io/docker_practice/content/install/
Docker 基本介绍和操作: http://blog.51cto.com/wutengfei/2156381
Docker 教程: http://www.runoob.com/docker/docker-tutorial.html
《第一本 Docker 书 修订版》 詹姆斯. 特恩布尔 人民邮电出版社
来源: https://www.cnblogs.com/jclian91/p/10342101.html