乐趣区

机缘巧合与Docker结缘

前戏

本小白早上突然对 mongodb 的可靠性再次产生深厚的兴趣,
然后查询到 4.0 已经支持副本集级别的事务了,
虽然不太明白,
但重要的是事务不向下兼容,
必须把兼容性提高到 4.0

到我的 ubuntu 上查一下

mongo --version

结果是 3.6.3
于是考虑升级一下 mongodb
查到了资料,比如:
让你的 mongodb 支持事务 — 升级到 mongodb 4.0

但,重点是这个链接:
在 Ubuntu Linux 上安装最新版本的 MongoDB

我的注意力全部被评论区的 docker 吞噬

正菜

于是我找到了这篇文章:
这可能是最为详细的 Docker 入门吐血总结


从版权角度来说,这并不是作者的原文。
但下方的来源链接已经不是原文,而是作者主站。
可惜了,就看这个吧。
顺便说一下,这个作者,是个 21 岁大萌弟,哈哈,好可爱。

应用

Docker 资源汇总
MAC 下 docker 搭建 Nginx+PHP+MySQL

延伸

大家生产环境用 Docker 吗?
除去评论区一堆恶搞的回复外,真实情况很明显了:

现在在生产环境用的是很普遍的,通常互联网公司都在用。
弹性资源占用是很大优势,需要持续集成快速迭代的项目通常都容器化部署。
在线业务全部 docker 化
不仅仅是 docker,还用 k8s。。。
生产环境还得靠 k8s
再用 docker swarm

然后搜了两篇关于 k8s 的文章:
十分钟带你理解 Kubernetes 核心概念【干货满满,推荐!】
干货满满!10 分钟看懂 Docker 和 K8S【其实很水】

学习规划

速成是不可能的,
想一口吃个胖子,会被噎死…
所以我还是慢慢来,先在 mac 上搞一个,试着玩。
熟练之后,把 ubuntu 上的 mongodb 升级了。
然后有时间再搞 k8s

还有一个分支,是 mac 上使用 docker
由于历史原因,mac 上的 docker 貌似演化了很多次,如今我安装的是:
Docker version 19.03.1, build 74b1e89
有这么一个帖子,算作一个引子,将来无聊了可以研究一下 mac 的 docker:
Mac 下如何仅安装 docker CLI 而不安装整套 Docker
Docker Version Manager

实战

在 b 站看了视频,链接我时间放上来
放一张神图,命令都在神图里:

进阶:
其实容器之间都是属于是一个网段的:172.17.0.2/16
也就是说,我们启动一个 nginx 容器,然后再启动一个 alpine,curl 172.17.0.2就能访问到 nginx 的主页。

如果觉得记 ip 很麻烦,还可以用 –link 来映射

$ docker run -d -p80:80 --name mynginx nginx        // 起名为 mynging
$ docker run -dit --link mynginx:mynginx alpine        //--link 第一个 mynginx 是刚才容器名称,第二个 mynginx 是内部的域名。它会出现在 alpine 的 `/etc/hosts` 中

这样在 alpine 中,curl mynginx 即可访问了。

插播一条本台刚刚收到的消息:
发现了一些极小的 linux:alpine,并且:

目前 Docker 官方已开始推荐使用 Alpine 替代之前的 Ubuntu 做为基础镜像环境。这样会带来多个好处。包括镜像下载速度加快,镜像安全性提高,主机之间的切换更方便,占用更少磁盘空间等。

Docker 之操作系统 Alpine

这里有一些命令,记录一下,略有不同

$ docker run -dit --name myalp alpine    // 如果只写 -d,则启动不了
$ docker exec -it myalp sh    //alpine 很小,所以只有 sh,连 bash 都没有
# apk add curl // 使用 apk add 来安装常用软件

消息插播结束,继续正文

但,如果我们搭建 lnmp 环境呢?这样一个一个 –link 有点慢啊
于是请出今天的主角:docker-compose
首先,我们做一些准备文件:

$ tree
.
├── conf
│   └── nginx.conf
├── docker-compose.yml
└── html
    ├── index.html
    ├── index.php
    └── mysql.php

nginx.conf:
nginx.conf 参考:https://blog.csdn.net/weixin_…

worker_processes  1;

events {worker_connections 1024;}

http {
    include mime.types;
    default_type application/octet-stream;

    sendfile on;

    keepalive_timeout 65;

    server {
        listen 80;
        server_name localhost;

        location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
        }

        error_page    500 502 503 504  /50x.html;
        location = /50x.html {root   /usr/share/nginx/html;}

        location ~ \.php$ {
            fastcgi_pass    php:9000;
            fastcgi_index   index.php;
            fastcgi_param   SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
            include         fastcgi_params;
        }
    }
}

docker-compose.yml:

version: "3"
services:
  nginx:
    image: nginx:alpine
    ports:
    - 80:80
    volumes:
    - /root/html:/usr/share/nginx/html
    - /root/conf/nginx.conf:/etc/nginx/nginx.conf
  php:
    image: devilbox/php-fpm:5.2-work-0.89    //php-fpm 是在 hub.docker.com 中搜索的,选择的第二个。volumes:
    - /root/html:/var/www/html
  mysql:
    image: mysql:5.6
    environment:
    - MYSQL_ROOT_PASSWORD=123456

全部文件创建好了,就可以启动啦:

docker-compose up -d    // 这样就可以运行刚才的配置文件

更多关于 docker-compose 的介绍:
Docker 快速入门——Docker-Compose

退出移动版