Docker学习笔记

以下均为个人对docker的理解,相关概念说法不一定正确,但能方便我们去理解。

什么是Docker?

Docker一定程度上可以理解为我们以前玩弄的虚拟机管理软件VM,但其本质是基于linux上的容器概念,可以用docker来创建管理一个一个的容器,这里的容器可以理解为VM中一个个的虚拟机。

为什么要使用Docker?

线上服务器的各种服务(如web服务、数据库等)在部署之前都得进行各种复杂的环境、参数、支持库等的安装和配置,如果同一台服务器上部署多个服务时,每个服务所依赖的环境参数这些在配置过程中还可能产生一定的冲突,进而增加我们的部署难度。
另外,程序开发者在本地进行开发时,也需要对当前项目在不同库、不同系统版本下进行测试,比如python2.x环境和python3.x环境对项目的影响,或者php5和php7等等这样的差异化测试,如果这些配置全部都赤裸裸的配置在本地机器上,势必会产生很多无法预知的问题。

得益于Docker,它可以帮助我们创建一个个的容器,也可以理解为一个个的虚拟环境(VPS),一个个的linux系统,只不过默认的都是些简版系统而已,很多命令都没有,不像市面售卖的VPS已经默认给你装好了很多实用命令。
而且可以在同一台机器上部署多个容器,每个容器之间都是独立的,资源独立、环境配置独立等等,这就是docker为我们做的事情。

如何使用Docker创建容器(创建虚拟机)?

回想之前把玩VM时,我们要创建一个win7、win10、winXP虚拟机时,是不是要先去找对应系统的镜像文件?动辄好几G的文件。
Docker也有镜像文件的概念,而且docker做到了和Github一样,有官方的镜像文件托管站,可以像使用Git一样将你配置的镜像文件push到官方网站,别人也可以pull你所创建的镜像文件,像极了Git的使用,后面我们谈到Nodejs时,也有这个概念。

OK,docker pull下来的镜像文件会由docker统一放在docker的指定的目录中,整个机器都可以共用这些镜像文件。

#查看本机的所有镜像文件
[root@vmi442840 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
myproxypool         latest              4ee1b32850f7        25 hours ago        976MB
wordpress           latest              ec5c071010b5        4 weeks ago         546MB
python              3.6                 94b7a322c796        4 weeks ago         874MB
mysql               5.7                 42cdba9f1b08        4 weeks ago         448MB
redis               alpine              bd71e6db4a54        2 months ago        32.2MB

然后可以直接运行一个容器:

docker run -it  wordpress:latest bash  #直接运行一个容器,使用镜像wordpress:latest bash命令行进入

如何创建自己的容器或镜像?

docker的官方网站托管了大量的镜像,如python2、python3、php5、php7、centos、ubantu以及各个用户自己制作上传的镜像,我们可以直接按需pull我们想要的镜像,但有时我们需要制作自己的镜像或是容器,如你编写的一个web服务,也可以做成一个容器,然后也可以导出成一个镜像。
自己制作容器,就会对应到一个Dockerfile文件!

#Dockerfile文件
FROM python:3.6  #表示以官方镜像python:3.6为基础创建,其实这个python:3.6不是python这个语言,而是一个linux系统,然后这个系统里安装了python3.6
WORKDIR /app  #工作目录,登录到该容器时,默认定位到的目录
COPY . .
COPY user_dir/.git-credentials ~/  #从本机拷贝相关文件到容器的目录内
RUN pip install -r requirements.txt  #RUN安装和配置服务所需的各种环境、配置等
RUN apt-get update
RUN apt-get -y install vim
RUN git config --global credential.helper store
VOLUME ["/app/proxypool/crawlers/private"]  #目录挂载,可将本机某目录直接对应到容器某目录,方便宿主机和容器共享文件
CMD ["/app/shell.sh"]
CMD ["supervisord", "-c", "supervisord.conf"] #容器启动时默认执行的命令,此命令必须要,且多条CMD命令时只会执行最后一条,而且最后指定的CMD命令必须是一个不停止的工作任务,否则当这个任务停止后,整个容器也就退出了,无法做到容器一直保活

大部分情况,我们不会这样一个个的启动容器,因为我们同时会有多个服务,每个容器服务都这样创建肯定不合理,因此docker-compose出现了!

什么是docker-compose?

说的直白一点,docker-compose就是一个编排同时管理多个容器的工具,与它配对使用的是一个docker-compose.yml文件,docker-compose命令必须在一个包含docker-compose.yml文件的目录中才能使用,且当下docker-compose命令只能管理当前目docker-compose.yml文件中所涉及的容器,安装在机器上的其他容器无法干扰。
docker-compose的大部分命令基本和docker的命令重合,他们唯一的区别是docker的命令能管理机器上所有的容器和镜像文件,而docker-compose只能管理当前docker-compose.yml文件所涉及的容器。

version: '3'
services:  #services下面一个个的节点就是一个个的容器
  redis:       #节点名称
    image: redis:alpine    #容器所使用的镜像,此处为redis官方镜像
    container_name: redis  #容器名称
    command: redis-server /etc/redis/redis.conf   #该redis服务器启动后所执行的命令,类似于开机启动程序,这与Dockerfile文件中的CMD命令不同
    ports:
      - "6399:6379"  #通信端口映射 宿主机端口:容器端口
    restart: always
    volumes:  #目录挂载
      - ./data/redis:/etc/redis
  proxypool:
    build: .  #表示是自己的容器,在当前目录下找Dockerfile文件进行build
    image: 'myproxypool'
    container_name: myproxypool
    ports:
      - "3535:5555"
    restart: always
    depends_on:
      - redis
    links:
      - redis
    volumes:
      - ./:/app
    environment:  #环境变量,容器启动后往当前容器中写入相关环境变量,类似于mac中的bash_profile
      TEST_URL: https://www.baidu.com/
      REDIS_HOST: redis
      REDIS_PORT: 6389
      REDIS_DB: 0

Docker的入门概念理解大概就是这样,具体的使用以及更高级的操作实际项目中练习。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容

  • 1、docker的基本概念 镜像 容器 仓库 2、docker安装 卸载旧版本 旧版本的 Docker 称为 do...
    发胖的向日葵阅读 441评论 0 0
  • 基本操作 安装docker 不解释,不说明 配置Docker 加速器 ubuntu 下可以这样配置: 运行一个do...
    码农John阅读 155评论 0 0
  • Docker应用容器 1. 初识 Docker 我们写的代码会接触到好几个环境:开发环境、测试环境以及生产环境。 ...
    itlu阅读 311评论 0 5
  • Docker基本操作 Docker环境配置 安装docker 参考https://www.jianshu.com/...
    alfalfaw阅读 318评论 0 0
  • 深入浅出Docker学习笔记 Docker引擎 Docker引擎:用来运行和管理容器的核心文件模块化(基于开放容器...
    yuq329阅读 818评论 0 4