最近突然想搭一个redis集群玩玩,因为公司的电脑同时开2个虚拟机就卡的不行,所以我就想到用Docker开启多个redis-server来搭建。然后在网上找着找着发现,使用Docker,哪需要搭建啊,直接Docker pull一个镜像就OK了。加上之前使用Docker,五分钟搭建一个类似github的Gogs项目平台和Rancher云,不得不感叹,Docker给用户带来了太多的方便。

1、写在最前面

要是在几年前,你说你不了解Docker,那还情有可原。现如今再不了解甚至不知道Docker,那我只能说,兄弟,过分了啊?

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

说的通俗易懂点,本人是一个php开发者,比如刚买了一个Linux服务器,需要部署项目到服务器上,以前我们是这么干的:安装php-安装mysql-安装Nginx/Apache,然后再部署项目。这中间的过程老司机都懂有多痛苦。

那么有了Docker后,我们可以这么干:

  • DockerHub上找一个你喜欢的镜像,可以是php-nginx/Apache-mysql的,也可以是php-nginx,然后把mysql单独出来的,我使用的就是后一种。也推荐大家使用这种,这样这个mysql容器就可以被多次使用。
  • 运行Docker pull imagesName,下载你的镜像。
  • 使用Docker run 运行你的容器吧。

好了,到这里就结束了,你可以部署你的项目了。(这里先说个流程,具体的操作命令后面会说。)

2、我眼中的Docker

Docker提倡”Build once,Run anywhere“。当然,它也做到了。想了解Docker,就必须知道他的三个特性:

  • 镜像

    Docker镜像是面向Docker引擎的一个只读模板,它也是创建容器的必需品。

  • 容器

    每一个容器的创建都必须依赖于一个镜像,但一个镜像可以被用来创建多个容器。你可以想虚拟机一样去操作它-开始,停止,重启,删除。。

  • 仓库

    其实也就是镜像的仓库,目前镜像基本都放在DockerHub上,其上存放了大量的镜像供用户下载。

3、安装Docker

https://docs.docker.com/engine/installation/ 官方安装文档。虽然是英文的,但还是很全的,不要怕看不懂,实在看不懂的时候咱就右键->翻成中文(简体)

4、Docker基本命令

下面给大家介绍一些Docker常见的基本命令。

docker images : 查看本地镜像   -a 列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层)

docker pull 镜像名 :从仓库拉取镜像到本地

docker run :运行容器(说下这条命令的一些常用参数)

  --name 为容器指定一个名称

  -p 端口映射,即宿主机的端口映射容器端口,可以指定多个

  -v 数据挂载,即将容器内的数据挂载到宿主机上,可自动同步

  -d 后台运行容器

  --link 可用来连接两个容器

  -m 设置容器使用内存最大值

docker ps :列出本地容器 -a 列出所有本地容器

docker exec -it 容器ID /bin/bash :以终端交互模式进入容器

docker login -u 用户名 -p 密码:用户名和密码都是dockerhub平台的

docker push 镜像名:tags :上传本地镜像到镜像仓库

docker commit 容器ID 镜像名:tags:从容器创建一个新的镜像

  这个镜像名的命名格式应该为:dockerhub的用户名/镜像名 。否则你生成的镜像无法上传的自己的dockerhub镜像库。

  -a  提交的镜像作者

    -m 提交时的说明文字;

5、容器间的通信

  • 使用--link参数连接

    假设机器上已经通过docker pull下载了mysql镜像和php-nginx镜像。

    1、启动mysql容器,并命名为myDB

      docker run --name myDB -e MYSQL_ROOT_PASSWORD=111111 -d mysql

    2、启动php-nginx容器

      docker run --name php-nginx --link myDB:mysql -p 8002:80 -d webdevops/php-nginx

      --link myDB:mysql 就是告诉要创建的容器,要使用myDB这个容器,并且起了一个别名叫mysql。这样在新创建的容器里就可以使用“mysql”来连接myDb这个容器。

    但这种通信方式有一个局限性,就是只有运行在同一台服务器上的容器间可以通信,想要跨服务器通信,就看下面的另一种连接方式。

  • 通过宿主机端口连接

    这种方式更简单更容易理解。在创建mysql容器的时候与宿主机建立端口映射:docker run --name myDB -p 3306:3306 -e MYSQL_ROOT_PASSWORD=111111 -d mysql.

    这样,假如你的宿主机IP是127.0.0.1.那么你就可以在任何地方用127.0.0.1:3306来连接mysql容器。推荐使用这种方式,因为方便我们使用Navicat等数据库图形工具来连接。

6、数据挂载

如果有一天你的mysql容器不小心被删除了,那么里面的数据随之也会不见,这是相当相当相当可怕的事情。所以这里我们就要用到数据挂载了。

docker run --name myDB -p 3306:3306 -e MYSQL_ROOT_PASSWORD=111111 -v /data/mysql:/var/lib/mysql -d mysql。

这样,mysql中的数据就会自动同步到你宿主机的/data/mysql目录中,若该目录不存在,则会自动创建。这里的mysql数据备份就要你们自己来了。

你不得不了解的应用容器引擎---Docker的更多相关文章

  1. 【开发工具 docker】值得学习的应用容器引擎docker安装

    概述: Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何 ...

  2. Java框架Spring Boot & 服务治理框架Dubbo & 应用容器引擎Docker 实现微服务发布

    微服务系统架构实践 开发语言Java 8 框架使用Spring boot 服务治理框架Dubbo 容器部署Docker 持续集成Gitlab CI 持续部署Piplin 注册中心Zookeeper 服 ...

  3. Kubernetes将弃用Docker!与 containerd容器引擎

    时间戳:2022-06-07 20:32:19 星期二 撰写文档参考:(阿良-腾讯课堂)Kubernetes将弃用Docker 参考博客k8s入坑之路(3)containerd容器 container ...

  4. 史上最全面的Docker容器引擎使用教程

    目录 1.Docker安装 1.1 检查 1.2 安装 1.3 镜像加速 1.4 卸载Docker 2.实战Nginx 3.Docker命令小结 4.DockerFile创建镜像 4.1 Docker ...

  5. Centos7下安装与卸载docker应用容器引擎

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Li ...

  6. Docker 1.3.3/1.4.0 发布下载,Linux 容器引擎

    Docker 1.3.3 发布,下载地址: https://github.com/docker/docker/archive/v1.3.3.zip 改进记录包括: Security Fix path ...

  7. 操作系统-容器-引擎容器-百科:Docker

    ylbtech-操作系统-容器-引擎容器-百科:Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上 ...

  8. 【转帖】技术选型之Docker容器引擎

    技术选型之Docker容器引擎 https://segmentfault.com/a/1190000019462392 图过不来的 原作者写的挺好的 题外话 最近对Docker和Kubernetes进 ...

  9. 【应用容器引擎】Docker笔记

    一.Docker是什么? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的linux机器上,也可以实现虚拟化.它是一个轻量级容器技 ...

随机推荐

  1. 利用python基于微博数据打造一颗“心”

    一年一度的虐狗节将至,朋友圈各种晒,晒自拍,晒娃,晒美食,秀恩爱的.程序员在晒什么,程序员在加班.但是礼物还是少不了的,送什么好?作为程序员,我准备了一份特别的礼物,用以往发的微博数据打造一颗&quo ...

  2. Leetcode题解(33)

    113. Path Sum II 题目 分析: 主要考察二叉树深度优先遍历(DFS),递归调用当前节点的左右结点即可,代码如下(copy网上): /** * Definition for binary ...

  3. Azkaban安装部署

    在root的用户下搭建的 • Azkaban安装部署(可参照:http://azkaban.github.io/azkaban/docs/latest/) 1):前提 安装JDK,安装Hadoop,H ...

  4. 泛型DAO

    最近正在学习泛型DAO,通过网上查阅资料,汇总并自己整理了一下.提前需要学习的知识java反射.泛型 用到的反射如下: Class<T>类 是java.lang包下,Class类的实例表示 ...

  5. windows系统扩展C盘的工具推荐(解决了C盘和压缩卷不相邻无法扩展C盘问题)

    1.下载分区工具 “分区助手3.0中文版” 下载地址:http://www.33lc.com/soft/14880.html 2.下载下来是一个压缩包,解压后运行安装程序. 3.安装完成后按以下步骤执 ...

  6. js判断对象为空 JSON.stringify(obj)

    JSON.stringify(obj) : 用于从一个对象解析出字符串 var c = {}; if(JSON.stringify(obj) == "{}"){ console.l ...

  7. Git(1)----Eclipse安装Git插件

    一.从官网选择系统版本下载Git并安装 地址:https://git-scm.com/downloads/ 二.打开Eclipse 1. 第一种安装方法: help-->Install New ...

  8. javaScript额外笔记

    --------------------------------------------------------Part 1javascript:脚本语言辅助开发:网页的前台开发三大块:1.HTML ...

  9. 通过两个小栗子来说说Java的sleep、wait、notify、notifyAll的用法

    线程是计算程序运行的最小载体,由于单个单核CPU的硬件水平发展到了一定的瓶颈期,因此就出现了多核多CPU的情况,直接就导致程序员多线程编程的复杂.由此可见线程对于高性能开发的重要性. 那么线程在计算机 ...

  10. Knowledge_SPA——精研查找算法

    首先保证这一篇分析查找算法的文章,气质与大部分搜索引擎搜索到的文章不同,主要体现在代码上面,会更加高级,会结合到很多之前研究过的内容,例如设计模式,泛型等.这也与我的上一篇面向程序员编程--精研排序算 ...