你不得不了解的应用容器引擎---Docker

时间:2021-10-26 16:51:07

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

1、写在最前面

要是在几年前,你说你不了解Docker,那还情有可原。现如今再不了解甚至不知道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/ 官方安装文档。虽然是英文的,但还是很全的,不要怕看不懂,实在看不懂的时候咱就右键->翻成中文(简体)

你不得不了解的应用容器引擎---Docker

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数据备份就要你们自己来了。