CentOS 下安装和使用 Docker
引言:
在服务器开发过程中,环境部署无疑是及其繁琐的事情,特别是当项目数量和规模达到一定级别之后,在一台新的机器上部署项目环境无疑是极其漫长而痛苦的,那么什么办法能够实现我们的目标:在开发环境的一次配置编译,就可以批量部署到生产环境。 这就需要用到我们接下来要说到的这个引擎了 —— Docker
简介:
Docker 是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括 VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。
docker官网地址:docker
1.应用场景:
- web 应用的自动化打包和发布;
- 自动化测试和持续集成、发布;
- 在服务型环境中部署和调整数据库或其他的后台应用;
- 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的PaaS环境。
上面的内容是网络上最常见的 Docker 原理的分析方式,似乎有点难以理解,我们接下来以一种比较通俗的方式来解释一下:什么是 Docker? 以及 为什么会有 Docker?
参考知乎:如何通俗解释Docker是什么?,作者:刘允鹏
2.什么是 Docker ?
知乎上有一个这样的解释:
Docker 的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。
docker 就是类似的理念。现在都流行云计算了,云计算就好比大货轮。docker 就是集装箱。
3.为什么会有 Docker ?
关于 Docker 存在的原因和意义,在知乎上的解释如下:
- 1.不同的应用程序可能会有不同的应用环境,比如 .net 开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的软件都安装在一个服务器上就要调试很久,而且很麻烦,还会造成一些冲突。比如 IIS 和 Apache 访问端口冲突。这个时候你就要隔离 .net 开发的网站和 php 开发的网站。常规来讲,我们可以在服务器上创建不同的虚拟机在不同的虚拟机上放置不同的应用,但是虚拟机开销比较高。docker 可以实现虚拟机隔离应用环境的功能,并且开销比虚拟机小,小就意味着省钱了。
- 2.你开发软件的时候用的是 Ubuntu,但是运维管理的都是 centos,运维在把你的软件从开发环境转移到生产环境的时候就会遇到一些 Ubuntu 转 centos 的问题,比如:有个特殊版本的数据库,只有 Ubuntu 支持,centos 不支持,在转移的过程当中运维就得想办法解决这样的问题。这时候要是有docker你就可以把开发环境直接封装转移给运维,运维直接部署你给他的 docker 就可以了。而且部署速度快。
- 3.在服务器负载方面,如果你单独开一个虚拟机,那么虚拟机会占用空闲内存的,docker 部署的话,这些内存就会利用起来。
也就是说,解决应用环境隔离的方式有 虚拟机 和 容器 这两种技术可以实现,但是虚拟机的开销太大,所以就选择用像 Docker 这个容器来实现应用环境隔离的作用:
- 一方面,能够节省开销;
- 另一方面,解决一次开发配置编译便能直接快速部署到运营生产环境的问题。
CentOS 安装 Docker:
1.安装准备:
首先,先更新一下安装工具的资源库:
yum update
Docker 要求 CentOS 系统的内核版本高于 3.10 ,那么我们先来查一下当前系统内核的版本:
# uname -r
3.10.0-514.21.1.el7.x86_64
2.安装 docker:
然后,安装 Docker 工具:
yum -y install docker
加上 -y 的作用就是全自动的安装方式,不需要在安装过程中手动选择 y or n。
3.版本查询:
安装完成后,可以查询一下安装的版本:
# docker --version
Docker version 1.12.6, build 88a4867/1.12.6
还可以看到更详细的信息,包含 docker Client 和 docker Server:
docker version
Client:
Version: 1.12.6
API version: 1.24
Package version: docker-1.12.6-32.git88a4867.el7.centos.x86_64
Go version: go1.7.4
Git commit: 88a4867/1.12.6
Built: Mon Jul 3 16:02:02 2017
OS/Arch: linux/amd64
Server:
Version: 1.12.6
API version: 1.24
Package version: docker-1.12.6-32.git88a4867.el7.centos.x86_64
Go version: go1.7.4
Git commit: 88a4867/1.12.6
Built: Mon Jul 3 16:02:02 2017
OS/Arch: linux/amd64
4.启动 docker 服务:
# service docker start
Redirecting to /bin/systemctl start docker.service
5.执行 hello-world 镜像:
# docker run hello-world
Unable to find image 'hello-world:latest' locally
Trying to pull repository docker.io/library/hello-world ...
latest: Pulling from docker.io/library/hello-world
b04784fba78d: Pull complete
Digest: sha256:f3b3b28a45160805bb16542c9531888519430e9e6d6ffc09d72261b0d26ff74f
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.
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://cloud.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/
由于刚安装完的 docker 后,本地还不存在 hello-world 镜像,所以执行此镜像时会从远端仓库中去下载 hello-world 镜像,并在容器中运行。再次运行,则不会再有下载过程,会直接输出镜像的执行结果。
实用操作:
推荐一个不错的入门博客系列:大白话Docker入门(一) 和 大白话Docker入门(二)
需要明确两个概念:Image 和 Container ,即镜像与容器,列举一些核心的操作指令:
1.已下载镜像列表:
镜像也就是 Docker Images
docker images
2.容器列表:
容器对应 Docker Container
docker ps
这是正在运行的容器列表,假如想查看全部,使用:
docker ps -a
3.从 Docker hub 仓库的 Registry 中下载一个 Image (镜像):
容器对应 Docker Container
docker pull image-name
image-name 是镜像的名称,可以先在 docker hub 官网 查询镜像是否存在。假如有不同的Tag,可以在最后带上要下载的Tag
docker pull image_name:tag
4.将镜像放进容器中执行:
docker run image-name
其他:
1.FirewallD
CentOS-7 中介绍了 firewalld,firewall 的底层是使用 iptables 进行数据过滤,建立在 iptables 之上,这可能会与 Docker 产生冲突。
- 当 firewalld 启动或者重启的时候,将会从 iptables 中移除 DOCKER 的规则,从而影响了 Docker 的正常工作。
- 当你使用的是 Systemd 的时候,
firewalld会在 Docker 之前启动,但是如果你在 Docker 启动之后再启动 或者重启firewalld,你就需要重启 Docker 进程了。
参考:
CentOS 下安装和使用 Docker的更多相关文章
- CentOS下安装Jenkins(Docker/war/tomcat/java -jar)
参考官方提供的安装教程:https://jenkins.io/doc/book/installing/,可以发现官方推荐使用Docker进行安装.虽然用Docker有很多好处,但也有缺点. 下面是各种 ...
- CentOS下安装DockerCE
title: CentOS下安装DockerCE comments: false date: 2019-09-04 09:47:58 description: 在CentOS下安装社区版Docker ...
- docker学习之路-centos下安装docker
前言 我要在云服务器上做一个asp.net core的webapi应用,使用docker来部署应用,中间用到的任何组件包括nginx和sqlserver 2017都是用docker来装载运行,所以,这 ...
- Centos下安装Docker,并配置国内docker源
Centos下安装Docker 替换为国内的yum源(可选): mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.re ...
- CentOS下安装hadoop
CentOS下安装hadoop 用户配置 添加用户 adduser hadoop passwd hadoop 权限配置 chmod u+w /etc/sudoers vi /etc/sudoers 在 ...
- CentOS下安装使用start-stop-daemon
CentOS下安装使用start-stop-daemon 在centos下下了个自启动的服务器脚本 执行的时候发现找不到start-stop-daemon命令 好吧 执行手动编译一下 加上这个命令 w ...
- 从零开始学 Java - CentOS 下安装 Tomcat
生活以痛吻我,我仍报之以歌 昨天晚上看到那个冯大辉老师的微信公众号,「小道消息」上的一篇文章,<生活以痛吻我,我仍报之以歌>.知乎一篇匿名回答,主题为<冯大辉到底是不是技术大牛,一个 ...
- CentOS 下安装
2016年12月5日15:25:58 ----------------------------------- 通常情况下在centos下安装软件就用yum. 关键是,使用yum你要知道安装包的名字是什 ...
- [Linux]CentOS下安装和使用tmux
前天随意点开博客园,看到了一篇关于tmux的文章 Tmux - Linux从业者必备利器,特意还点进去看了.毕竟Linux对于做游戏服务端开发的我来说,太熟悉不过了.不过我就粗略地看了一眼,就关掉了. ...
随机推荐
- booststrap select2的应用总结
本身对前端js了解不是特别多,在项目中,遇到很多前端的问题,有时间整理一下,有不对的地方,不吝赐教,多多批评指正. 在项目中,遇到最多的select下拉框情景,莫过于多选和单选了 单选是很容易理解的, ...
- mvc ---- ajax 提交 (ckeditor)富文本框 提示潜在危险 Request.Form
ajax 提交 ckeditor 中的内容怎么提交都提交不了,折腾半天,后来终于找到问题 在你的方法头上加 [HttpPost] [ValidateInput(false)] public Actio ...
- C++中的也能使用正则表达式----转载
转自:https://www.cnblogs.com/ittinybird/p/4853532.html, 以作笔记. 正则表达式Regex(regular expression)是一种强大的描述字符 ...
- gulp4小demo
本来想着用gulp搭建一个自动化构建工具,结果一顿报错,后来发现我重新安装的gulp版本是4.0.0,与3版本还是不太一样的,遂记之. Gulp 3版本Demo: const gulp = requi ...
- 转发一篇分析LinQ是什么?
LINQ(发音:Link)是语言级集成查询(Language INtegrated Query) ?LINQ是一种用来进行数据访问的编程模型,使得.NET语言可以直接支持数据查询 ?LINQ的目标是降 ...
- English trip -- Review Unit4 Health 健康
medicine n. 药:医学:内科:巫术 vt. 用药物治疗:给…用药 drug 毒药;药店(drugstore) pill 药丸 patient 病人 head 头 hands 手 ...
- 5-13 Rspec实际; validates处理Errors, TDD, 单元测试和验收测试,capybara
validates处理验证错误:详见ActiveModel::Errors文档 一,errors ActiveModel::Errors的实例包含所有的❌.每个错误:key是每个属性的name, va ...
- android--------微信 Tinker 热修复 (三)
前面简单介绍了一下Tinker热修复的使用,包含debug和release,今天就来分享一下微信针对Tinker热修复提供的一个平台,TinkerPatch补丁管理后台. 1:什么是TinkerPat ...
- Android程序员眼中世界上最遥远的距离
世界上最遥远的距离,是我在if里你在else里,似乎一直相伴又永远分离: 世界上最痴心的等待,是我当case你是switch,或许永远都选不上自己: 世界上最真情的相依,是你在try我在catch. ...
- Java进阶资料汇总
Java经过将近20年的发展壮大,框架体系已经丰满俱全:从前端到后台到数据库,从智能终端到大数据都能看到Java的身影,个人感觉做后台进要求越来越高,越来越难. 为什么现在Java程序员越来越难做,一 ...